sd卡裸代码的实现

1. 前言

本文的目的是学习如何操作sd卡,及了解sd相关协议。所以基于s3c6410平台的sd/mmc host控制器,实现了通过fatinfo/fatls/fatload命令获取sd卡信息/文件列表/读取卡中文件里的内容的功能。在实现过程中,主要参考了uboot,linux kernel mmc子系统,sd协会的sd物理层协议规范和sd host控制器协议规范,以及网络上相关学习资料。

首先介绍一下MMC,SD,SDIO等之间的关系,如下图所示。

sd卡裸代码的实现_第1张图片

  • MMC卡(MultiMediaCard): 是一种快闪存储器卡标准。技术基于东芝的NAND闪存技术。比早期基于Inter NOR快闪技术的记忆卡(如CF卡)体积更小。
  • eMMC(Embedded MultiMediaCard):将NAND flash+主控IC封装在一起的IC芯片,一般是BGA封装。主要针对手机等产品的内嵌式存储器标准规格。
  • SD卡(Secure Digital Memory Card):数据传送和物理规范等在MMC的基础上发展而来,强调安全,速度比2.11版的MMC卡更快。SDSC卡容量<=2GB,SDHC的为2GB~32GB、SDXC的为32GB~2TB。miniSD卡体积比SD卡小,而microSD卡则更小。
  • SDIO:SD卡接口的基础上发展起来的外设接口,不止科技SD卡,还可以接蓝牙、wifi、电视卡等。
  • TF卡(Trans-flash Card):2004年正式更名为Micro SD卡。

为了更直观感受这些卡的差异,我找了几张这些卡的图片,如下图所示。

sd卡裸代码的实现_第2张图片

2. 读写sd card的框架实现

本文实现的框架如下图所示,总共由3层组成。

sd卡裸代码的实现_第3张图片

  • 命令层:负责获取sd卡信息、列出sd卡中文件、读写sd卡数据的命令。
  • 文件系统和驱动层:负责管理、读取card中文件数据。
  • 硬件层:由sd host和sd卡组成。

3. sd card操作的流程实现

3.1 sd init流程

sd init流程如下图所示,首先对host进行初始化,然后再对sd卡进行识别。

sd卡裸代码的实现_第4张图片

host初始化流程如下图所示,主要是配置gpio pin脚,对host复位,配置clk,决定是否使用dma,使能int等。

sd卡裸代码的实现_第5张图片

sd卡识别流程如下图所示,首先复位card进入idle状态,然后检查卡是否可在提供的电压下工作,及使card启动sd2.0新功能。然后依次判断是否是sdio、sd卡或mmc卡。在识别到sd卡后,会获取card id、相对地址、块大小,并使card进入transfer态,设置bus宽度。本流程中sdio、mmc的识别暂未实现。

sd卡裸代码的实现_第6张图片

在host控制器初始化时,需要clk系统给sd host和sd卡提供clk,本文档中配置的这两个clk都是12MHz,clk示意图如下所示。

sd卡裸代码的实现_第7张图片

3.2 sd卡读数据流程

下图是sd卡读取数据流程,通过fatinfo/fatls/fatload命令,可以分别读取sd卡容量,获取sd卡文件列表,读取sd卡中文件的数据。命令的实现fat fs的处理,我是从uboot中移植的,具体处理流程可参考我后面的代码,这里不再细述。

sd卡裸代码的实现_第8张图片

下图是底层驱动读取sd卡数据的流程,本文档中使用的dma传输数据,所以首先配置dma相关参数,并配置传输模式,然后发送读块命令,等待每个dma传输完成,及最终所有的数据传输完成的irq,然后结束数据传输过程。

sd卡裸代码的实现_第9张图片

3.3 sd卡写数据流程

目前暂未实现,待后续补充。

4. 代码实现

代码由下面这些文件组成。cmd中实现的是fatinfo/fatls/fatload命令,fs中实现的是fat文件系统,main.c中实现的是sd卡和host驱动。


具体的源码可在下面地址中获取:

https://download.csdn.net/download/chuanzhilong/10419251

5. 总结

本文档中,主要实现了获取sd卡信息、获取文件列表、获取卡中文件数据的功能,并且这些功能是通过轮询dma等中断完成的。还未实现向卡里写数据的功能,以及中断方式读写数据,接下来继续完善这部分功能。

6. 参考文档

[1] sd物理层协议规范,Part1_Physical_Layer_Simplified_Specification_Ver6.00.PDF,https://www.sdcard.org/downloads/pls/index.html

[2] sd host控制器协议规范, PartA2_SD Host_Controller_Simplified_Specification_Ver4.20.PDF,https://www.sdcard.org/downloads/pls/index.html

你可能感兴趣的:(Bare,code)