当前位置:文档之家› 基于ARM嵌入式系统课程设计MMCSD卡驱动程序设计

基于ARM嵌入式系统课程设计MMCSD卡驱动程序设计

ARM嵌入式系统课程设计--MMC/SD卡驱动程序设计

目录

第一章引言 (2)

1.1课程设计目的 (2)

1.2课程设计要求 (2)

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

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

2.2课程设计硬件结构与工作原理 (2)

第三章 BOOTLOADER移植与下载 (5)

3.1B OOTLOADER解压 (5)

3.2B OOTLOADER编译 (5)

3.3B OOTLOADER下载 (6)

第四章 LINUX内核移植与下载 (7)

4.1L INUX内核总流程 (7)

4.2L INUX源代码安装 (7)

4.3L INUX源代码安装分析 (7)

4.4L INUX内核配置、编译、烧写 (8)

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

5.1L INUX文件系统的类型 (13)

5.2文件系统的制作 (14)

5.3文件系统的下载 (15)

5.4功能模块运行和调制 (17)

第六章思考题 (18)

第七章课设中遇到的问题及解决方法 (21)

第八章总结与体会 (22)

第一章引言

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) XSBase270 ARM实验开发平台一套

3) MMC存储卡一块

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

2.2.1 目标板的MMC卡硬件接口

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

1输出方式,4位总线MMDAT0到MMDAT3分别与GPIO111、GPIO110、GPIO109和GPIO92相连,都时使用了通用IO口的转换功能1的输入或输出方式。图1.2为MMC/SD卡的供电电路图。

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

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

2.2.2 PXA270的MMC/SD/SDIO控制器

PXA270的MMC/SD/SDIO控制器在访问PXA270处理器的软件与MMC存储堆和支

持MMC、SD及SDIO通信协议之间充当联结作用。PXA27x的MMC控制器协议规范遵守多媒体卡系统规范V3.2(MultiMediaCard System Specification Version 3.2);SD控制器支持一个基于SD存储卡规范V1.01(SD Memory Card Specification

Version 1.01)SD卡或基于SDIO卡规范V1.0( SDIO Card pecification Version 1.0)。MMC/SD/SDIO控制器采用标准的MMC传输协议或串行通信接口SPI协议模式。访问PXA270的软件使用MMC传输协议或SPI模式作为与MMC控制器通信的协议。目标板的SD驱动程序采用了MMC通信传输协议。

1)MMC/SD/SDIO控制器特性:

①. 在MMC、1位SD/SDIO和SPI模式中,数据传输速率高达19.5Mbps;

②. 对于4位SD/SDIO的数据传输速率高达78Mbps;

③. 具有两个接受和发送FIFO数据缓冲区;

④. 具有MMC/SD/SDIO和SPI两种操作模式;MMC/SD/SDIO模式支持MMC、SD和

SDIO的通信协议,SPI模式支持SPI通信协议;

⑤. 在SD和SDIO通信协议中,支持1位和4位数据传输;

⑥. 控制器可根据FIFO数据缓冲区的状态关闭和启动时钟信号,防止数据溢

出;

⑦. 支持所有有效的MMC和SD/SDIO数据传输协议;

⑧. 基于中断的应用接口控制软件交互操作;

⑨. 在数据流的写操作中,允许10字节大小的数据或更大的数据流;

⑩. 使用MMC通信协议,支持多个MMC卡;

?. 使用SD或SDIO通信协议,只支持一个SD卡或SDIO卡;

?. 使用SPI通信协议;可支持两个MMC卡或SD/SDIO卡,也可支持两者的混合使用;

2)MMC/SD/SDIO控制器的信号功能与对应引脚:

信号

MMC和

SD/SDIO

SPI

模式

功能对应引脚

MMCLK 输出输出MMC和SD/SDIO总线时钟GPIO32

MMCDM 双向输出MMC和SD/SDIO:命令和响应标志双向IO

SPI模式:命令和写数据输出口

GPIO112

