新料上手认不到,多数不是器件坏了,而是上电时序、上拉、时钟或分区表这四件事里有一件没做对。米客方德贴片SD卡出厂未必带分区表,主机端要先能识别到卡、再完成初始化、再分区格式化、最后挂载文件系统,四步依次通过,读写才算打通。
硬件侧先确认四件事
-
供电:VDD 2.7V至3.6V,供电能力不小于200mA;上电前电压要落到0.5V以下并保持至少1ms。
-
上拉:CMD与DAT0至DAT3各用10kΩ至100kΩ上拉到VDD,漏了会出现随机不识别。
-
时钟:初始化阶段低于400kHz,识别完成后再升到10至25MHz;上电后先发至少74个时钟再发CMD0。
-
CLK走线:串0至120Ω电阻,两侧包地,不要并电容,边沿变缓会直接导致初始化失败。
识别与初始化看哪几个命令
-
CMD0:复位进入idle状态,必须有响应。
-
CMD8:查询电压与协议版本,SD2.0及以上会回应。
-
ACMD41:发卡初始化,等到忙位清零表示就绪。
-
CMD2与CMD3:取CID、分配RCA。
-
CMD9与CMD7:读CSD拿到容量与擦写参数,选中卡进入transfer状态。
哪一步没回应,问题就定位在那一步对应的硬件条件上,比盲猜快得多。
分区、格式化与挂载
-
先读容量:1Gb为128MB,4Gb为512MB,8Gb为1GB,容量对不上说明命令解析有问题。
-
分区表:出厂可能为空,需要写MBR或GPT,再建一个主分区。
-
格式化:4GB以下用FAT32更稳,单文件上限4GB;更大容量或大文件用exFAT。
-
挂载:FATFS用f_mount,Linux用mount,RT-Thread用dfs_mount,路径写对才能打开文件。
-
首次校验:整盘写满再读回比对,能筛出坏块集中的个例。
一个从认不到到跑通的案例
(用户场景:一款手持气体检测仪,主控GD32,用SPI模式接MKDV1GIL-AST;具体问题:样机上电后CMD0一直无响应,换了三颗料都一样;解决方案:查电源发现LDO能力只有100mA且掉电拖尾,改为DC-DC,把初始化时钟从8MHz降到250kHz,补上CMD与DAT上拉;效果数据:识别一次通过,格式化128MB用时约4秒,写速1.6MB/s、读速2.4MB/s,秒级浓度采样连续跑72小时无丢点)。
常见故障对照
-
完全无响应:先看供电与地,再看74个时钟有没有发够。
-
时好时坏:上拉缺失或电源能力不足,用示波器抓VDD看有没有跌落。
-
能识别不能挂载:分区表为空或文件系统不匹配。
-
写入报错:CLK速率超过器件能力,或走线过长导致时序余量不足。
-
容量识别偏小:命令解析把CSD字段读错,注意Gb与GB的换算。
米客方德提供MKDV与MKDN两套参考设计,含上拉取值、串联电阻与上电时序要求,按图接完再调软件,能省掉大半排查时间。料号后缀也要对:SSP是pSLC、STP是MLC、ZA是TLC,颗粒不同,初始化参数与寿命口径都不一样。
用SDIO还是SPI
-
SDIO走四根数据线,带宽高,适合图像与音频;SPI只占四根线,任何单片机都能接。
-
同一颗料两种模式的实测差距明显:SPI跑到25MHz时读约2.5MB/s、写约1.8MB/s,走SD总线读能到20MB/s以上。
-
SPI模式代码短,先把功能跑通再考虑提速,是常见做法。
-
SDIO要注意DMA与中断优先级,缓冲区对齐到4字节,避免半字访问。
-
两种模式都要处理片选逻辑,多设备共用总线时尤其要看清时序。
产线测试脚本要覆盖什么
-
识别:读CID与CSD,核对容量与料号标称是否一致。
-
全盘写:按4KB块顺序写满,记录耗时与失败块号。
-
读回比对:整盘读回与写入数据逐块比对,统计错误率。
-
挂载:格式化后挂载、建文件、写文件、读文件、删除,走一遍文件系统接口。
-
记录:把结果写进板级测试日志,便于批次追溯。
常见主控的接入差异
-
STM32:多数型号带SDIO,用HAL的SD例程改时钟与引脚即可;没有SDIO的型号走SPI,速度按兆字节级算。
-
GD32:寄存器与STM32接近,例程可移植,注意时钟树分频后实际频率要复核。
-
ESP32系列:没有MMC控制器,用SPI模式接,初始化时钟压到400kHz以下,之后可提到10至20MHz。
-
NXP i.MX RT:SDIO性能好,适合大块顺序写,注意DMA缓冲区对齐。
-
小容量MCU:多用SPI,命令层自己实现,建议先跑通CMD0与ACMD41再往上加。
知识延展:
把上手拆成硬件确认、命令识别、分区格式化、文件系统挂载四段,每段有独立的判据,出问题就不会在软件和硬件之间来回甩。常见问题集中在上拉漏贴、初始化时钟过高、分区表为空这三项。跑通之后补一轮整盘写入校验,再进小批试产。测试脚本一旦定下来就固化到产线,别让每块板靠人手工点一遍,一致性比速度更重要。新料上手的周期通常在两三天,前提是硬件侧一次做对。反过来,硬件留了隐患,软件层怎么调都会偶发失败。