从SD卡迁移到SD NAND,在软件协议层面几乎是透明的,因为SD NAND完全兼容SD协议,会被主控识别为一张标准的SD卡。迁移的核心工作主要集中在硬件PCB设计和启动方式的确认上。
封装更换:用SD NAND的LGA-8或WSON-8贴片封装(约6×8mm)替换SD卡座,从根本上解决接触不良问题。
信号完整性:
电源与上拉:
对于Linux系统,驱动无需重写,只需修改设备树(Device Tree)配置,关键参数如下:
&mmc0 {
bus-width = <4>; // 4位数据总线
max-frequency = <50000000>; // 最大时钟频率,建议从50MHz开始调试
non-removable; // 关键:声明为不可移除设备
disable-wp; // 禁用写保护检测(通常无物理写保护引脚)
cap-sd-highspeed; // 使能高速模式
status = "okay";
};
与eMMC不同,大多数主控的Boot ROM不支持直接从SD NAND启动。因此,如果你的系统原本从eMMC启动,迁移时需要特别处理:
方案A(推荐):保留一个小容量的SPI NOR Flash,将U-Boot存放在其中。由U-Boot初始化SDIO接口后,再从SD NAND加载内核和文件系统。
方案B:确认你的主控芯片Boot ROM是否支持从SDIO启动(需查阅芯片手册)。
方案C:如果系统原本就是从SD卡启动的,那么SD NAND的启动方式与之相同,无需额外改动。
&mmc1 { // 根据实际使用的SDC控制器选择(如mmc0或mmc1)
compatible = "allwinner,sun8i-h3-mmc";
reg = <0x01c13000 0x1000>;
interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_MMC1>, <&ccu CLK_MMC1>;
clock-names = "ahb", "mmc";
resets = <&ccu RST_BUS_MMC1>;
reset-names = "mmc";
bus-width = <4>;
vmmc-supply = <®_vcc3v3>;
non-removable; // SD NAND是焊接的,不可移除
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&mmc1_pins>;
max-frequency = <50000000>; // 建议初始值
cap-sd-highspeed;
};
&pio {
mmc1_pins: mmc1-pins {
allwinner,pins = "PA0", "PA1", "PA2", "PA3", "PA4", "PA5";
allwinner,function = "mmc1";
allwinner,pull = <1 1 1 1 1 1>; // 上拉
};
};
接口模式:SDIO 4线模式的速度远高于SPI模式,应优先使用。
文件系统:根据需求选择FAT32(兼容性好)或exFAT(支持大文件)。
块大小:适当增大读写块大小(如4096字节),可减少命令交互次数,提升效率。
磨损均衡:SD NAND内部集成了磨损均衡算法,但若将其用作频繁写入的存储介质,建议文件系统层也采用相应策略以延长寿命。
从SD卡迁移到SD NAND,软件层面基本无需改动,主要工作量在于PCB重新设计和启动方案的确认。对于T113-S4平台,正确配置设备树中的mmc节点(尤其是non-removable属性)是识别成功的关键。
上一篇:SDIO建立时间和保持时间
下一篇:没有了!
电话:176-6539-0767
微信:176-6539-0767
邮箱:xcz@xczmemory.cn
地址:深圳市联创商务中心13层1308室