新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机CF卡接口设计

单片机CF卡接口设计

作者: 时间:2012-10-25 来源:网络 收藏

这套系统除了包括卡这两个必不可少的元件以外,另外还包括一个LCD液晶显示屏,其功能主要是用于显示程序执行中各种参数的状态(如串口是否能正常工作)。液晶显示屏是一个很好的硬件调试监视器,尤其是在没有仿真器的条件下,它可以方便地设立程序断点,监视程序的执行,实时显示各个状态参数。

为了更有效地测试卡的海量存储功能,系统中还设置了一个RS-232,以便与PC机之间进行通信。另外,考虑到在线调试卡驱动程序的时候需要多次烧写的程序存储器,特别又设置了一个ISP下载线。这样一来,不用仿真器和烧写器而仅使用ISP并口下载线就可以对整个系统进行在线调试,大大方便了驱动程序的开发与调试。

软件

严格遵循ATA标准的CF卡设备对软件的编制有非常标准化的方法,而且基于CFA的协议,CF卡硬件上的向下兼容性也保证了软件上的兼容性。CF卡工作在内存映射下的读写程序逻辑框图如图3所示。值得指出的是,不同于一般的Flash存储器,CF卡采用IDE标准的读写方式,它的寻址方式、读写方式,甚至命令都与普通的ATA硬盘相符合。也就是说,CF是在模拟硬盘的读写,按照扇区、磁道、柱面来寻址。同硬盘一样,CF卡不能够对位操作,它的一次性吞吐量为一个扇区,也就是512个字节。CF卡在之初,之所以要采取类似硬盘的读写方式,是因为这种方法的存储速度快、可靠,并能节省资源。本设计并不需要在CF上面建立文件系统,这样可以充分利用CF卡存储量大、速度快的特点,同时也可使软件的编制更为简化。

19.jpg

图3 读写CF卡程序的逻辑框图

实验步骤与结果

测试读写CF卡是否成功的方法是:先用串口调试助手把PC机上的一个ASCII文件通过串口发送到CF卡的特定扇区,然后将刚刚写入的数据读出,并通过串口发送到PC机的串口调试助手的终端上。如果发送与接收到的文件数据是一致的,那么就说明对CF卡的读写操作成功。

首先要测试串口是否能正常工作,因为只有在串口正常工作的前提下,才能对CF卡的读写功能程序进行测试。先将一个简单的串口调试程序用ISP下载线下载到上运行,通过串口调试助手的终端显示测试结果,确定串口调试助手发送到单片机上的数据能够被正确返回。

在确定串口在电气特性上没有问题了之后,就可以通过ISP,将事先编好的CF卡读写测试程序下载到单片机上运行。在PC机上选择一个约4M大小的 ASCII码文件,预计它将充满CF卡的8000个扇区,将其通过串口调试助手发送到单片机上。在单片机上运行的这个小程序是一个伺服进程,它一直在检测是否有数据通过串口传过来。一旦有数据过来,它就会调用中断,将接收到的数据存入CF卡相邻的扇区内。这样就完成了对CF卡的写操作。写操作之后可以立即对同一地址进行读操作,这也正是CF卡的读写机制与其它普通Flash存储器不同的地方,单片机从先前存入扇区的首地址开始,读出刚刚写入的数据,并将其送出到串口,发送到PC机的串口调试助手终端上。经过验证,原先发送的数据和反馈回来的内容一致,由此判定, CF卡程序编写正确。

CF 卡读写设计的难点主要在于对扇区的访问,由于CF卡由ATA控制器和Flash存储器两部分构成,系统访问Flash存储器的速度远远小于访问内存的速度,如果系统频繁访问CF卡,势必会影响系统的实时性和工作效率,所以必须考虑CF卡读写程序的设计技巧。根据存储器访问的局部性原理,CPU存取数据所访问的存储单元都趋向于聚集在一个较小的连续区域。从时间上看,如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。从空间上看,在最近将用到的信息很可能与目前正在使用的信息在空间地址上是临近的。在本系统的程序设计中,开辟了一个扇区的内存空间TempSect,用于存储最近访问过的扇区数据。另外还设置了两个全局变量SaveSectorNum和SectorDirty:SaveSectorNum保存最近备份的扇区编号; SectorDirty说明备份数据是否与CF卡中的相应数据一致,如果一致,其值为0,否则为1。这样不但可以减少读写CF卡的次数,而且提高了访问速度,满足嵌入式操作系统的实时性要求。

结语

本文对单片机直接读写CF卡进行了介绍,重点阐述了软硬件的实现思路、测试方法以及一些针对CF卡的编程思想。随着嵌入式处理器在通信、航空航天、医疗设备、消费类电子产品等领域的蓬勃发展,基于CF卡的嵌入式数据存储系统的应用前景一定会十分广阔。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