以下是全志T113-S3驱动SD NAND的详细步骤,涵盖硬件设计(SDIO和SPI模式)、软件驱动配置及常见问题排查方法:
SDIO模式适用于高速通信,需连接以下引脚(具体引脚以芯片手册为准):
CLK:时钟信号(如PC0)
CMD:命令/响应线(如PC1)
DAT0-DAT3:数据线(如PC2-PC5)
VCC/GND:电源与地(需符合NAND电压要求)
注意事项:
确保CLK信号线短且远离干扰源,必要时串联33Ω电阻匹配阻抗。
数据线建议做等长处理(误差≤50mil),减少时序偏差。
SPI模式适用于低速场景,需连接以下引脚:
SCK:时钟(如PC2)
MOSI:主发从收(如PC4)
MISO:主收从发(如PC5)
CS:片选(如PC3)
WP/HOLD(可选):写保护和保持引脚(如PC6、PC7)
注意事项:
需在CS、WP、HOLD引脚添加上拉电阻(4.7kΩ~10kΩ),避免信号浮空。
若布线较长,需降低SPI时钟频率(如从100MHz降至24MHz)并提高驱动强度(如从10mA提升至30mA)。
在设备树文件(如board.dts
)中添加SD NAND节点:
SDIO模式示例:
&mmc0 { bus-width = <4>; // 4位数据总线 max-frequency = <50000000>; cap-sd-highspeed; cap-mmc-highspeed; status = "okay"; };
SPI模式示例:
&spi0 { status = "okay"; spi-max-frequency = <24000000>; spi-rx-bus-width = <1>; spi-tx-bus-width = <1>; spi-nand@0 { compatible = "spi-nand"; reg = <0>; spi-max-frequency = <24000000>; nand-on-flash-bbt; // 启用坏块表 }; };
关键参数:
spi-max-frequency
:根据硬件布线质量调整,建议从低到高测试。
drive-strength
:驱动强度设为30以提高信号稳定性。
启用驱动模块:
SDIO模式:启用CONFIG_MMC_SUNXI
和CONFIG_MMC_BLOCK
。
SPI模式:启用CONFIG_MTD_SPI_NAND
和CONFIG_MTD_BLOCK
。
通过make menuconfig
搜索并勾选相关选项。
兼容性修改:
若使用高版本内核(如5.4),可能需要修改驱动代码(如fbtft-core.c
中的GPIO请求函数)。
检查ECC算法兼容性,避免因NAND芯片差异导致数据错误。
分区表:在U-Boot或内核中定义正确的MTD分区(如/dev/mtdblock0
为根文件系统)。
启动参数:在bootargs
中指定根设备路径(如root=/dev/mtdblock5
)。
硬件检查:
用万用表确认电源和地连接正常。
用示波器检测CLK信号是否稳定,排除干扰或频率过高问题。
软件检查:
查看内核日志(dmesg
),确认驱动加载是否成功。
检查设备树引脚配置是否与硬件一致。
降低SPI/SDIO时钟频率(如从100MHz降至24MHz)。
调整NAND驱动中的ECC参数,或更换支持更严格ECC的NAND芯片。
检查PCB布线是否引入噪声,必要时重新设计等长线。
若提示Unable to mount root fs
:
确认根文件系统分区号与bootargs
一致。
检查文件系统镜像是否损坏(可通过fsck
验证)。
全志在线论坛:SPI NAND四线模式问题讨论。
设备树配置示例:SPI屏幕驱动中的引脚配置方法。
信号完整性分析工具:使用Sigrity或HyperLynx优化布线设计。