CF卡在DM642基便携式数字视频系统中的应用
扫描二维码
随时随地手机看文章
0 引言
目前,数字视频系统在日常工作和生活中己得到广泛应用,如监控系统、视频电话、数字电视等,而随着技术的进步和工作生活对视频图像质量的要求越来越高,处理的数据量也越来越大,这就提出了两个新的问题:一方面要求硬件的处理能力要更快,如监控系统和视频电话系统都要求具备实时性;另一方面要求数据的存储介质容量更大而且方便携带。为了实现DSP(DigitalSignal Processing)系统的独立运行,需要有大容量的存储介质用于保存视频数据。本文中使用TI公司的高端多媒体处理芯片DM642作为图像处理芯片,其强大的计算能力、丰富的外围接口和完全可编程性,可以方便地用来开发各种图像系统。而CF卡的使用则可以弥补板载的Flash容量通常太小,SDRAM掉电后数据会丢失的缺陷。同时CF卡采用的插针式连接方式,具有相对较高的抗震性和稳定性,能够较好地满足便携式设备的要求。在视频编解码方面采用TI公司提供的MPEG一2算法,可以基本满足压缩效率和质量的要求。
1 CF卡的简介
CF卡的全称为Compact F1ash。它最先是由Sandisk公司在1994年推出的,现在已经成为一种行业标准,其内部示意图如图1所示。CF卡由两个基本部分组成:控制芯片和闪存模块。控制芯片用来实现与主机的连接及控制数据在闪存模块中的传输,而闪存模块用于存储信息。CF卡兼容3.3V和5V的工作电压,并支持多种接口访问模式。目前CF的容量可高达100GB,主流容量已达到4GB,价格也已经降到几十元左右,性价比很高。
2 DM642与CF卡的接口设计
2.1 硬件接口设计
CF卡支持三种基本的工作模式:PC Card Memory模式、PC Card I/0模式以及True IDE模式,不同的模式对应的管脚功能略有不同。在本文的设计中使用的是PCCard Memory模式,在插入CF卡之前,保证CF卡的插槽/REG管脚为高电平,即可让CF卡自动进入PC Card Memory模式。DSPs是通过外部存储器接口EMIF(External MemoryInterface)来访问片外存储器的。DM642的EMIF有CEO、CEl、CE2、CE3四个空间,各具有256MB的寻址空间。本文所述的系统设计中将CE2空间配置为CF卡的地址空间供CF卡使用,根据Memory模式的要求,CE2空间被配置为8位异步接口,此外还专门配备了一片CPLD来对CF卡进行读写控制,硬件连接如图2所示。
引脚连接说明如下:/REG信号用于选择访问普通寄存器还是属性寄存器,他和地址线A[3:0]一起完成对读写寄存器的选取。/CDl和/CD2用于检测插槽上是否有CF卡,当CF卡插入插槽后,这些管脚会被拉低。/CEl和/CE2则用来选择CF卡的数据传输宽度,本文中设计为8位宽度。为了节约IO口的资源,/CDl、/CD2、/CEl、/CE2和I/REG均连接到配置的通用IO(GPIO)口上。
TEAl3控制REG,TEAl2控制CF卡的CEl,TEAl 1控制CF卡的CE2,DSP_CE2是CE2空间的使能信号,ARE和IAWE是异步接口的读写信号,均为低电平有效,他们通过与DSP_CE2逻辑取“或”后连接到CF卡的/0E和/WE,这样在/CE2使能后就可以相应地控制CF卡的读写操作。
CF卡具有16位的数据总线,但是可以根据主控制器的数据宽度灵活配置成8位或16位,本系统中将DM642的低16位数据总线D[15:0]与CF卡的数据总线D[15:0]相连。CF卡的11位地址总线取低四位A[3:0]连接到DM642的TEA[6:3],CF卡的TEA[9:4]接地,TEAl0连接到DM642的TEA7,CSEL接地,IOWR、IORD上拉至VCC,其他未说明使用的引脚均为接地操作。
2.2 CF卡的软件接口
CF卡的读写是以扇区(sector)为基本单位的,每扇区为512字节,每次读写一个或多个连续扇区。本文中CF卡被配置为PC Card Memory模式,该模式下的寄存器地址映射如表1所示。[!--empirenews.page--]
寄存器0用于读写数据,寄存器1在读操作时是错误寄存器,存放错误信息,写的时候是特征寄存器。寄存器2用于存放读写扇区的数目。寄存器3~6用于存放读写扇区的地址。CF卡的扇区寻址有两种方式:物理寻址方式(Cylinder/Head/Sector,CHS)和逻辑寻址方式(Logical Block Addressing,LBA)。CHS是扇区对应的具体的柱面、磁头和扇区的地址,LBA的地址则在逻辑上是连续的,两种寻址方式的转换关系为:LBA地址=(柱面号×磁头数+磁头号)×扇区数+扇区号一1。本文选择LBA的线性寻址方式。
寄存器7在读和写时具有不同的意义。读操作时是状态寄存器,存放CF卡的状态信息,写的时候是命令寄存器,用于设置命令,完成相应的操作。
CF卡读写程序之前要初始化DSP和CF卡,初始化GPIO,将DM642的CE2空间设置为8位异步接口,将/REG配置为高电平,同时设置CF卡为8位数据接口。
在读写扇区时,首先要设置好起始扇区的LBA地址和要读写的扇区数目,然后再设置命令寄存器,读取数据设置为20H,写入数据设置为30H,写完后读取状态寄存器,只有当状态寄存器为“58H”时才能开始读写操作,否则继续查询状态。由于数据接口为8位,这样对一个扇区就需要读或写512次数据寄存器即可。之后还要读取状态寄存器看是否为“50H”,判断CF卡的操作是否完成,若完成,则退出本次操作,否则继续查询直至完成。
CF卡写一个扇区函数部分源码如下:
读写多个扇区的方法与此类似,设置好扇区的数目和相应的读写命令即可,一般说来直接设置循环读写比调用子程序的运行效率要高,因为它只需要读写一次扇区的起始地址即可。
2.3 CF卡的内存空间管理
本系统中CF卡上存储的是mpeg2格式的视频数据,虽然视频的长度不确定,但是扇区地址用LBA寻址的话都是4字节。在本设计中CF卡的存储空间可如下进行分配:第一个扇区存放视频的索引信息;从第二个扇区开始存放图像数据。
其中第一个扇区512个字节存放的数据格式如下:
total section为存放的总视频数据的个数,初始为0;current section则为当前要进行操作的视频的编号,初始为1;addressl为第一段视频的起始地址,初始值为0x00000002,而address2为第二段视频数据的起始地址,初始值为0,其后的数据在初始化时均设为O。
在每次系统启动时都需要首先读取第一个扇区的信息,读取的信息放在一个宽度为4字节的数组infolba里,则每段要读写的视频地址计算方式如下:currentaddress=infolba[current section],相应地在完成读写操作后要重写第一扇区,对索引信息进行更新,具体为total section、current section和下一段视频数据存放的地址。
从实用角度讲第一扇区可以存放约125段视频的首地址,可基本满足使用的要求。根据设计addressl的值恒为Ox00000002,而total section和Icurrent section又有特定的大小关系,那么Infolba的前三个数据可作为校验标志用于检测当前的CF卡空间分配是否符合要求,若不符合要求就按照初始值进行初始化。一般情况下current section=totalsection+1, 当current section小于或等于total sectiOn的时候,若进行写扇区的操作,则infolba[current section]以后的数据信息都会被覆盖或丢失索引信息,这样可以确保CF卡内存空间的重复使用。在本系统中通过外部硬件控制电路输入控制信号,可以方便地实现录像、播放、快进、快退、暂停等功能,很明显可以通过快进、快退改变current section的值来对CF卡上的视频数据进行播放或者是覆盖操作。
3 结束语
本文给出了CF卡和DM642的软、硬件接口,通过CCS2.2平台和RF5框架整合了软件工程,成功地将CF卡应用到基于DM642的便携式数字视频系统中。将程序烧写到板载flash后,可以实现上电自启动。通过多次试验和对程序的优化,系统运行良好,这说明本方案成功地解决了便携式设备要求的实时性、大容量和稳定性,具有广阔的应用前景。