MMCSD卡驱动程序设计.docx

上传人:b****1 文档编号:1053589 上传时间:2023-04-30 格式:DOCX 页数:25 大小:1.43MB
下载 相关 举报
MMCSD卡驱动程序设计.docx_第1页
第1页 / 共25页
MMCSD卡驱动程序设计.docx_第2页
第2页 / 共25页
MMCSD卡驱动程序设计.docx_第3页
第3页 / 共25页
MMCSD卡驱动程序设计.docx_第4页
第4页 / 共25页
MMCSD卡驱动程序设计.docx_第5页
第5页 / 共25页
MMCSD卡驱动程序设计.docx_第6页
第6页 / 共25页
MMCSD卡驱动程序设计.docx_第7页
第7页 / 共25页
MMCSD卡驱动程序设计.docx_第8页
第8页 / 共25页
MMCSD卡驱动程序设计.docx_第9页
第9页 / 共25页
MMCSD卡驱动程序设计.docx_第10页
第10页 / 共25页
MMCSD卡驱动程序设计.docx_第11页
第11页 / 共25页
MMCSD卡驱动程序设计.docx_第12页
第12页 / 共25页
MMCSD卡驱动程序设计.docx_第13页
第13页 / 共25页
MMCSD卡驱动程序设计.docx_第14页
第14页 / 共25页
MMCSD卡驱动程序设计.docx_第15页
第15页 / 共25页
MMCSD卡驱动程序设计.docx_第16页
第16页 / 共25页
MMCSD卡驱动程序设计.docx_第17页
第17页 / 共25页
MMCSD卡驱动程序设计.docx_第18页
第18页 / 共25页
MMCSD卡驱动程序设计.docx_第19页
第19页 / 共25页
MMCSD卡驱动程序设计.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

MMCSD卡驱动程序设计.docx

《MMCSD卡驱动程序设计.docx》由会员分享,可在线阅读,更多相关《MMCSD卡驱动程序设计.docx(25页珍藏版)》请在冰点文库上搜索。

MMCSD卡驱动程序设计.docx

MMCSD卡驱动程序设计

1.2课程设计任务与要求...........................................................................................................1

 

第一章引言

1.1课程设计目的

1)了解PXA27X微处理器GPIO的功能

2)了解MMC卡驱动程序的架构及编程方法

3)掌握MMC卡的使用方法

1.2课程设计任务与要求

1)理解基于Linux的嵌入式系统交叉开发环境,对嵌入式系统的开发流程有详细的了解;

2)掌握开发工具链的构建方法,能独立进行系统开发操作;

3)掌握Linux的常用命令,在linux系统下能熟练的使用这些常用命令;

4)熟悉linux内核的知识以及原理,掌握定制Linux内核的方法;

5)基于Linux操作系统,以及XSBase270ARM实验开发平台一套,把MMC存储卡挂载目标板上并进行文件的复制操作。

 

第二章课程设计平台构建与流程

2.1嵌入式系统开发平台构建

1)装有Linux操作系统的PC机一台;

2)XSBase270ARM实验开发平台一套

3)MMC存储卡一块

2.2课程设计流程

1)Bootloader移植与下载

2)Linux内核移植与下载

3)功能模块程序设计与交叉编译

4)根文件系统建立与文件系统下载

2.3课程设计硬件结构与工作原理

1)目标板的MMC卡硬件接口

目标板的MMC/SD卡的硬件接口如图1.1所示,根据PXA27x的MMC/SD/SDIO控制器的信号功能以及PXA27x的GPIO的功能分配,命令控制线MMCMD与GPIO112相连,此时引脚GPIO112必须配置成转换功能1(AlternateFunction1)的输入或输出方式(具体参考PXA27X开发手册),时钟端MMCLK利用了通用IO口GPIO32转换功能1输出方式,4位总线MMDAT0到MMDAT3分别与GPIO111、GPIO110、GPIO109和GPIO92相连,都时使用了通用IO口的转换功能1的输入或输出方式。

图1.2为MMC/SD卡的供电电路图。

图1.1目标板的MMC/SD卡的硬件接口

图1.2MMC/SD卡的供电电路图

2)PXA270的MMC/SD/SDIO控制器

PXA270的MMC/SD/SDIO控制器在访问PXA270处理器的软件与MMC存储堆和支持MMC、SD及SDIO通信协议之间充当联结作用。

