最初是三年前,接手开发sdio裸机驱动和测试用例的工作,内容很多,一开始就是各种在官网、各大论坛以及开源的驱动和例程里学习,简单浏览了sdio控制器、SD卡、MMC、SDIO卡等协议,然后就是开干;鉴于sdio协议还是很成熟的,基本很容易找到学习资料,从最简单的SD卡入手,参考协议、stm驱动流程,磕磕绊绊总算完成驱动基本coding和sd卡初始化、1、4线操作、单block多block读写流程、以及fat32文件系统移植等等,毕竟sdio控制器的编程模型各家还是各不相同的,开发期间和硬件设计各种沟通、扯皮、来回修问题后才搞定初版…接下来就是emmc卡的测试,emmc和SD卡相似之处很多,很快就把emmc整个流程兼容到了SD卡中…完成了sd相似工作;接下来就是sdio卡,市面上能买到的sdio接口的模块确实不多,经过调研,资料相对多的就是两款芯片:NXP的marvell8011和瑞昱的RTL8852,多方比较后,最终选择了marvell8801来测试;官方提供的是Linux的驱动,我当前环境是不支持的,所以不得不从一堆资料和代码里扒拉出来了逻辑驱动,完成开启AP、连接station的工作…
至此过了快半年时间,经过仿真调试和FPGA上板测试,我们的sdio接口控制器也算是有了基本功能,可以支持SD卡、emmc、sdio卡的读写…也不断有客户在购买我们的sdio接口ip,我这边就是支持客户使用…
直到今年有客户需要支持UHS模式、具有slave功能、支持HS200等等,新一轮的迭代开发开始;说实话,之前一轮的开发过去之后,很多协议细节也忘了,主要还有很多当时也没搞很清楚,稀里糊涂过去了,但这次是重新再看一遍协议,特别是开发sdio slave功能,站在slave角度再来开发,对整个sdio协议有了更深的认识,很多细节突然醍醐灌顶的感觉。可能也没理解那么深入,但是现在至少是能全面的看sdio协议了,所以呢,也是及时整理下之前的笔记,记录分享下,希望能对新入门的亦或是工作多年的工程师提供一点点的帮助吧。
废话有点多了,开始sdio协议整个系列内容吧。
SD卡认识——SDIO协议入门与实践(一)
谈到sdio协议,首先联想到的应该就是sd卡,在mcu级别的嵌入式领域,sdio应用最多的就是读写sd卡;前面先不谈sdio协议本身,先来看看sdio接口常用的几个外设之——SD卡。
1 SD卡类型了解
经常用sd卡会在卡的正面看到,SD、SDHC、SDXC的字样,一般用户也不太关心这些,但如果要搞sd卡相关开发,还是要了解一二的
SD卡,SDHC卡,SDXC卡区别在于规格不一样,SD卡最大支持2GB容量,SDHC 最大支持32GB容量,SDXC 最大支持2TB(2048GB)容量,支持SDXC卡的数码设备是兼容支持SD卡与SDHC卡的,如果设备只有支持SDHC卡,那么这个设备就不能使用SDXC卡,但兼容SD卡。一般用户手里的卡大部分是SDHC的(4-32G)。
如果你的卡磨得看不见字了,就通过sd card cmd 来读卡相关寄存器判断吧。
1.1 SD 卡分类
1.1.1 根据容量区分
无论是Full SD(简称SD)还是microSD卡,都有SD、SDHC、SDXC三种容量,miniSD目前还没有SDXC的容量
目前市面上有存储容量更大的卡SDUC(2t-128t)
1.1.2 SD 卡容量及其使用的文件系统
mcu在使用fat文件系统时,要考虑卡的容量,小于 2GB(SD 卡)使用 FAT12 或者FAT16,容量在 2GB 和 32GB 之间(SDHC 卡)使用 FAT32,容量大于 32GB 小于 2TB(SDXC 卡)使用 exFAT。
1.1.3 SD卡总线速度和速度等级
sdio控制器能支持多高的速度,一般对应spec都会有指出,所以要根据其来选择对应的卡测试,不然可能出现时序不收敛的情况
SD卡速度:
SD卡写入速度等级:
1.2 各种存储卡区别
市面上的卡种类非常多,容易把人搞糊涂,这里将这些卡种类为大家做个区分:
1.2.1 SD 卡,miniSD 卡,TF 卡,MircoSD 卡
TF 卡是 MicroSD 卡的另一种叫法,无需做区分。SD 卡,miniSD 卡,MircoSD 卡其实 是一种卡,区别是引脚使用上。
2 卡标识
2.1 卡容量
容量等级:SDXC(32G-2T:SDXC;)
实际容量:64GB(实际要小一点,软硬件换算关系问题)
2.2 厂商品牌
SanDisk:闪迪品牌名字
Extreme PRO:闪迪三代卡(pro版)(三代卡一般是灰色,另外Ultra是二代卡,颜色越黑卡越好也越贵,感兴趣可以了解下)
2.3 读取速度
200M/s:这张卡的最快读取速度,当然这并不代表卡读取就是200MB/s,读取快慢也跟接口以及读取设备有关,相同设备下,200MB/s肯定会比100MB/s读取信息更快。
2.4 LOCK标识
LOCK锁:按钮往下拨,可以将卡锁住,插入相机后就会提示写保护,无法存入照片,插入电脑后只可以复制文件,无法删除和格式化(不排除一些电脑不支持,上锁后仍可以删除);按钮往上拨,内存卡可以正常使用
NOTE:
TF卡没有改标识
2.5 写入速度等级(最重要的参数)
写入速度等级有三个参数表示,分别是普通的速度等级Speed Class*(C*),超高速速度等级UHS Speed Class*(U*),视频速度等级Video Speed Class*(V*),*代表数字表示最低写入速度。如图所示
可知上面卡的写入速度是10M/s
2.5.1.【C】普通的速度等级Speed Class
有Class 2、Class 4、Class 6和Class 10,简写为C2、C4、C6、C10,分别表示最低写入速度为2MB/s、4MB/s、6MB/s、10MB/s。C10代表可用于高速或更高速的模式。
2.5.2.【U】超高速速度等级UHS Speed Class
UHS Speed Class 1和UHS Speed Class 3,简写为U1、U3。U1代表最低写入速度为10M/S,U3代表最低写入速度为30M/S。UHS与U1/U3(UHS Speed Class)不同,不要弄混了。一个是接口标准,一个是速度
2.5.3.【V】视频速度等级Video Speed Class
有V6、V10、V30、V60和V90,V后面的数字表示最低写入速度,单位MB/s,V6表示最低写入速度为6MB/s,V90表示最低写入速度为90MB/s。这个参数对录制视频来说非常重要,录制不同画质的视频对存储卡视频速度等级也不一样。如果要录制4k画质视频,必须要用V30以上的存储卡。
2.5.4.【A】APP软件性能等级
APP软件性能等级是SD卡5.1标准后出现,用于衡量用户直接在存储卡上运行APP程序的场景。使用随机存取时的IOPS性能标准,(Input/Output Operations Per Second 每秒输出入作业次数),分为两个等级A1和A2。
2.6【UHS】总线接口类型
总线接口分为UHS-I、UHS-II和UHS-III,UHS全称Ultra High Speed,中文超高速。支持UHS-I(第一代超高速)的SD卡产品于2010年被发布,理论传输速度可达104MB/s,支持UHS-II的SD卡产品理论传输速度可达312MB/s。支持UHS-III的SD卡产品理论传输速度可达624MB/s。物理接口上也可以区分UHS-I和UHS-II/UHS-III,UHS-I只有一排金手指,UHS-II/UHS-III有两排(所以传输速度更快)。卡本体上面的标识通常会省略掉“UHS”,只标“I”,“II”、“III”。