- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux sd卡驱动分析
?基于S3C2410的SD卡linux驱动工作原理?
我在讲嵌入式Linux驱动开发班的时候,发现不少学员对SD卡驱动这块比较感兴趣,课下来找我探讨。而在很多技术论坛,也有不少人问这方面的问题,所以就想写一下这方面的内容,希望对大家的学习能有所帮助。想了解SD卡的工作原理,首先需要了解的就是SD卡协议了,这个在网上可以轻松的下载到。在了解协议后,就可以看看下面的一些开发思路了。
?
????首先看下脱离操作系统如何在S3C2410上实现SD卡的读写。过程可以分为3个大的步骤:初始化sd卡、写sd卡、读sd卡;下面的过程是我通过realview-MDK环境测试过的。
?
一、初始化sd卡
?
?
?
二、写sd卡
?
写sd卡可以分为3种方式:POLL、中断、DMA
?
(1)??POLL写
?
?
?
?
(2)中断写
?
?
?
?
(3)DMA写
?
?
?
?
三、读sd卡
?
读sd卡也可分为3中方式:POLL、中断、DMA
?
(1)??POLL读
?
?
?
?
(2)中断读
?
?
\
(3) 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及数据传输的实现
?
?
? ? ? ? ? ? ??? ? ? ? ? ??Linux MMC/SD/SDIO体系结构? ? ? ? ? ?
有关MMC/SD/SDIO相关的知识这里就不多讲了,请参考相关资料。这里主要涉及Linux下MMC相关内容。
内核版本(2.6.36)首先说一下Linux相关MMC的代码分布,主要有两个目录,一个头文件目录和一个源代码目录。分别位置如下:include/linux/mmcdrivers/mmc要阅读MMC相关代码就必须要看这两个目录。在drivers/mmc目录下分别有三个子目录,其将对应接下来要讲的MMC的体系结构。这三个子目录分别为:?card?core?host它们的内容后面讲到体系结构时自然就明了了。?现在来说说MMC的体系结构,其分为三层
??????? /dev下设备文件访问MMC/SD/SDIO用户空间???????????? |---------------------|-----------------------------------------------------内核空间??????????? \ /???????? MMC Card层(对应具体的设备驱动,如MMC/SD卡块设备驱动,SDIO UART)???????????????????? |??????????????????? \ /????????? MMC core层(为上次设备驱动实现提供操作接口,和下层host注册提供机制)???????????????????? |??????????????????? \ /?????????? Host层(具体MMC/SD/SDIO控制器驱动层。如S3C2440 MMC/SD控制器驱动)???????????????????? |??????????????????? \ /-----------------------------------------------------------------------------??????????????????? 硬件层
对于我们来说,编写MMC/SD卡相关驱动主要涉及的就是Host层,其余层不用考虑。对于SDIO设备除了Host层以外,还有可能要编写MMC Card层的设备驱动。
编写Host层驱动,主要是填充mmc_host结构体相关内容和实现mmc_host_ops结构体中的函数。最后调用mmc_add_host向MMC core注册host驱动。可以参考S3C24XX的HOST驱动程序(drivers/mmc/host/s3cmci.c,s3
文档评论(0)