PXA27x的MMC控制器协议规X遵守多媒体卡系统规XV3.2(MultiMediaCardSystemSpecificationVersion3.2);MMC/SD/SDIO控制器采用标准的MMC传输协议或串行通信接口SPI协议模式。

访问PXA270的软件使用MMC传输协议或SPI模式作为与MMC控制器通信的协议。

目标板的SD驱动程序采用了MMC通信传输协议。

3)MMC卡的通信协议

主机与MMC卡的所有通信都是由主机发起,主机发出广播和点对点两种类型通信命令,在广播通信命令中,主机发出的命令被所有的卡接受,只有部分命令需要响应;而在点对点通信命令中,命令被发送到具体地址的卡中,并由该卡对所接受的命令做出响应。

 

第三章Bootloader移植与下载

3.1源代码安装

先将D:

\emdor\EELiod_V4_SDK目录下的Linux-2.4复制到虚拟机里root的主文件夹中,然后用如下指令进行解压:

利用上述命令解压后,bootloader源代码解压到当前目录中Boot-XSBase270文件夹中。

3.2源代码分析移植与编译

在解压的目录里进行make编译。

rootlocalhostBootLoader#cdBoot-XSBase270

rootubuntu:

Boot-XSBase270#makeclean

rootlocalhostBoot-XSBase270#make

编译完成后,在当前目录下会生成bootloader映象文件boot。

3.3下载

1)设置完成后,打开开发板电源,启动桌面的DaemonU,会自动搜索目标板,如果成功,DaemonU将出现如下图:

2)烧写boot到flash中

启动桌面上的FlashWrite

点击Initialize:

上图为连接正常的弹出窗口,确认连接正常,点击Detect

如正常,应能自动搜索到板载的norFlash芯片,然后点击program按钮,按图中设置:

目标文件位于D盘项目文件中,烧写起始地址为0,烧写选项按上图设置,然后点击Start按钮,开始烧写。

烧写结束。

第四章Linux内核移植与下载

4.1Linux内核源代码安装

内核解压

4.2Linux内核源代码分析与移植

Linux提供三个不同的命令进行Linux的配置,效果完全一样:

makeconfig控制台命令行方式配置命令

makemenuconfig文本菜单方式配置命令

makexconfigX窗口图形界面方式配置命令

其他部分命令:

Makemrproper命令清除所有的旧的配置和旧的编译目标文件等。

Makedep命令搜索Linux编译输出与源代码之间的依赖关系、并生成依赖文件。

Makeclean清除以前构造内核时生成的所有目标文件、模块文件和临时文件。

MakezImage编译Linux内核,生成压缩的内核映像文件。

4.3Linux内核编译与下载

1)内核解压

2)内核配置

Linux针对MMC/SD内核配置的步骤:

(1)在主菜单下选择Loadablemodulesupport--->[*]EnableLoadablemoduLeSupport

利用模块可将不常用的设备驱动或功能作为模块放在内核外部,必要时动态地调用。

操作结束后从内存中删除,这样可以有效地使用内存,同时也可减小了内核的大小。

模块可以自行编译并具有独立的功能,即使需要改变模块的功能,也不用对整个内核进行修改。

文件系统,设备驱动,二进制格式等很多功能都支持模块。

一定要选择[*]。

[]SetversioninformationonallSymbolsformodules

利用这个功能能够让内核使用其它内核版本模块或没有包含在此kernel的特殊的模块。

一般选择[N]。

[*]KernelmoduleLoader

这个设置使kernel对模块处于常备状态。

在不使用Insmod或rmmod命令情况下,kernel程序自动将需要

执行的模块调用到内存中,一定时间内不使用该模块时自动将其从内存删除,一般要选择[*]。

(2)再回到主菜单下选择Generalsetup―――>选择“Supportforhot-pluggabledevices”,出现“MMC/SDdevicedrivers”:

点击“MMC/SDdevicedrivers”,进入下一页选择:

用向下的箭头,选择LoadanAlternaeConfigurationFile选项,

输入配置文件名arch\arm\def‐configs\xsbase270,退出并保存。

3)配置完成后,重新编译内核,需要输入以下指令:

生成的zImage存放路径为:

将zImage拷贝到tftpboot文件夹下:

4)内核烧写

重新打开一个终端,输入命令:

rootubuntu:

~#mini

然后重启开发板电源,

