4. 存储控制器接口:SDIO、SPI、eMMC协议对比,实际布线注意事项
好,咱们进入第四讲。这一章我打算聊聊存储控制器接口。说白了,就是你的PDA主控芯片怎么跟存储芯片“说话”。常见的接口有SDIO、SPI和eMMC。很多新手工程师容易在这上面栽跟头,觉得协议都差不多,随便选一个就行。嗯,其实差别大了去了。
我个人习惯,在项目初期就把接口定死。因为一旦PCB layout做完,想改接口,那代价可就大了。今天我就把这三个接口的底裤扒干净,再聊聊布线上那些坑。
4.1 三种协议的核心差异
先看一张对比表,心里有个谱。
| 特性 | SPI | SDIO | eMMC |
|---|---|---|---|
| 引脚数量 | 4线(MOSI, MISO, CLK, CS) | 6线(CLK, CMD, DAT0-3) | 8线(CLK, CMD, DAT0-7, RST) |
| 最大速度 | ~50MHz(单线) | ~208MHz(DDR模式) | ~200MHz(HS400模式) |
| 数据位宽 | 1位(全双工) | 1/4位(半双工) | 1/4/8位(双数据率) |
| 协议复杂度 | 极简 | 中等 | 复杂(内置控制器) |
| 典型应用 | 小容量Flash、传感器 | WiFi模块、低速SD卡 | 主存储、系统盘 |
看到没?SPI最省引脚,但速度也最慢。eMMC最快,但协议最复杂。SDIO是个中间派。你想想看,如果你的PDA要跑Linux系统,用SPI挂载根文件系统?那开机得等到天荒地老。我建议,系统盘必须上eMMC。
4.2 SPI接口:简单但别轻视
SPI,串行外设接口。很多单片机工程师的最爱。为什么?因为简单啊。四根线,一主多从,想怎么玩就怎么玩。
但我在项目中遇到过一个问题:SPI的时钟线CLK,如果走线太长,容易产生振铃。特别是当你的PDA主频跑到100MHz以上时,SPI的50MHz时钟反而成了干扰源。
我曾经在一个项目里,SPI Flash的CS引脚没加弱上拉。结果每次上电,Flash都进入不了正常模式,数据全乱套。后来查了三天,才发现是CS浮空导致的。记住,SPI的CS引脚一定要接上拉电阻,10kΩ左右就行。
SPI的布线要点:
- CLK线要短:时钟信号是单端传输,对噪声敏感。我习惯把CLK走在内层,两边包地。
- MISO和MOSI等长:虽然SPI速度不高,但等长能减少数据偏移。特别是当你要跑40MHz以上时。
- CS线别乱拉:如果有多从机,每个CS要独立走线,别共用。否则片选信号会串扰。
4.3 SDIO接口:兼容性是个大坑
SDIO,安全数字输入输出接口。说白了,就是SD卡的接口协议。很多PDA用SDIO接WiFi模块或者SD卡槽。
SDIO有1位模式和4位模式。4位模式快,但布线也麻烦。我记得有一次,客户反馈说PDA插上SD卡偶尔识别不到。我排查了半天,发现是DAT3信号线在PCB上绕了个大弯,导致时序不满足。
SDIO的CMD线,一定要加10kΩ上拉。为什么?因为SD卡协议规定,CMD线在空闲时必须是高电平。如果不加上拉,卡可能一直处于忙状态。我建议,所有SDIO信号线都加上拉,省心。
SDIO布线要点:
- CLK线要独立:别跟其他时钟线靠太近。我见过有人把SDIO_CLK和SPI_CLK走在一起,结果互相干扰,数据全错。
- DAT0-3等长:4位模式下,数据线必须等长。误差控制在±50mil以内。否则高速时数据会错位。
- 地平面要完整:SDIO信号参考地不能有断层。如果跨分割,信号完整性会急剧下降。
4.4 eMMC接口:高速布线的硬仗
eMMC,嵌入式多媒体卡。这玩意儿是PDA的标配。为什么?因为它内置了Flash控制器,主控只需要发命令就行。协议虽然复杂,但硬件设计相对省心。
但省心不代表没坑。eMMC跑HS400模式时,时钟频率高达200MHz。这时候,布线就成了玄学。
eMMC的CLK线,必须做阻抗控制。单端50Ω,差分100Ω。我习惯在CLK线上串联22Ω电阻,靠近主控端放。这样可以抑制过冲。另外,所有数据线DAT0-7和CMD线,都要等长。误差控制在±25mil以内。
eMMC布线注意事项:
- RST引脚别省:有些工程师觉得RST引脚可以悬空。千万别!eMMC的RST引脚必须接10kΩ上拉到VCCQ。否则复位不可靠,系统可能死机。
- VCC和VCCQ要分开:VCC是核心供电,VCCQ是IO供电。两者不能共用电源。我建议,每个电源引脚都放一个0.1μF去耦电容,靠近引脚放。
- CLK线别分叉:eMMC的CLK是单端时钟,不能像差分线那样分叉。如果必须分叉,要加时钟缓冲器。
4.5 实际布线中的共性问题
不管用哪种接口,有些布线原则是通用的。我总结了几条,你记一下。
- 信号线远离晶振:晶振是强干扰源。我见过一个项目,SDIO_CLK线从晶振下面穿过,结果读卡速度直接掉了一半。
- 电源和地要粗:存储芯片瞬间电流大。电源线至少20mil宽,地线铺铜。别用10mil的细线,会压降。
- 过孔别太多:每个过孔都会引入寄生电容和电感。我建议,关键信号线(CLK、CMD)的过孔不超过2个。
- 包地处理:时钟线两侧包地,间距至少3倍线宽。这样可以减少串扰。
我曾经在一个四层板项目里,把eMMC的CLK线走在顶层,参考层是电源层。结果电源层有噪声,CLK信号抖动严重,系统频繁死机。后来我把CLK改到内层,参考完整地平面,问题才解决。记住,高速信号一定要参考地平面,别参考电源。
4.6 如何选择接口?
最后,聊聊怎么选。我个人的经验是:
- 如果PDA只存配置参数,容量小于64MB,用SPI。省引脚,成本低。
- 如果需要外接SD卡或WiFi模块,用SDIO。兼容性好,速度够用。
- 如果PDA要跑系统,比如Linux或RTOS,必须用eMMC。速度快,可靠性高。
你想想看,一个PDA如果开机要等30秒,用户会怎么想?所以,别在存储接口上省钱。该上eMMC就上,该做阻抗控制就做。嗯,这一章就到这里。下一章咱们聊聊文件系统的选择,那又是另一个故事了。