SDIO挂载多张SD卡
很多串行接口上都会挂载多个设备,为了使多个设备不冲突设置了“设备选择”和“仲裁机制”,比如SPI需要主设备给每个从设备安排一条CS片选线,IIC虽然没有片选线,但是对设备读写操作时还需要一个设备地址(设备地址是设备自带的);
SD卡通信如果是SPI模式时无法读出卡的相对地址(RCA),但是可以通过片选CS线决定对哪张卡进行操作;
SD卡如果使用的是SD模式时没有片选线,只有时钟SCK线、命令CMD线、D0~D3数据线,但是SD卡设备地址与IIC不同的是SD卡相对地址(RCA)是动态生成的而不是出厂设定的;如果你对多张SD卡发送指令,它们会同时返回各自的信息,那就乱套了;
好在SDIO提供了类似SPI的片选方式,那就是每个设备各自使用一条CMD线,然后在各自的CMD线上完成命令通讯;
由于D0~D3数据线还是多张卡片共用,所以每次只能由一张卡片处于传输状态而其他卡片处于待机状态,这就需要CMD7命令来选择或取消选择某张卡,当选择某张卡后才能对其读写;
切换卡片前必须先停止数据传输:
(通过CMD7将另一张卡从待机状态转为传输状态将不会停止(主机的)擦除和编写行为。
原卡将切换到断开连接状态并且释放DAT数据线。)
(所有数据写入命令都可以通过CMD12命令停止随时终止。
必须在取消选择卡前停止写入操作。)
(主机如果使用CMD7命令去取消选择某张卡,将在不中断写入行为下使卡片进入断开连接状态并且释放DAT数据线。
当再次选择此卡片时,如果编写仍在进行并且写缓存区不可用,卡片将会拉低DAT线来恢复忙碌指示。?
实际上主机可以通过交错处理同时给每张卡片执行写入操作,交错处理是通过在其他卡忙碌时单独对某张卡进行访问,这个过程需要在对应的CMD线和DAT0~3线上操作(把忙碌的卡断开连接)。)
以上参考资料均来自“SD卡2.0协议.pdf”,欲知更多请查阅官方文档,翻译仅供参考意思以原文为主。