微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于DSP视频系统的CF卡FAT文件系统设计与实现

基于DSP视频系统的CF卡FAT文件系统设计与实现

时间:08-15 来源:互联网 点击:

摘要:设计并实现了基于DSP视频处理系统的CF卡FAT文件系统。该系统能在DM642平台上,以CF卡为存储介质对视频数据进行实时存储,存储格式为FAT16文件系统;并与PC机兼容通过PC机对写入CF卡的视频文件进行各种基本操作。
关键词:DSP视频系统;CF卡;FAT16文件系统;实时存储

0 引言
随着DSP系统在视频处理领域中越来越广泛的应用,其应用功能也在拓展。视频存储是DSP系统中不可或缺的功能,如何对经过处理后的视频数据进行灵活的存储是目前DSP系统应用开发领域面临的问题之一。
在存储介质的选择中,CF卡以其容量大、功耗低、体积小等优点成为目前主流的存储介质之一,被广泛应用于数据采集等领域。为了能方便地在CF卡上进行数据存储,需要在DSP系统中设计CF卡上的FAT文件系统。当DSP系统应用于视频处理时,视频处理是以帧为单位的,需要对每帧数据进行实时存储。这就要求更复杂的FAT文件系统设计。
本文在DM642视频处理系统上,以CCS为开发平台,对经过压缩后的视频数据利用线程间SCOM通信,实时地存储到CF卡中,存储格式采用FAT16文件系统,并实现与PC机操作的兼容。

1 DSP视频系统CF卡FAT文件系统设计
1.1 DSP系统模块框架
本文所涉及到的DSP视频处理系统的框架示意图如图1所示。

摄像头采集视频,通过DS进行各种处理,压缩编码后,存储到CF卡中。系统软件构架包括视频采集线程、视频处理线程、视频压缩编码线程、CF卡读/写线程、视频压缩解码线程、视频显示线程。
1.2 FAT文件系统
FAT16文件系统包括DBR(DOS BOOT RECORD)扇区、FAT表和FAT表备份、根目录和数据区。DBK扇区是引导记录区,占用分区的第0个扇区,512个字节。根目录用于存储文件的目录项。FAT文件系统在存储文件时将数据区以簇为单位划分,簇大小由数据区大小决定。文件在数据区的存储情况都会在FAT表中体现出来。FAT表偏移位置对应了数据区中的所有簇的序号,起始簇号是2。若一个文件占用了若干个簇,被占用的簇的序号对应的FAT表的位置会做出相应的标识。
1.3 SCOM通信
SCOM通信是RF5结构中线程之间数据通信的方式。RF5结构包含了四个处理部件:标准算法、单元、通道、和线程。这四个部件位于不同的层次,处理部件之间可以进行数据的通信。RF5中的数据通信包括线程级通信和单元级通信。其通信机理为使用结构体进行信息传递。
线程级通信中就利用SCOM通信来实现,即发送SCOM消息。SCOM消息是用户定义的一个数据结构,用于任务之间交换信息。为实现信息传递,某个任务申请一定大小的数据缓冲区,以供其他任务读/写数据。
1.4 FAT16文件系统设计
针对图1中DSP视频处理系统系统,本文设计了基本的文件操作:

格式化分为以下几个步骤:
(1)写DBR扇区。将DBR扇区设在CF卡的起始位置。在DBR扇区中的内容如表1所示。

在BPB块中,有两个比较重要的字段,每簇扇区数m和每FAT扇区数n,偏移位置分别为0x0D和0x16。这两个字段由CF卡的容量所决定的。本文中的CF卡容量为2G,m为128,n为128。
(2)初始化FAT表和FAT2表。FAT表的起始标识符是0xFFF8,在格式化后,其对应各个簇号的有效内容都为0,FAT2表作相同的处理。
(3)初始化根目录表。只需全部写入0。
初始化成功后,返回值为0,否则为-1。
FAT_getfileinfo函数用于获取文件的目录项,参数是文件名和指向目录项的指针。执行此函数,第二个参数pfdt指向的结构体存放文件对应的目录项。若文件名存在,函数返回目录项在根目录表的索引位置,若不存在或已删除,返回-1。
FAT_creat函数用于创建新文件,参数是文件名。首先调用FAT_getfileinfo函数,如果返回值不为-1,报错返回0;申请目录项空间,如果查找的范围超出了根目录表,报错返回;申请成功后,对新建目录项进行初始化。
FAT_read函数用于读取CF卡中的视频文件,参数为文件名。读取文件时系统的有效线程有CF卡读线程、解码线程、显示线程。所以利用SCOM进行线程间通信时,不需要考虑CF卡的读线程的上游线程同步,向压缩编码线程发送NULL消息即可。
视频数据在线程之间的传递是以帧为单位的,所以在进行读文件时也是按帧读取。而在FAT文件系统中,文件在数据区的存储又是按簇进行的,所以需要对视频数据的存储情况进行考虑。
经过压缩的图像帧包括帧头信息和帧数据。帧头信息包括帧大小和对应的时间信息,占用一个扇区。图像帧的存储有图2所示几种情况。
图2(a)表示帧在簇内存储;图2(b)表示帧在簇内,但是帧尾也是簇尾;图2(c)表示帧跨簇存储,只有部分帧数据在下一簇;图2(d)表示图像帧跨簇存储且只有帧头在本簇。对这三种情况,要做不同的处理。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top