最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

基于S3C2410的SD卡linux驱动工作原理

SD/MMC crifan 3136浏览 0评论

基于S3C2410的SD卡linux驱动工作原理

作者:刘洪涛,华清远见嵌入式学院高级讲师,ARM公司授权ATC讲师。

我在讲嵌入式Linux驱动开发的时候,发现不少学员对SD卡驱动这块比较感兴趣,课下来找我探讨。而在很多技术论坛,也有不少人问这方面的问题,所以就想写一下这方面的内容,希望对大家的学习能有所帮助。想了解SD卡的工作原理,首先需要了解的就是SD卡协议了,这个在网上可以轻松的下载到。在了解协议后,就可以看看下面的一些开发思路了。

首先看下脱离操作系统如何在S3C2410上实现SD卡的读写。过程可以分为3个大的步骤:初始化sd卡、写sd卡、读sd卡;下面的过程是我通过realview-MDK环境测试过的。

一、初始化sd卡

初始化sd卡

二、写sd卡

写sd卡可以分为3种方式:POLL、中断、DMA

(1)POLL写

POLL写

(2)中断写

中断写

(3)DMA写

DMA写

三、读sd卡

读sd卡也可分为3中方式:POLL、中断、DMA

(1)POLL读

POLL读

(2)中断读

中断读

(3)DMA读

DMA读

http://blog.csdn.net/farsight2009/archive/2009/06/03/4228287.aspx

序:我在讲嵌入式Linux驱动开发班的时候,发现不少学员对SD卡驱动这块比较感兴趣,课下来找我探讨。而在很多技术论坛,也有不少人问这方面的问题,所以就想写一下这方面的内容,希望对大家的学习能有所帮助。

前几天写了篇“基于S3C2410的SD卡linux驱动工作原理(一)”,说了下脱离操作系统如何在S3C2410上实现SD卡的读写。了解了脱离操作系统的工作原理后,现在可以思考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卡

二、SD卡块设备注册过程

DMA写

三、request及数据传输的实现

DMA读

end

转载请注明:在路上 » 基于S3C2410的SD卡linux驱动工作原理

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.190 seconds, using 22.07MB memory