SDIO挂载多张SD卡

很多串行接口上都会挂载多个设备,为了使多个设备不冲突设置了“设备选择”和“仲裁机制”,比如SPI需要主设备给每个从设备安排一条CS片选线,IIC虽然没有片选线,但是对设备读写操作时还需要一个设备地址(设备地址是设备自带的);

SD卡通信如果是SPI模式时无法读出卡的相对地址(RCA),但是可以通过片选CS线决定对哪张卡进行操作;

SDIO挂载多张SD卡
在SPI模式,只有RCA寄存器不能访问。其他寄存器的格式与SD模式下相同。

 

SD卡如果使用的是SD模式时没有片选线,只有时钟SCK线、命令CMD线、D0~D3数据线,但是SD卡设备地址与IIC不同的是SD卡相对地址(RCA)是动态生成的而不是出厂设定的;如果你对多张SD卡发送指令,它们会同时返回各自的信息,那就乱套了;

 

好在SDIO提供了类似SPI的片选方式,那就是每个设备各自使用一条CMD线,然后在各自的CMD线上完成命令通讯;

SDIO挂载多张SD卡
识别卡并要求卡片发送RCA 这个操作分别在每个卡片它们自己的CMD线上完成。

由于D0~D3数据线还是多张卡片共用,所以每次只能由一张卡片处于传输状态而其他卡片处于待机状态,这就需要CMD7命令来选择或取消选择某张卡,当选择某张卡后才能对其读写;

 

切换卡片前必须先停止数据传输:

SDIO挂载多张SD卡
4.3 Data Transfer Mode

(通过CMD7将另一张卡从待机状态转为传输状态将不会停止(主机的)擦除和编写行为。

原卡将切换到断开连接状态并且释放DAT数据线。)

SDIO挂载多张SD卡
4.3 Data Transfer Mode

(所有数据写入命令都可以通过CMD12命令停止随时终止。

必须在取消选择卡前停止写入操作。) 

 

SDIO挂载多张SD卡
4.3.4 Data Write

(主机如果使用CMD7命令去取消选择某张卡,将在不中断写入行为下使卡片进入断开连接状态并且释放DAT数据线。

当再次选择此卡片时,如果编写仍在进行并且写缓存区不可用,卡片将会拉低DAT线来恢复忙碌指示。?

实际上主机可以通过交错处理同时给每张卡片执行写入操作,交错处理是通过在其他卡忙碌时单独对某张卡进行访问,这个过程需要在对应的CMD线和DAT0~3线上操作(把忙碌的卡断开连接)。)

 

 

以上参考资料均来自“SD卡2.0协议.pdf”,欲知更多请查阅官方文档,翻译仅供参考意思以原文为主。

SDIO挂载多张SD卡