激光水下成像系统中SD存储卡应用研究

2014-11-20 08:19宾辰忠马春波康家郡
电视技术 2014年7期
关键词:存储设备扇区串口

宾辰忠,马春波,韦 磊,康家郡

(桂林电子科技大学信息与通信学院,广西桂林541004)

激光水下成像系统由于其水下运行和采集静态图像的工作特点,系统要求其存储设备应具备物理尺寸小、功耗低、设备接口简单等特点。目前基于DM642的激光水下成像系统采用的存储设备方案包括:CF存储卡、USB存储卡、IDE接口硬盘等[1-2]。这些方案虽然在数据存取速度和容量方面有一定优势,但物理尺寸较大,接口电路设计复杂,驱动程序编写难度大。

SD卡是一种基于NAND闪存技术的存储设备,以存储容量大、物理尺寸小、功耗低、接口实现简单灵活等特点被广泛应用于各种嵌入式系统中,能够满足激光水下成像系统对存储设备的需求。本文主要研究是基于DM642的激光水下成像系统,设计并实现SD卡图像存储方案,以及文件系统的移植,最终实现图像文件的存储。

1 SD卡接口设计

本文实现的激光水下成像系统采用DM642为处理核心,通过同步控制电路控制脉冲激光头与像增强CCD镜头协同工作,通过图像解码芯片将图像数据输入DM642进行处理分析,最后将结果保存至SD卡。为了实现DM642与SD卡的连接,利用DM642内部多通道缓冲串行端口(简称MCBSPn),通过配置使其工作在SPI总线模式,实现对SD卡的访问[3-4]。硬件接口方案最终选择MCBSP1端口作为SPI总线主设备与SD卡相连。具体接口电路如图1所示。

图1 DM642与SD卡的接口电路图

2 DM642实现SPI总线接口

DM642内部的MCBSP支持全双工通信,通过配置可支持多种串行通信总线规范,能够灵活地与各种串行设备连接。MCBSP内部集成了双缓冲数据寄存器,大大提高了传输的效率。

由于SPI总线的主设备负责产生时钟同步信号并发起总线传输,因此对MCBSP配置的关键是设置总线时钟产生方式,以及SPI总线信号的同步时序。MCBSP配置为SPI总线的操作时序如图2所示。总线数据在每个CLKX/SCK的上升沿采样,FSX/SS引脚连接SD卡座的片选引脚CD/DAT3,用于选通SD卡操作。DX/MOSI为数据输出引脚,DR/MISO为数据读入引脚。

图2 MCBSP总线操作时序图

对于不同的SPI总线同步时钟频率,可以通过设置采样率产生寄存器SRGR的CLKGDV位段实现。总线时钟频率计算公式为

MCBSP初始化流程为:

1)清零串口控制寄存器SPCR的XRST和RRST位,复位串口的接收发送逻辑;

2)写入串口配置参数,包括设置串口工作模式、同步时钟频率和收发数据位数等;

3)设置SPCR中的GRST位,复位串口时钟频率;

4)延时两个同步时钟周期,等待时钟输出稳定;

5)对XRST和RRST写1,设置收发逻辑退出复位状态;

6)查询RRDY和XRDY状态位是否置1,进入串口数据通信程序。

3 软件层次结构

为了降低成像系统的软件复杂度并提高后期软件的可维护性,系统软件采用层次化设计思想。软件代码分为SPI总线操作层、SD卡操作层、文件系统层和应用软件层。层次关系如图3所示。

图3 成像系统SD卡操作软件层次结构

3.1 SPI总线操作层的实现

该层软件包括MCBSP配置与SPI 总线数据收发函数。MCBSP的初始化通过构建配置结构体并调用CCS自带的CSL库函数实现[4-5]。MCBSP初始化包括设置SPI工作模式、同步时钟以及启动MCBSP端口等。

SPI总线的读写函数采用查询方式。函数先查询串口控制寄存器SPCR存器的发送就绪位XRDY,判断SPI总线前一次操作是否结束,然后将发送数据写入数据传输寄存器DXR;最后通过查询SPCR的RRDY位,并从数据接收寄存器DRR读回总线接收数据。SPI总线读写函数代码如下:

3.2 SD卡操作层的实现

SD卡工作在SPI模式下时,总线主设备使用特定命令对SD卡进行操作。SD卡的每个命令由48位数据构成,包括:命令索引、命令参数以及CRC校验等位段信息。该层软件的主要任务是构造发送SD卡命令的基本函数,以及使用此函数构建SD卡各操作的接口函数。