看到Boot启动信息后按任意键启动Boot的OperationMenu,我们需要用这个boot内嵌工具下载内核。

然后再提示信息Pleaseenteryourselection后面输入2,获取本地IP地址:

可以看到OperationMenu菜单上方显示:

Myipaddressis192.168.0.50,则表示板载Linux与Ubuntu服务器连接成功。

输入3,下载内核文件ZImage(在Ubuntu的文件系统的/tftpboot/目录中)下载成功后选择4,烧写内核。

第五章根文件系统建立与文件系统下载

5.1根文件系统分析

1)EXT文件系统

Ext2fs是Linux的标准文件系统,它已经取代了扩展文件系统(或Extfs)。

扩展文件系统Extfs支持的文件大小最大为2GB,支持的最大文件名称大小为255个字符,而且它不支持索引节点(包括数据修改时间标记)。

2)NFS文件系统

NFS是一个RPCservice,它是由SUN公司开发,并于1984年推出。

NFS文件系统能够使文件实现共享,它的设计是为了在不同的系统之间使用,所以NFS文件系统的通信协议设计与作业系统无关。

当使用者想使用远端文件时只要用“mount”命令就可以把远端文件系统挂载在自己的文件系统上,使远端的文件在使用上和本地机器的文件没有区别。

NFS的具体配置可参考实验一的网络文件系统nfs的配置。

3)JFFS2文件系统

JFFS文件系统是瑞典Axis通信公司开发的一种基于Flash的日志文件系统,它在设计时充分考虑了Flash的读写特性和电池供电的嵌入式系统的特点,在这类系统中必需确保在读取文件时,如果系统突然掉电,其文件的可靠性不受到影响。

对RedHat的DavieWoodhouse进行改进后,形成了JFFS2。

主要改善了存取策略以提高FLASH的抗疲劳性,同时也优化了碎片整理性能,增加了数据压缩功能。

需要注意的是,当文件系统已满或接近满时,JFFS2会大大放慢运行速度。

这是因为垃圾收集的问题。

相对于EXT2fs而言,JFFS2在嵌入式设备中更受欢迎。

5.2文件系统映像文件生成

1)文件系统安装与busybox的编译

将D:

\emdor\EELiod_V4_SDK\Linux-2.4\Filesystem中的内容复制E:

\share中,再Ubuntu中从共享目录中复制到/tmp/中,然后将文件系统压缩包解压:

可以建立一个小的应用程序,将其复制到文件系统的某个目录中。

2)制作JFFS2文件映像

确认已将光盘的filesystem下的mkfs.jffs2和mkrootfs.sh拷贝到文件系统根目录下,在根目录下(例如上面的Filesystem),运行命令

#./mkfs.jffs2-orootfs270.img-e0x40000-r_install-p–l

生成映像文件rootfs270.img,拷贝到/tftpboot中烧写到flash中,启动后运行结果。

或者运行#./mkrootfs.sh也可生成文件系统的映像文件rootfs.img。

或者运行#./mkrootfs.sh也可生成文件系统的映像文件。

5.3文件系统下载

回到OperationMenu,下载文件系统

烧写文件系统

 

启动进入mini

5.4功能模块运行与调试

可以按照以下步骤对MMC卡的驱动程序进行测试:

重新打开一个终端,输入mini,开发板启动后,将MMC存储卡插入MMC/SD卡插槽中,输入下面的指令:

首先在根目录下创建一个名为“dq”的文件夹,然后进入dev文件夹

再利用mount命令挂载MMC卡,现在就可以看到MMC卡里面的内容了:

可以对MMC卡里的内容进行读、写、复制等操作:

第六章完成课堂上布置的三个思考题

1)根据MMC/SD卡的认证模式命令流程图,结合目标板源码提供的MMC/SD驱动程序,画出认证过程的流程图;

2)根据MMC/SD卡的传输模式命令流程图,结合目标板源码提供的MMC/SD驱动程序,画出数据传输过程的流程图;

3)从网上下载MMC/SD卡的协议标准(SDMemoryCardSpecificationVersion1.01),结合驱动程序,分析各命令的功能。

GO_IDLE_STATE

这是使card初始化到Idle状态的指令.CS信号设在Low的状态时,接到本指令后,card将转换到SPI模式.

SEND_OP_COND

接到本指令后,card将做R3回应(含有OCR数据).根据OCR值,可以得知card能工作电压X围.OCR数据最高值位的1bit是用来确认card内部处理是否结束(Ready/Busy轮询).

