第23章SD卡驱动设计.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第23章SD卡驱动设计

第23章 SD卡驱动设计 SD存储器卡(Secure Digital Memory Card)是一种基于Flash的存储器卡,设计它是为了满足新出现的多媒体电子消费品对于保密、容量、性能和应用环境的要求。本章将介绍如何SD卡的工作原理及设计的驱动程序 23.1 SD卡概述及协议 SD卡包含一个与SDMI安全标准兼容的专利保护机制,并且具有更快、更大的存储能力。SD存储器卡的保密系统运用了相互认证和新的秘密算法来防止不合法的应用卡的内容。非保密的方式也可以读取卡上用户自己的内容。SD卡的物理规格、管脚功能和数据传输协议是与MMC(Multimedia Card)前向兼容的。 23.1.1 SD卡概述 SD存储卡通信是基于9管脚的接口(时钟线、命令线、4个数据线和3个电源线),工作于低电压范围。SD卡主机接口也支持常规的MMC卡操作。SD存储卡系统定义了两个可选择的通信协议:SD和SPI总线传输协议。可以选择其中的任何一个模式操作。本系统采用的是SD总线协议。 23.1.2 SD卡协议 在SD存储卡系统中,存在两种操作模式:卡识别模式和数据传输模式。卡识别模式:在复位之后并且主机在总线上寻找新的卡时,主机处于此模式。卡在复位之后,收到SEND_RCA命令之前处于此模式。数据传输模式:卡在它们的RCA(卡的相对地址)被第一次发布之后将处以此模式。主机在识别了总线上所有的卡之后将进入此模式。 1.卡识别模式 2.数据传输模式 23.2 SD卡驱动设计 这里把SD卡设备作为一种块设备来应用,所以就必须按照块设备的驱动程序设计方法来进行设计。块设备驱动与之前的字符设备驱动有很大不同。下面将详细讲解块设备驱动程序是如何设计的,并且将SD卡的驱动程序做了仔细的分析。 23.2.1 块设备驱动设计 块设备驱动程序提供了对面向块的设备的访问,这种设备以随机的方式传输数据,并且数据总是具有固定大小的块。其主要包含以下几个方面的内容:注册和注销块设备、块设备文件接口、IO操作方法。 1.注册和注销块设备 和字符设备驱动程序一样,内核使用主设备号来标识块设备的驱动程序。用来注册和注销块设备驱动程序的函数,与用于字符设备的函数看起来很类似,如下所示: #includelinux/fs.h int register_blkdev(unsigned int major,const char*name,struct block_device_operations *bdops); int unregister_blkdev(unsigned int major,const char*name); 2.块设备文件接口 由于块设备的特殊性,实际上块设备注册时提供给内核的并不是file_operations{}结构,而是采用了block_device_operations{}结构。该结构定义如下: struct block_device_operations{ int(*open)(struct inode*,struct file*); int(*release)(struct inode*,struct file*); int(*ioctl)(struct inode*,struct file*,unsigned,unsigned long); int(*check_media_change)(kdev_t); int(*revalidate)(kdev_t); struct module*owner; }; 3.IO操作方法 在block_device_operations结构中没有read或者write操作,所有涉及到块设备的I/O操作通常由系统缓冲,用户进程不会对这些设备执行直接的I/O操作。。默认情况下,对于每个主设备号并没有这样一个对应的队列。块设备驱动程序必须通过blk_init_queue初始化这一队列。队列的初始化和清除定义如下: #includelinux/blkdev.h blk_init_queue (request_queue_t *queue, request_fn_proc *request); blk_cleanup_queue (request_queue_t*queue); 其中request_queue_t*queue为请求队列,request_fn_proc*request为请求方法。 23.2.2 SD卡驱动程序分析 本系统中SD卡驱动程序的具体实现方式为:采用中断驱动方式,数据传输采用DMA方式,这也是本驱动程序的难点和重点。采用中断方式,可以减少CPU的干预,腾出CPU更多的时间来作其它事情,不过中断方式与普通方式不同,在普通方式下,request函数一般在一个死循环中,直到所有请求处理完毕才会返

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档