MMDAT<0> 双向输入MMC和SD/SDIO:读写数据双向IO口

SPI模式:读数据和响应标志输入线

GPIO111

MMDAT<1> 双向输入MMC和SD/SDIO:SD/SDIO的4位数据传输

线和信号SDIO到控制器的中断信号

SPI模式:信号SDIO到控制器的中断信

GPIO110

MMDAT<2>/ MDCCS<0> 双向输出

SD/SDIO:4位数据传输线

SPI模式:CS0片选信号

GPIO109

MMDAT<3>/ MDCCS<1> 双向输出

SD/SDIO:4位数据传输线

SPI模式:CS1片选信号

GPIO92

2.2.3 MMC卡的通信协议

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

第三章 Bootloader移植与下载

3.1 Bootloader解压

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

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

3.2 Bootloader编译

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

root@ubuntu:Bootloader # cd Boot-XSBase270

root@ubuntu: Boot-XSBase270 # make clean

root@ubuntu: Boot-XSBase270 # make

编译完成后, 在当前目录下会生成bootloader 映象文件boot,将此boot 拷贝到share共享文件夹下。

3.3 Bootloader下载

打开实验台电源,启动H-JTAG 和H-Flasher,在H-Flasher 中装载配置文件

pxa270.hfc(Load菜单,选中C:\drivers\H-JTAG中pxa270.hfc文件),点击Programming中的Check,Scr File 选择E:\share中的boot(或者是

D:\emdor\EELiod_V4_SDK \Linux-2.4\images\中的boot 文件),点击Program,烧写成功后点击 Verify 校验。

第四章 Linux 内核移植与下载

4.1 Linux 内核总流程 运行VMware Player

创建kernel 目录

进入kernel

目录

内核编译

判断编译是否成功

生成映像文件zImage

内核烧写

重启实验板,启动内核否

4.2 Linux 源代码安装

参照以前做过的实验五、七BootLoader 实验。

内核解压:

4.3 Linux 源代码安装分析

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

make config 控制台命令行方式配置命令

make menuconfig 文本菜单方式配置命令

make xconfig X 窗口图形界面方式配置命令

其他部分命令:

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

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

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

Make zImage 编译Linux内核,生成压缩的内核映像文件

4.4 Linux内核配置、编译、烧写

4.4.1 Linux内核配置

进入内核源代码目录linux-2.4.21-51Board_EDR,执行make mrproper:删除所有以前在构核过程所产生的所有文件,执行make menuconfig,对内核进行配置。

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

1)在主菜单下选择Loadable module support --->[*] Enable Loadable moduLe Support

利用模块可将不常用的设备驱动或功能作为模块放在内核外部,必要时动态地调用。操作结束后从内存中删除,这样可以有效地使用内存,同时也可减小了内核的大小。模块可以自行编译并具有独立的功能,即使需要改变模块的功能,也不用对整个内核进行修改。文件系统,设备驱动,二进制格式等很多功能都支持模块。一定要选择[*]。

[ ] Set version information on all Symbols for modules

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

[*] Kernel module Loader

这个设置使kernel 对模块处于常备状态。在不使用Insmod 或rmmod 命令情况下,kernel 程序自动将需要

执行的模块调用到内存中,一定时间内不使用该模块时自动将其从内存删除,一

般要选择[*]。

2)再回到主菜单下选择General setup ―――>选择“Support for hot-pluggable devices” , 出现“MMC/SD device drivers”:

点击“MMC/SD device drivers”,进入下一页选择:

4.4.2 Linux内核编译

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

生成的zImage存放路径为:

将zImage拷贝到tftpboot文件夹下:

重新打开一个终端,输入命令:root@ubuntu:~# minicom,然后重启开发板电源。

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

然后再提示信息 Please enter your selection 后面输入2,获取本地IP 地

址:

可以看到Operation Menu 菜单上方显示:

My ip address is 192.168.0.50,则表示板载Linux 与Ubuntu 服务器连接成功。如果看不到 My ip,则需要去修改/etc 中bootptab 文件最后一行,将其修改为与本机的my mac address 相同,本例图中显示的是 my mac address is 00:08:0C:81:1D: 90。