SD卡发送命令函数_send_command通过调用SPI总线读写函数向SD卡写入6个字节(48位)命令数据。参数cmd、arg和crc分别为命令索引、命令参数和冗余校验码。该函数关键代码如下:

SD卡的主要操作函数包括:SD卡初始化、单块数据读写和多块数据读写等函数。此处仅给出单块数据读函数的实现。根据SD卡规范,SD卡的每个块由512 byte构成,读单块数据的命令索引值为0x17。单块数据的读操作流程如图4所示。

读单块数据函数的参数依次是块地址sector、接收缓冲区地址buffer。其返回值为读操作状态结果。该函数的关键代码如下:

图4 读SD卡单块数据读操作流程

3.3 文件系统层的实现

文件系统层功能由FatFs实现。FatFs是一种开源的文件系统,具有良好的可移植性和清晰的层次结构。经过修改该文件系统可以支持SD卡、USB或ATA硬盘等存储设备[6]。FatFs包括与文件系统相关的 ff.c和 ff.h文件,与底层存储设备相关的文件diskio.c,以及配置头文件fconfig.h等。软件的移植主要工作包括:diskio.c文件的编写;数据类型的修改和配置;针对实际需要,通过配置头文件fconfig.h裁剪部分API函数,缩减代码规模。

diskio.c文件包括的接口函数有:磁盘初始化函数disk_initialize,磁盘扇区读函数disk_read,磁盘扇区写函数disk_write,磁盘辅助操作函数disk_ioctl等。这些接口函数起到连接SD卡操作层与文件系统层的作用。编写接口函数时,函数原型必须按照FatFs文档要求定义,否则将无法正常调用。

在此以磁盘扇区读函数为例介绍接口函数的实现。disk_read函数总共有4个参数,依次是磁盘驱动编号drv、数据缓冲区地址buff、扇区地址sector和读取扇区数count;函数的返回值为读取操作的状态结果。disk_read函数的功能是:按照读取文件内容的长度、扇区地址、磁盘驱动编号等信息,调用SD卡的单块数据或多块数据读函数,并将读出数据保存至指定缓冲区。函数部分代码如下:

3.4 用户测试程序

在实现以上3层软件后,需要编写用户测试程序以验证SD卡及文件系统的正确性。测试程序必须先申明文件系统及文件操作相关的结构体变量,然后按照FatFs提供的应用层接口函数对文件进行操作。将测试程序下载至成像系统硬件平台运行后,最后在PC机端读取SD卡内容验证文件操作的正确。在CCS环境下SD卡测试如图5所示。

图5 CCS环境下SD卡读写测试(截图)

4 小结

测试代码验证了本文提出的数据存取方案的正确性。通过改变MCBSP的总线时钟频率,可以提高SD卡文件存储的速度,满足成像系统的实时性要求。本文实现的SD卡接口连接方案对激光水下成像系统图像存储方案设计及实现有借鉴意义。

[1]葛卫龙,张晓晖,韩宏伟,等.基于DM642的激光水下图像处理系统设计与实现[J].红外与激光工程,2012,41(6):1641-1645.

[2]韦照川,邓力为,欧阳宁,等.一种DM642系统中的USB接口设计[J].电视技术,2011,35(15):74-77.

[3] TMS320DM642 data sheet(Rev.G)[EB/OL].[2013-03-01].http://www.ti.com.cn/product/cn/tms320dm642??247 SEM.

[4]TMS320C6000 DSP multichannel buffered serial port reference guide[EB/OL].[2013-03-01].http://www.ti.com.cn/tool/cn/sprc265.

[5] TMS320C64x DSP library programmer’s reference[EB/OL].[2013-03-01].http://www.ti.com.cn/tool/cn/sprc092.

[6] FatFs– Generic FAT file system module[EB/OL].[2013-03-19].http://elm-chan.org/fsw/ff/00index_e.html.

猜你喜欢
存储设备扇区串口
分阶段调整增加扇区通行能力策略
浅谈AB PLC串口跟RFID传感器的通讯应用
管制扇区复杂网络特性与抗毁性分析
U盘故障排除经验谈
Windows 7下USB存储设备接入痕迹的证据提取
基于Flash芯片的新型存储设备数据恢复技术研究
基于贝叶斯估计的短时空域扇区交通流量预测
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
串口技术的实物调试和虚拟仿真联合教学模式