基于S3C2410的SD卡linux驱动工作原理
2019-07-13 08:26发布
生成海报
我在讲嵌入式Linux
驱动开发班的时候,发现不少学员对SD
卡驱动这块比较感兴趣,课下来找我探讨。而在很多技术论坛,也有不少人问这方面的问题,所以就想写一下这方面的内容,希望对大家的学习能有所帮助。想了解SD
卡的工作原理,首先需要了解的就是SD
卡协议了,这个在网上可以轻松的下载到。在了解协议后,就可以看看下面的一些开发思路了。
首先看下脱离操作系统如何在S3C2410
上实现SD
卡的读写。过程可以分为3
个大的步骤:
初始化sd
卡、写sd
卡、读sd
卡;下面的过程是我通过realview-MDK
环境测试过的。
-
初始化sd卡
二、写sd
卡
写sd
卡可以分为3
种方式:POLL
、中断、DMA
POLL
写
中断写
DMA
写
-
读sd卡
读sd
卡也可分为3
中方式:POLL
、中断、DMA
POLL
读
中断读
DMA
读
现在可以思考linux
是如何管理管理SD
卡的了。Linux
中SD
驱动可以分为3
层:块设备层(mmc_block.c
,mmc_sysfs.c
,mmc_queue.c
)、mmc
协议层(mmc.c
)、sd
驱动层(s3c2410_sdi.c
)。
下面从以下几个方面理解驱动:
1
、s3c2410_sdi.c
代码初始化过程;
2
、SD
卡块设备注册过程;
3
、request
及数据传输的实现。
下面介绍的过程参考的代码是我们华清远见培训中心在教学中使用的一套代码,内核版本是2.6.8
,其它版本过程类似。
-
s3c2410_sdi.c代码初始化过程
-
SD卡块设备注册过程
request
及数据传输的实现
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