找回密码
 立即注册
楼主: zrl

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

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

14

主题

87

回帖

732

积分

高级会员

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

响应R7和CMD8

使用CMD8可以向总线的所有卡说明主机支持的电压工作范围,如果范围与SD卡的工作范围一致则卡返回R7响应,否则卡将不返回响应,且OCR寄存器的第31位将不会置1,导致SD卡初始化失败。


R7响应位图

R7响应位图
截图202411162310228942.jpg
截图202411162310346391.jpg
回复 支持 反对

使用道具 举报 送花

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

14

主题

87

回帖

732

积分

高级会员

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

卡的初始化过程
配置卡并使其进入tran状态的过程称为卡的初始化,到tran状态前时钟线的频率不高于400kHz
左括号为当前工作状态,右括号为下一状态

截图202411162111462048.jpg
截图202411162111543168.jpg
截图202411162112001356.jpg
截图202411162112054172.jpg
截图202411162112112590.jpg
截图202411162112153705.jpg
回复 支持 反对

使用道具 举报 送花

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

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-16 17:05:05 | 显示全部楼层
将卡设置到tran状态后,使用CMD17和CMD24发送对应扇区的地址即可使用DAT0向sd卡读写512字节。要想提升速度,可以发送和CMD6和ACMD6设置速度等级和拓展数据总线(DAT0到DAT3)。如果卡里有DSR寄存器,还可以在stby状态时使用CMD4,改变SD卡管脚的驱动能力,增加带宽
回复 支持 反对

使用道具 举报 送花

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

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-16 17:22:05 | 显示全部楼层
CMD17单扇区读,sdio2.0扇区大小固定为512字节,使用CMD17发送地址(RCA<<16)即可读取512字节数据,crc为crc16,算法为crc16-xmodem,读取数据时要求不高,可忽视crc16,发送格式如下图,单线和4线读写的格式与单线spi和QSPI类似,不同点只有,开始位和结束位,以及4线crc16的计算和传输方式。
四线crc16的计算方式,比如DAT0你要将DAT0上发送的所有数据位按顺序写入一个缓冲区,大小为128字节,对缓冲区的数据使用crc16-xmodem计算其crc16,最后在dat0这一条线上发送它的crc16结果,意思就是对应数据线上的数据的crc16。
也许这就是stm32的spi为什么会有crc7的原因吧


截图202411161721256697.jpg
截图202411162130348816.jpg
截图202411171250323660.jpg
回复 支持 反对

使用道具 举报 送花

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

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-16 17:22:05 | 显示全部楼层
CMD24单扇区写,数据格式与读取时是一样的但是crc16一定要算对。使用cmd24发送完结束位的两个时钟后sd卡会在DAT0线上返回一个Token(也可称为校验结果)格式为
一位开始位0,3位数据,一位结束位1,如果数据为101则你的crc16是错的,sd卡将缓冲区数据全部抛弃;如果是010那么在接下来的几个时钟,sd将拉低DAT0表示忙,同时将接收缓冲区的数据写入flash。

在数据总线上写数据,必须在发送完cmd24后等待至少两个时钟后写,可以不等响应。
截图202411162155366674.jpg
截图202411162157343810.jpg
回复 支持 反对

使用道具 举报 送花

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

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-16 17:37:27 | 显示全部楼层
读写时可读取响应R1获取卡状态表的第八位READY_FOR_DATA)来判断sd卡是否能读写。建议GPIO模拟读SD卡时不接收响应,因为响应和数据会同时在总线上出现。
没有响应的命令需要在发送完命令后向总线发送几个时钟(一般为8),确保其能正常接收下一个命令

sdio2.0数据传输时,通过CMD6将可以进入高速模式(也要看卡支不支持),使时钟频率最高达到50MHz,理论上在四线模式下极限传输速率可以达到25MB/s(没写错,大写的).
如果是sdio3.0的高端卡,理论极限传输速度可达104MB/s
截图202411191544082172.jpg
截图202411191558357166.jpg
截图202411191600492949.jpg
回复 支持 反对

使用道具 举报 送花

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

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-16 20:34:11 | 显示全部楼层
sdio详细规范中提到一些操作的间隔时钟数,比如上电时要向总线发送至少74个时钟,确保sd卡工作在工作电压。连续读取块的时候,假如主机想处理数据,规范里规定了主机在哪些时间可以停止时钟的发送。又比如发送完命令后多少个时钟后SD卡会发送响应,这些都在详细规范里有。对我们编写sdio的代码,和查看波形十分重要
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15611
发表于 2024-11-17 19:18:00 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

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

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2025-2-19 17:14:21 | 显示全部楼层

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















sd_wave.sr

11.6 KB, 下载次数: 11

波形文件

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-04-16 09:21:18
已绑定手机

0

主题

1

回帖

6

积分

新手上路

积分
6
发表于 2025-4-16 09:21:18 | 显示全部楼层
zr*** 发表于 2024-11-16 11:55
命令
sdio的命令有两种CMD和ACMD,是用来控制卡工作的,比如切换卡的工作电压(CMD11),切换卡的数据线数 ...

你好,截图的这个软件是什么软件呀?
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 22:11 , Processed in 0.122875 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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