寻求Spansion s25hs512t等系列NOR Flash适配u-boot及barebox的可用配置方案
Spansion S25HS/HL系列NOR Flash适配2021.x版本U-Boot及Barebox方案
U-Boot 2021.x 适配步骤
该系列Flash适配失败的核心原因是2021版U-Boot的SPI NOR框架调整了4字节地址模式、Octal QSPI时序的默认判断逻辑,旧2018版驱动没有兼容新框架的标记位,按以下步骤修改即可:
- 第一步:修改
drivers/mtd/spi/spi-nor-ids.c,添加芯片ID匹配项,同系列不同容量型号仅需调整ID第三位、块数、块大小参数即可:
// s25hs512t适配示例 { INFO("s25hs512t", 0x013420, 0, 256 * 1024, 256, SPI_NOR_QUAD_READ | SPI_NOR_OCTAL_READ | SPI_NOR_4B_OPCODES | SPI_NOR_SKIP_SFDP | SPI_NOR_NO_FR) },
强制添加SPI_NOR_SKIP_SFDP标记,该系列多数量产批次内置SFDP表存在时序参数错误,不要自动读取
- 第二步:调整QSPI节点设备树配置,匹配硬件连线参数:
&qspi { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_qspi>; spi-tx-bus-width = <8>; spi-rx-bus-width = <8>; spi-max-frequency = <133000000>; spi-half-duplex; // 该系列不支持全双工,必须添加 vqmmc-supply = <®_1v8>; // 对应硬件上Flash的IO供电节点 flash@0 { compatible = "jedec,spi-nor"; reg = <0>; spi-max-frequency = <133000000>; }; };
- 第三步:修改
drivers/mtd/spi/spi-nor-core.c中的地址模式判断逻辑,对该系列芯片强制固定4字节地址模式,跳过框架默认的3字节/4字节自动切换逻辑,避免寻址溢出导致写操作无报错但实际写入失败。
Barebox 2021.08.x 适配步骤
Barebox 2021版的SPI NOR驱动逻辑和U-Boot类似,额外需要处理Octal模式的强制开启配置:
- 第一步:将上述U-Boot适配中的ID匹配项添加到
drivers/mtd/spi-nor/spi-nor.c的ID匹配表中,标记位保持一致。 - 第二步:设备树QSPI节点配置和U-Boot一致,额外添加
cypress,octal-mode;属性到Flash子节点,强制开启Octal传输模式。 - 第三步:修改
drivers/mtd/spi-nor/nor.c,屏蔽该系列芯片的SPI_NOR_AUTO_4B标记,强制固定4字节地址模式,避免地址切换时序冲突。
验证调试方法
- 执行
sf probe命令,确认输出的芯片ID、容量和实际硬件一致,若识别到的容量错误优先检查ID匹配配置是否正确。 - 擦除验证:执行
sf erase 0x0 0x1000,擦除完成后执行sf read 0x80000000 0x0 0x1000,读取到的内容全为0xFF则擦除功能正常。 - 读写验证:执行
mw.b 0x80000000 0x5a 0x1000向内存写入测试数据,再执行sf write 0x80000000 0x0 0x1000写入Flash,重新读取Flash内容到另一块内存地址后对比两段内存数据,一致则读写功能正常。
内容的提问来源于stack exchange,提问作者Harkirat
相关产品推荐
相关产品推荐

