网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
搜索关键字: 所有资讯 行业动态 市场趋势 政策法规 新品发布 技术资讯 价格快报 展会资讯
  • 达普IC芯片交易网 > 新闻中心 > 嵌入系统 > 正文
  • RSS
  • VxWorks操作系统下CF卡驱动程序的开发
    http://www.ic72.com 发布时间:2009/4/21 10:11:10

        1 概述

        CF卡是一种小型的、携带方便的存储I/O卡。由SanDisk等公司发起成立的CompactFlash协会(CFA)制定的CF卡标准促进了CF卡的发展,目前CF卡标准为4.0版本。同时支持3.3V和5V电压,容量从最早的2M字节发展到现今的8G字节,耗电量很低,仅为IBM微型硬盘的5%。CF卡的大容量、较高的抗震性能、很好的兼容性等特点使其在航空航天、医疗设备等领域,以及便携计算机、数码产品、个人通讯设备、监控设备、网络设备等方面被广泛应用。

        本文阐述了在VxWorks嵌入式操作系统下,使用Freescale的MPC8245处理器访问CF卡的IDE驱动程序设计,实现了对CF卡FAT16/FAT32文件格式的访问,便于在PC机上查看和处理CF卡中存储的数据文件,并说明了在VxWorks操作系统下从CF卡加载应用程序执行的方法。

        2 CF卡接口硬件设计

        MPC8245是Freescale生产的MPC82XX序列芯片的主流产品,其内部集成了PowerPC603e内核,最高工作主频为400MHz,16K字节数据缓存,16K字节指令缓存,具有SDRAM接口,数据线宽度32/64位,速率最高可达133MHz,容量最大2G字节。

        MPC8245同时集成了PCI桥、PCI仲裁器、ROM/FLASH/PortX接口、可编程中断控制器、DMA控制器、2个异步串口和I2C接口。ROM/FLASH/PortX接口中基本ROM空间为16M字节,扩展ROM/FLASH空间为256M字节,数据宽度支持8、16、32、64位。

        MPC8245与CF卡的接口框图如图1所示。MPC8245通过PortX接口与CF卡相连。

    www.ic72.com

    图1  MPC8245与CF卡的接口框图

        由于PORTX接口为高速接口(10ns时钟周期,100MHz总线速度),而CF卡的访问速度相对较慢,所以必须充分考虑所有信号的周期问题。设计中,PORTX采用了“Handshake”工作模式,通过插入/DRDY信号来自动延长PORTX接口信号的时间。CF卡所需控制信号由MPC8245 PORTX口输出后经过CPLD的逻辑变换产生。

        3 CF卡工作方式

        CF卡实际上是一种小型ATA-IDE驱动器,其寻址方式、读写方式、命令都与普通的ATA 硬盘相符合。也就是说CF卡是在模拟硬盘的读写,按照柱面磁道扇区来寻址,并且同硬盘一样CF卡不能够对位操作,它的一次性吞吐量为一个扇区,也就是512 个字节。CF卡在设计上之所以要采取类似硬盘的读写方式是因为这种方法的存储速度快、可靠、并能节省资源。

        CF卡具有三种工作模式:Memory模式、I/O模式和True IDE模式。本设计采用的是True IDE工作模式,数据宽度为16位。True IDE工作模式下,CF卡寄存器映射情况如表1所示。

        表1 True IDE模式寄存器映射表

    www.ic72.com

        4 驱动程序设计

        VxWorks操作系统的模块化设计,将所有硬件相关的功能放在板级支持包(BSP)的库中实现,BSP在操作系统和硬件驱动程序之间提供了一个标准接口,通过该接口,操作系统内核和应用程序可以使用各种硬件资源。BSP功能有两部分:初始化和驱动程序支持。初始化包括CPU初始化、目标板初始化和内核初始化。驱动程序负责对硬件设备的初始化,并与硬件设备交互实现系统对设备功能的调用。

        风河公司提供的BSP开发包有各种体系的BSP模板,以及所有类型设备的驱动程序模板。本设计中BSP是根据sp824x BSP更改而成,IDE驱动程序虽然可以自己编写,但是许多的实时操作系统已经提供了ATA或者IDE驱动程序来完成向CF卡发送相应的ATA命令,用户不必重新编写源程序。VxWorks开发工具中IDE驱动程序初始化源文件为usride.c,关系到具体硬件操作的源文件有idedrv.h和idedrv.c,至于文件系统(FAT16/FAT32)细节的访问,由VxWorks操作系统内核自动完成。但是,由于系统中MPC8245工作在big-endian方式下,并且CF卡的访问与硬盘访问存在部分差异,因此驱动程序需要做相应的更改才能完成。

        4.1 地址分配

        本设计中CF卡实际占用地址空间为78000000H-78000030H,数据宽度为16位,对应的CF卡寄存器地址如下(idedrv.h):

        /* IDE registers */

        #define IDE_BASE_ADRS        0x78000000

        #define IDE_DATA          0x78000000

        #define IDE_ERROR          0x78000002

        ……

        #define IDE_D_CONTROL     0x7800002C

        #define IDE_D_ADDRESS     0x7800002E

        此外,还需要在syslib.c的sysPhysMemDesc[]定义中增加CF卡的页表入口地址和地址空间大小。

        4.2 初始化IDE驱动程序(idedrv)

        idedrv()函数用于初始化IDE驱动,建立中断向量,执行CF卡的硬件初始化(调用ideinit函数),并记录IDE驱动器参数。我们采用自动读取的方式获取IDE驱动器参数,即调用idePread函数获得柱面数(pType->cylinders)、磁头数(pType->heads)和磁道扇区数(pType->sectorsTrack)。

        idePread函数的功能是读驱动器参数,具体实现步骤为:首先设置驱动器号和寻址方式,等待CF卡处于ready状态,然后写identify命令,等待CF卡产生中断释放信号量,并等待准备就绪,再从数据寄存器中连续读取512字节的驱动器参数数据,等待CF卡空闲,程序返回。

        4.3 建立IDE设备(ideDevCreate)

        隐藏扇区数(blkOffset)应根据不同的系统重新计算。MPC8245在big-endian方式下,读取的CF卡数据参数中,隐藏扇区数高字节对应的是实际的低字节,低字节对应实际的高字节。

        4.4 初始化CF卡(ideinit)

        CF卡初始化过程主要是复位和使能CF卡中断,通过写device control寄存器来完成。

    www.ic72.com

    图2 device control寄存器

        D2位先置1,然后置0完成对CF卡的软复位,复位过程中关闭中断。

        D1位为中断使能位,CF卡的文件系统访问需要使能中断。这主要是因为驱动程序和应用级任务之间必须采取同步机制,IDE驱动程序和设备采用中断方式通过信号量进行同步。同步的步骤如下:

        (1)任务调用semTake(),阻塞;

        (2)设备产生中断;

        (3)ISR判断任务要求的条件满足semGive();

        (4)任务从semTake()返回。

        4.5 物理读写CF卡(ideRW)

        物理上CF卡由扇区组成,每个扇区512字节,读写方式采用IDE标准,与普通ATA硬盘访问类似,访问数据需要通过相关寄存器完成。

        (1)读数据

        首先配置寄存器,设置读取的扇区数、起始扇区号和访问方式,等待CF卡处于ready状态,然后写读扇区命令,等待CF卡产生中断释放信号量,并等待空闲且准备就绪,再从数据寄存器中连续读取一个扇区数据,将所有扇区数据读取后,等待CF卡空闲,程序返回。本设计中数据读取使用的函数为sysInWord函数。

        (2)写数据

        与读数据类似,首先配置寄存器,设置写入的扇区数、起始扇区号和访问方式,等待CF卡处于ready状态,然后发送写扇区命令,并等待空闲且准备就绪,向数据寄存器中连续写入一个扇区数据,等待CF卡产生中断,释放信号量,将所有扇区数据写入后,等待CF卡空闲,程序返回。数据写入使用的函数为sysOutWord函数。

        4.6 创建IDE驱动程序

        VxWorks操作系统中,创建IDE驱动程序步骤分两步:初始化IDE驱动和建立IDE设备文件系统。初始化IDE驱动函数名称为ideDrv,建立IDE设备文件系统函数名称为usrIdeConfig。ideDrv函数包含三个入口参数:vector(中断向量),level(中断级别),manualConfig(1表示初始化驱动参数,0表示自动读取驱动参数)。usrIdeConfig函数包括两个入口参数:driver——CF卡驱动器号(0/1),fileName——分区名称(eg.”/ide0/”)。下面是驱动程序建立的源程序:
           
        if (ideDrv (IDE_INT_VEC, IDE_INT_VEC, type) == ERROR)

        printErr (Could not initialize.\n);

        dosFsInit (NUM_DOSFS_FILES);        /* initialize DOS-FS */

        if (usrIdeConfig (drive, fileName) == ERROR)

        ……

        5 设备访问

        设备驱动程序建立后,应用程序就可以使用基本I/O函数访问CF卡,这些函数包括:creat(),open(),read(),write()和remove()函数,方便了在嵌入式系统中存储数据文件;CF卡从系统中取下后,插入PC机就能够直接进行读取和更改。文件系统的建立也为VxWorks映像从CF卡引导(即VxWorks从CF卡加载应用程序到SDRAM执行)创造了条件。

        在VxWorks操作系统中,可以根据不同的系统要求选择不同的引导方式,例如网络引导、软盘引导、硬盘引导、USB引导等等,每种引导方式都需要设置一系列参数,这些引导参数使用一个宏定义的字符串参数DEFAULT_BOOT_LINE来表示,可以在BSP的config.h中得到其定义。从CF卡引导时,引导行定义更改如下:

        #define DEFAULT_BOOT_LINE \

        ide=0,0(0,0)host:/ide0/vxworks e=xxx.xxx.xxx.xxx h=xxx.xxx.xxx.xxx u=xxx pw=xxx

        6 结束语

        本文介绍的在VxWorks操作系统中建立CF卡IDE文件系统的方法,在实际工作中已经通过了调试和验证,能够很好的存储数据文件并从CF卡加载应用程序执行。由于系统的低功耗、高性能、高可靠性,而且,FAT32文件格式更扩展了对大容量CF卡的支持,可以插入不同容量的CF卡适用不同的需要,在嵌入式系统中具有很好的应用前景。

        本文作者创新点:首次在VxWorks操作系统下开发设计了基于PowerPC处理器芯片MPC8245的CF卡驱动程序,既可以管理FAT16格式的CF卡也可以管理FAT32格式的CF卡。


    www.ic72.com 达普IC芯片交易网
  • 行业动态
  • 市场趋势
  • 政策法规
  • 新品发布
  • Baidu

    IC快速检索:abcdefghijklmnopqrstuvwxyz0123456789
    COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
    客户服务:service@IC72.com 库存上载:IC72@IC72.com
    (北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
    京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质