ALL_SEND_CID

接到本指令后,处于Ready状态的card将传送CID数据.在MMC模式下,数据被送到CMD信号,在CID数据的每1bit传送后,CMD信号状态将与该card内部状态相比较,如果不一致,將中止数据传送,card返回到Ready状态.如果相一致,该card将认为已被选中,然后转换到Identification状态.

SET_RELATIVE_ADDR

本指令会为已转换到Identification状态的card分配一个相对card地址(RCA).当RCA分配后,card将转换到Stand-by状态,对以后的CMD2和CMD3不回应.

NOP

这是用来设定DSR(DriveState寄存器)的指令,但是本car不支持DSR.

SELECT/DESELECT_CARD

本指令是用来选择一Xcard,让它在Stand-by状态和Transfer状态之间转换的指令.如果给card设定已分配到的RCA地址,card将从Stand-by状态转换到Transfer状态,并将回应以后的读取指令及其他指令.如果给card设定RCA以外的地址,card将转换到Stand-by状态。

当RCA=0000h时,card将无条件地转换到Stand-by状态.

SEND_CSD

接到本指令后,将传送CSD数据.

SEND_CID

接到本指令后,将传送CID数据.

READ_DAT_UNTIL_STOP

接到本指令后,将从设定的地址传送P2ROM数据,直到接到指令CMD12为止.

STOP_TRANSMISSION

本指令强行终止CMD11和CMD18的处理

SEND_STATUS

接到本指令后,将传送状态寄存器的信息.

GO_INACTIVE_STATE

接到本指令后,将转换到休止(inactive)状态.

SET_BLOCKLEN

本指令用来设定Block长度.对象是以后的指令CMD17和CMD18.

READ_SINGLE_BLOCK

接到本指令后,将从自变量设定的地址传送1个block长度的数据.(block长度由指令CMD16设定).

READ_MULTIPLE_BLOCK

接到本指令后,将从自变量设定的地址连续传送block长度的数据,直到接到指令CMD12为止.(block长度由指令CMD16设定).

SET_BLOCK_COUNT

本指令是给紧跟的指令CMD18设定要传送的block数量.

WRITE_BLOCK

接到本指令后,将写1个block长度的数据到自变量设定的地址.(block长度由指令CMD16设定).

WRITE_MULTIPLE_

BLOCK

接到本指令后,将连续写block长度的数据到自变量设定的地址,直到接到指令CMD12为止.(block长度由指令CMD16设定).

READ_OCR

接到本指令后,Card将传送OCR数据.

CRC_ON_OFF

本指令是用来设定CRC选项为ON或OFF.在SPI模式下,CRC的初始值设定为OFF.[CRC选项[bit=1]表示CRCON;[CRC选项[bit=0]表示CRCOFF.

1)R1模式

对象指令

CMD0:

GO_IDLE_STATE

CMD1:

SEND_OP_COND

CMD9:

SEND_CSD

CMD10:

SEND_CID

CMD12:

STOP_TRANSMISSION

CMD16:

SET_BLOCKLEN

CMD17:

READ_SINGLE_BLOCK

CMD18:

READ_MULTIPLE_BLOCK

CMD23:

SET_BLOCK_COUNT

CMD59:

CRC_ON_OFF

R2模式

对象指令

CMD13:

SEND_STATUS

R3模式

对象指令

CMD58:

READ_OCR

第七章课程设计总结与体会

7.1课程设计中遇到的问题以及解决方法

开始IP地址不显示,更改bootptab中MAC地址解决;

最开始烧写文件系统时只下载了,没有刷写进flash,所以实验没成功,再次刷写实验成功。

7.2总结和体会

通过本次课程设计,我了解PXA270微处理器的一些功能和用法,对嵌入式系统的开发流程有基本的了解;掌握了一些Linux的常用命令,在linux系统下能熟练的使用这些常用命令;熟悉了linux内核的知识以及原理,掌握定制Linux内核的方法;能够把MMC存储卡挂载目标板上并进行文件的复制操作。

经过这次课程设计感觉收获良多。

它让我深刻的感觉到学好嵌入式系统是不容易的,同时也在一定程度上加强了同学之间的合作。

课程设计是需要我把所学的知识灵活运用的,它也需要我们能够把知识结合起来,但一个人的力量毕竟有限,同学之间的合作自然也是不可缺少的。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2