找回密码
 立即注册
查看: 2031|回复: 32

sdio2.0学习心得个人记录贴|附波形文件

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-04-30 08:22:37

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-16 02:11:38 来自手机 | 显示全部楼层 |阅读模式
sdio是SD卡的通信协议
里面规定了两种与sd卡通信的方式,sd和spi,本贴讲的是SD中的部分内容
sdio2.0总线包括一条命令线(CMD),一条时钟线(CLK),四条DAT线(DAT0-DAT3)
sdio重要性质:
(一)所有总线低电平为占用,高电平为空闲,这个性质与iic类似。sd卡利用这个性质标识所有数据(包括命令,响应及其他)的开始位(0)和结束位(1),标识卡的忙状态,还有实现多卡识别。
(二)数据和命令发送时时钟线是低电平时驱动,高电平时采样。跟半双工spi是一样的只不过多了几条线,数据不一定会根据时钟迅速响应而已。
(三)SD卡是一个状态机

注:不注册SD卡协会的会员你只能在官网下到简化规范,里面没有时序图还缺了其他很多东西。网上找规范的时候,Physical Layer Simplified Specification是简化规范,Physical Layer Specification是详细规范
我不会提供这个详细规范的PDF,请自行到其他地方下载,比如翻一翻好心人的GitHub项目,或者在搜索引擎上搜sd3.0中文协议
规范可以是sdio3.0的与sdio2.0兼容


大部分波形已标注,2024-11-16-22:08

sd_wave.sr记录了从初始化到使用cmd17读取单块数据的波形,可以用pulseview打开,以放大细致的观看。2025-2-19


sd_wave.sr

11.6 KB, 下载次数: 20

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:518
  • 最近打卡:2025-05-01 05:52:49
已绑定手机

46

主题

1694

回帖

2540

积分

金牌会员

积分
2540
发表于 2024-11-16 07:52:21 | 显示全部楼层
不明觉厉
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-04-28 08:49:07
已绑定手机

90

主题

961

回帖

2318

积分

超级版主

积分
2318
QQ
发表于 2024-11-16 08:48:02 | 显示全部楼层
不明觉厉+1
热线19952583534
www.STCAI.com
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-11-16 11:02:01 来自手机 | 显示全部楼层
蹲更新!我也一直想学习SD卡协议
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-04-30 08:22:37

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-16 11:55:12 | 显示全部楼层
本帖最后由 zrl 于 2024-11-17 13:05 编辑

命令
sdio的命令有两种CMD和ACMD,是用来控制卡工作的,比如切换卡的工作电压(CMD11),切换卡的数据线数量(ACMD6),他们的结构都相同
1位开始位(固定为0),1位传输方向位(主机到卡为1),6位命令索引,32位参数,7位crc7,1位结束位(固定为1),总共6个字节

其中crc7是对前面5个字节(开始位,传输方向位,命令索引,参数)使用crc7-MMC算法得到的结果

命令只在CMD线上发送,发送时统一高位在前
有的命令只有一张卡响应,有的命令总线上的所有卡都会响应



以下是一个发送CMD8的例子



截图202411171305221720.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-04-30 08:22:37

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-16 12:08:47 | 显示全部楼层
由于CMD和ACMD的命令结构相同,要想卡识别ACMD命令必须先发送CMD55,发送CMD55后,卡会自动将后一个命令识别为ACMD,发送完一个ACMD还想发ACMD,就要再发送一次CMD55.
为初始化时,CMD55的参数中的RCA不用管,填0即可。
一般会用到的命令只有几个CMD0,CMD2,CMD3,CMD7,CMD8,CMD17,CMD24,CMD55,ACMD41,ACMD6只要掌握常用的就好了
截图202411171307361628.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:238
  • 最近打卡:2025-05-01 13:11:43

22

主题

283

回帖

901

积分

高级会员

积分
901
发表于 2024-11-16 12:23:44 来自手机 | 显示全部楼层
REMOVEUNUSED
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-04-30 08:22:37

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-16 12:29:31 | 显示全部楼层
本帖最后由 zrl 于 2024-11-17 13:19 编辑

响应
主机在发送命令后,继续发送时钟,在几个或几十个时钟后,卡会在CMD线产生响应。不同的命令有不同的响应(有的命令没有响应比如CMD0)
响应按长度分有两种,在CMD上发送的6字节响应,在CMD上发送的17字节响应
在在CMD上发送的6字节响应格式为
1位开始位(固定为0),1位传输方向位(卡到主机为0),6位响应命令的索引,39位的响应数据,1位结束位(固定为1)
下面是CMD55的在CMD上发送的6字节响应

截图202411171319334838.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-04-30 08:22:37

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-16 12:36:11 | 显示全部楼层
本帖最后由 zrl 于 2024-11-16 22:30 编辑

在CMD上发送的17字节响应格式为
1位开始位(固定为0),1位传输方向位(卡到主机为0),6位响应命令的索引,127位的响应数据,1位结束位(固定为1)
下面是CMD2的在CMD上发送的17字节响应
截图202411161236099893.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-04-30 08:22:37

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-16 13:06:36 | 显示全部楼层
本帖最后由 zrl 于 2024-11-17 11:44 编辑

响应按功能分6种:R1,R1b,R2,R3,R6,R7,R指的是respond,b指的是busy。
不同命令对应不同的响应,比如CMD8对应R7,CMD55对应R1,ACMD44对应R3,具体哪个对应哪个,可以查阅sdio物理层简化规范里的命令表(简化规范没有时序图)
截图202411161312403418.jpg
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 22:07 , Processed in 0.132354 second(s), 114 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表