重新打开一个终端,进入/etc 目录,输入:#gedit bootptab

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

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

5.1Linux文件系统的类型

5.1.1 EXT文件系统

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

5.1.2 NFS文件系统

NFS是一个RPC service ,它是由SUN公司开发,并于1984年推出。NFS 文件系统能够使文件实现共享,它的设计是为了在不同的系统之间使用,所以NFS文件系统的通信协议设计与作业系统无关。当使用者想使用远端文件时只要用“mount”命令就可以把远端文件系统挂载在自己的文件系统上,使远端的文件在使用上和本地机器的文件没有区别。NFS的具体配置可参考实验一的网络文件系统nfs的配置。

5.1.3 JFFS2文件系统

JFFS文件系统是瑞典Axis通信公司开发的一种基于Flash的日志文件系统,它在设计时充分考虑了Flash的读写特性和电池供电的嵌入式系统的特点,在这类系统中必需确保在读取文件时,如果系统突然掉电,其文件的可靠性不受到影响。对Red Hat的Davie Woodhouse进行改进后,形成了JFFS2。主要改善了存取策略以提高FLASH的抗疲劳性,同时也优化了碎片整理性能,增加了数据压缩功能。需要注意的是,当文件系统已满或接近满时,JFFS2会大大放慢运行速度。这是因为垃圾收集的问题。相对于EXT2fs而言,JFFS2在嵌入式设备中更受欢迎。

5.2文件系统的制作

5.2.1文件系统解压

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

E:\share 中,再Ubuntu 中从共享目录中复制到/tmp/中,形成Filesystem文件夹,然后将文件系统压缩包解压,形成rootfs270文件系统文件夹。可以建立一个小的应用程序,将其复制到文件系统的某个目录中。

5.2.2制作JFFS2文件映像

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

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

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

5.3文件系统的下载

参照嵌入式系统实验五,重新打开一个终端,输入命令:root@ubuntu:~# minicom

然后重启开发板电源。

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

然后再提示信息 Please enter your selection 后面输入2,获取本地IP 地址:

可以看到Operation Menu 菜单上方显示:

My ip address is 192.168.0.50,则表示板载Linux 与Ubuntu 服务器连接成功。如果看不到 My ip,则需要去修改/etc 中bootptab 文件最后一行,将其修改为与本机的my mac address 相同,本例图中显示的是 my mac address is 00:08:0C:81:1D: 90。

重新打开一个终端,进入/etc 目录,输入:#gedit bootptab

输入5,下载文件系统rootfs.img(在Ubuntu的文件系统/tftpboot目录中)下载成功后选择6,烧写文件系统

内核和系统文件烧写结束,选择7启动Linux系统,使用root用户登录,进入载板linux系统,启动后位于/root文件夹中

5.4功能模块运行和调制

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

重新打开一个终端,输入minicom,开发板启动后,将MMC存储卡插入

MMC/SD卡插槽中,输入下面的指令:

首先在根目录下创建一个名为“sd”的文件夹:(请大家以自己的名字首写

字母命名此文件夹):

然后进入dev文件夹,红框标注的为需要用的文件:

再利用mount命令挂载MMC卡:

进入到sd文件夹下,用ls查看,就可以看到MMC卡里面的内容了:

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

第六章思考题

1.嵌入式系统开发的软件有哪些?

答:VMware Player、H-JTAG。

VMware Player用于启动Ubuntu虚拟机环境。H-JTAG用于搜索目标板。

2.嵌入式系统开发硬件设备有哪些?

答:装有Linux操作系统的PC机一台、 XSBase270 ARM实验开发平台一套、MMC/SD存

储卡一块

3. 软件的界面表示进入哪一个环境?

答:(1)虚拟机环境下:

(2)Linux内核配置环境下:

(3)boot内嵌工具的环境下:

相关主题
文本预览
相关文档 最新文档