SD卡总线速度模式:
Default Speed mode: 3.3V供电模式,频率上限25MHz,速度上限 12.5MB/sec
High Speed mode: 3.3V供电模式,频率上限50MHz,速度上限 25MB/sec
SDR12: UHS-I卡, 1.8V供电模式,频率上限25MHz,速度上限 12.5MB/sec
SDR25: UHS-I卡, 1.8V供电模式,频率上限50MHz,速度上限 25MB/sec
SDR50: UHS-I卡, 1.8V供电模式,频率上限100MHz,速度上限 50MB/sec
SDR104: UHS-I卡, 1.8V供电模式,频率上限208MHz,速度上限 104MB/sec
DDR50: UHS-I卡, 1.8V供电模式,频率上限50MHz,性能上限 50MB/sec
上述sdio 频率与速度关系,可以看到sdio速率对吞吐速率有直接影响。
一般sdio3.0只适用于11ac 以下。 11ax 很难跑起来
速率计算:
HZ和bit/s是一个相同的概念。时钟周期为1HZ,则传输数据的速率为1bit/s;时钟周期为100KHZ,则传输数据的速率为100kbit/s
sdio 4线:
208MHZ=208Mbps
V=208Mbps*4 = 832Mbps = 832/8 = 104MB/s
流程:
当host上电后,使所有的卡设备处于卡识别模式,完成设置有效操作电压范围,
卡识别和请求卡相对地址等操作。
1、发送2次CMD52,CMD52 可以读写sdio 寄存器数据,此处用于判断sdio状态
2、发送指令CMD0使卡设备处于idle状态;
3、发送指令CMD8,如果卡设备有response,说明此卡为SD2.0以上;
4、发送指令CMD55+ACMD41,该指令是用来探测卡设备的工作电压是否符合host端的要求;在发送ACMD41这类指令之前需要先发送CMD55指令,在SDIO中ACMD41指令被CMD5替代。
5、如果支持uhs,发送指令CMD11转换工作电压到1.8V;
6、发送指令CMD3获取RCA(relative card address)
7、 发送CMD7+RCA选卡,RCA是之前CMD3读取到的卡RCA,发送CMD7+0不选中卡片
代码流程:
RTK 部分芯片在 RK host 速率上不到200M,就是CMD11 交互存在问题,可参考RK 给出的patch解决.
发送CMD5,( S18R 为1 )以及回复:
CMD5格式
CMD5回复格式如下,Log中打印的是去掉前8位,后8位的值
具体代码流程可以加log跟踪
主要寄存器:OCR,CID,CSD,RCA和SCR。
Operation condition register(OCR):32位的OCR包含卡设备支持的工作电压列表;
Card identification number register (CID):包含用于在卡识别阶段的卡信息,包括制造商ID,产品名等;
Card specific data register(CSD):CSD寄存器提供了如何访问卡设备的信息,包括定义了数据格式,错误校验类型,最大访问次数,数据传输率等;
Relative card address register(RCA):存放在卡识别阶段分配的相对卡地址,缺省相对卡地址为0000h;
SD card configuration register(SCR):SCR是一个配置寄存器,用于配置SD memory card的特殊功能。