基于Nios II 的多功能数码相框的设计与实现
3 软件设计
利用SD卡控制器驱动的接口函数,在其读写的基础上应用FAT16文件系统,实现SD卡文件操作(如获取目录/文件信息、读文件、删除文件、创建文件、追加文件等)以便于与PC机及其他多媒体设备进行数据交换。设计中使用实时多任务嵌入式操作系统?滋C/OS-II,以降低系统软件设计的复杂度和提高系统的稳定性[6],并设计多个任务,实现SD卡初始化、文件读取、数据流控制。
3.1 FAT16文件系统实现
3.1.1 读文件
文件系统中文件数据的存放是以簇为单位的,而SD卡的基本读写单位是扇区,所以需要根据簇号计算相应的扇区号,由文件系统结构可得一般的计算公式为:
起始扇区号=隐藏扇区数+保留扇区数+2×FAT表占用扇区数+FDT表占用扇区数+(起始簇号-2)×每簇扇区数
从SD卡的数据扇区中读取指定文件的核心代码为:
clunum = ffdt.fst_clu; /*获取下一个簇号*/
do{
secnum = get_sta_sec(clunum); /*由起始簇号获得
起始扇区*/
clunum = fat[clunum]; /*获取下一个簇号*/
for(i=0; igbpb.sec_per_chus; i++) /*从SD卡中
读取一簇数据*/
{ret = sd_read(rsv, secnum+(UINT32)i);
…
for(j=0; j512; j++)fdata[count++] = rsv[j];}
}while(clunum != 0xFFFF);
3.1.2 长文件名支持
具有长文件名的一个文件或目录实际对应着多个目录登记项(FDT),由几个长文件名和一个别名组成。作为别名的短文件名以传统的8.3文件名格式存储在一个FDT中,其余的几个长文件名则存储在属性标志为0x0FH的FDT中。每个这种登记项中可以存储13个字符,当读取文件或目录时,操作系统会将它们重组成可以包含小写字母的长文件名[7]。实现思路为:获取文件及目录信息时,记录属性为0x0F的登记项中的内容直到出现属性为0x01或0x02的登记项,然后从之前记录的登记项内容中得出真正的文件或目录名。支持长文件名的FDT结构定义如下:
struct _longname_fdt_{
UINT8 name[2048]; /*文件名*/
UINT16 nlen; /*文件名的实际长度*/
UINT8 attr; /*属性*/
UINT8 rsvd_data[10]; /*保留数据*/
UINT16 wrt_time; /*最后更新时间*/
UINT16 wrt_date; /*最后更新日期*/
UINT16 fst_clu; /*第一簇*/
UINT32 file_size; /*文件大小*/};
typedef struct _fdt_ FDT;
3.2 μC/OS-II任务划分
在Nios II IDE集成开发环境中整合了?滋C/OS-II操作系统,集成该操作系统后,根据系统的功能和软硬件功能模块设计多个任务,各个任务间通过信号量、全局变量等方式进行通信[8]。任务调度示意图如图6所示。
TaskStart任务:优先级为0,初始化硬件设计和全局变量;创建其他任务,创建完成之后自我删除,不参与任务调度。
TaskRdMusic:优先级为2,从SD卡的音频文件夹中读取音频数据,完成一次操作后,跳转到TaskPlayMusic。
TaskPlayMusic:优先级为3,将读取的音频数据送至音频解码芯片的缓冲区内,以播放音乐。与TaskRdMusic之间通过信号量1切换。
TaskRdPhoto:优先级为1,从SD卡的图像文件夹中读取一个图像文件数据。
TaskFileHead:优先级为2,图像数据读取完成后,分析文件头,以确定图像文件格式,根据其格式将图像数据送至对应解码器。
TaskDisplay:优先级为2,向LCM_SRAM IP核发出显示命令,使SRAM中解码后的图像数据显示到LCM上。
系统上电后,首先对各个硬件模块及软件中的数据结构进行初始化。如果初始化失败(如SD卡没插入、不带有FAT16文件系统等),系统将再次进行初始化尝试;如果初始化成功,则系统按照图7进行任务调度。
系统的软硬件设计好以后,将硬件配置文件下载到FPGA,再运行软件程序可查看实际显示效果。
图7中,上方是分辨率为800×400的JPEG源图像;图7(a)为LCM上显示的效果图,该图经过缩小以适应屏幕的分辨率,此时的分辨率为320×160,居中显示,背景为黑色;图7(b)为按照屏幕尺寸缩放效果,此时分辨率为320×240;图7(c)为顺时针90°旋转后的显示效果,此时图像分辨率为120×240。
该多功能数码相框系统以Nios II软核处理器为核心,其优点是有很高的灵活性、硬件可裁剪、产品开发周期短、便于升级。在SD卡上使用FAT16文件系统,便于对音频、图像文件进行分类管理,并使多功能数码相框与PC机、数码相机等设备进行数据交换时更加方便。利用Nios II软核特性移植?滋C/OS-II操作系统,完成了各个功能模块的任务调度,提高了系统稳定性,简化了系统软件的设计。该数码相框不仅可以用于产品原型开发、直接销售,而且还可以进行定制,满足定制个性化礼品的市场需求,为多功能数码相框开辟更加广阔的市场。
- 基于Linux NFS的Web数码相框设计 (08-27)
- UCOS-II 操作系统在数码相框中的应用(03-02)
- 简易数码相框与电子书阅读器的设计(10-10)
- 基于RT-Thread和STM32的数码相框的设计方案(12-28)
- μC/GUI在基于NiosⅡ嵌入式开发平台的环境智能监控系统中的移植与应用(01-14)
- 基于Zynq的OLED驱动设计(10-04)
