关键词:数据采集与存储 便携式 Compact Flash Card TMS320LF2407
引言
目前比较常见的临床体电信号采集及处理仪器是功能完备的微机系统,虽然能较快地分析和处理监测到的体电信号,但往往只能被固定在病房里使用,在移动的情况下则显得笨重和不便。体电信号采集往往需要长时间地采集、记录海量数据,并进行进一步的信号处理和分析,以便临床病情的检测和监护。目前,临床体电仪器主要还是采用纸张、磁带及普通硬盘来存储体电信号。存储载体的体积和功耗的限制是临床医疗仪器功耗、便携式发展的瓶颈。便携的医疗设备能够极大地方便病人的使用、监护并降低医疗费用。近几年,随着Flash Memory非易失存储技术的发展以及处理器(如单片机和DSP)性能的不断提高,使信号采集存储系统的耗电量和体积不断减少,满足便携式的要求。
经过实际调研和性能比较,TI公司的C2000系列DSP芯片具有诸多优点,包括定点处理器C24X和C28X。C24X系列为16位定点处理器,运算速度为20~40MIPS,可用于低速数据采集;TMS320C28X DSP系列为32位定点处理器,运算速度高达400MIPS,可用于高速数据采集。C2000系列采用高性能的静态CMOS技术,3.3V电压供电,内核电压为1.8V,片内程序空间集成Flash,可以将系统控制程序直接烧入DSP芯片内部而不用外扩Flash存储芯片,减少系统的功耗和体积。C24X系列DSP内置2×8通道10位数据转换(ADC),转换时间约为500ns;C28X系列DSP内置2×8通道12位数模转换(ADC),转换时间为80ns。ADC的精度和速度几乎可以满足各种体电信号采集,因此系统须使用独立A/D转换芯片,进一步减少系统的功耗和体积。
Compact Flash Card(以下简称CF卡)是市场上最常见的基于Flash存储芯片的低功耗移动存储器,能与DSP芯片直接连接而用接口转换芯片。由于CF卡的高速价比、大容量和系统的易实现性,首选作为信号采集的存储载体。
下面以CF卡和DSP TMS320LF2407硬件平台为例,具体介绍这种可行的低功耗、便携式体电信号采集存储系统的搭建和软、硬件接口的实现,并给出程序实例。
1 各类基于Flash的闪存卡简介
近几年来,静态存储技术进步,诞生陈旧基于Flash存储器非易失大容量多种类型闪烁存储卡。PC(PCMCIA)、CF(CompactFlash)、SD(SecureDigital)、MMC(MultMedia)、SM(SmartMedia)、MS(Memory Stick)以及基于USB接口的闪存是如今流行的7大卡系,具有大容量和低功耗等优点。移动存储器被广泛应用于各种数码产品中,如娄码相机、媒体播放器和PDA等,同时也为低功耗、便携式体电信号的采集存储系统提供了理想的存储介质。表1为这7种流行卡系的简介与比较。
表1 7种流行卡系统比较
卡 系 | 诞生时间/年 | 体 积 | 接 口 | 目前最大容量 |
PC卡 | 1992 | 85.6mm×54.0mm×3.3mm类型I); 85.6mm×54.0mm×5.0mm类型II); 85.6mm×54.0mm×10.5mm类型III) |
68针 | 5GB |
CF卡 | 1994 | 43mm×36mm×3.3mm | 50针 | 2~3GB |
SM卡 | 1995 | 45mm×37mm×0.76mm | 22 | 128MB |
MMC卡 | 1997 | 32mm×24mm×1.4mm | 7针 | 128MB |
SD卡 | 1999 | 32mm×24mm×2.1mm | 7针 | 128MB |
MS卡 | 1997 | 50mm×21.5mm×0.28mm | 10针 | 128MB |
基于USB接口的闪存盘 | 1999 | 型号不同,体积各异 | USB接口 | 1GB |
经过详细的调研和性能比较,综合各种移动存储卡的性价比、最大容量和易实现性,笔者最终选择CF卡作为便携式体电信号采集存储系统的存量载体。CF卡容量大,最大容量可达2GB以上,完全满足长时间体电信号采集海量数据的要求;性价比高,同样容量的卡价格是其它卡系的一半;易于系统的实现,CF卡提供了完整的ATA功能,而且通过TrueIDE工作模式兼容IDE接口;耗电量低,支持在低电压(3.3V)下工作,实际工作电流为30~50mA,睡眠时仅为600μA;数据吞吐量高,5V工作时吞吐量为20MB/s,3.3V工作时为6.6MB/s;可靠性高,平均无故障工作时间100万小时。
2 CF卡的物理和硬件接口特性
CF卡可以工作在PC卡ATA I/O模式、PC卡ATA存储模式和实IDE模式三种模式下,实IDE模式与IDE接口完全歉。CF卡遵从ATA协议,属于块存储设备,存储单元是通过磁头(head)、柱面(cylinder,也称磁道)和扇区(sector)组织起来的;在物理寻址(CHS)方式下,每一组H/C/S参数唯一确定存储卡中的一个扇区,通常一个扇区拥有512字节的数据空间。一个驱动数格式化后的容量为磁头数×柱面数×扇区数×512字节。在物理寻址模式下,扇区(S)是最低的地址单位,其次是磁头(H),最后的柱面(C)为最高寻址单位。此外,还有逻辑寻址方式(LBA)。在这种寻址方式下,CF卡按照以连续序列的逻辑扇区编号进行寻址,主机不必知道CF卡的物理几何结构。使用28个数据位来表示逻辑扇区的地址,可以寻址2 28个扇区,理论上可以寻址136GB的容量。下面给出物理寻址方式与逻辑寻址方式的对应关系。设NS为每磁道扇区数,NH为磁头数,C、H、S分别表示磁盘的柱面、磁头和扇区编号,LBA表示逻辑扇区号,div为整除计算,mod为求余计算,则:LBA=NH×NS×C+NC×H+S-1;C=(LBA div NS)div NH;H=(LBA div NS)mod NH;S=(LBA mod NS)+1。
CF卡为50针接口。其中重要的信号线16根数据线、11根地址线(在TureIDE模式下仅用3根地址线)、2根寄存器组选择信号线(CS0、CS1)、数据的读写线(IORD、IOWR)、1根中断信号请求线(INTRQ和1根复位线(RESET)。
3 CF卡的软件接口和命令
CF内部控制器有多个寄存器,通过这些寄存器可以对CF卡内部的存储空间进行控制和访问。下面就实IDE模式下的寄存器组为例进行说明。
在实IDE模式下,寄存器组通过寄存器组选择信号线(CS0、CS1)和低三位地址线(A0、A1、A2)进行访问,具体功能和地址分配如表2所列。
表2 CF卡实IDE模式下寄存器组具体功能和地址分配表
CS1 | CS0 | A2 | A1 | A0 | IORD=0 | IOWR=0 | 位数/位 |
1 | 0 | 0 | 0 | 0 | 数据寄存器 | 数据寄存器 | 16 |
1 | 0 | 0 | 0 | 1 | 错误寄存器 | 特征寄存器 | 8 |
1 | 0 | 0 | 1 | 0 | 扇区数寄存器 | 扇区数寄存器 | 8 |
1 | 0 | 0 | 1 | 1 | 扇区号寄存器 | 扇区号寄存器 | 8 |
1 | 0 | 1 | 0 | 0 | 柱面号寄存器(低字节) | 柱面号寄存器(低字节) | 8 |
1 | 0 | 1 | 0 | 1 | 柱面号寄存器(高字节) | 柱面号寄存器(高字节) | 8 |
1 | 0 | 1 | 1 | 0 | 驱动器选择/磁头寄存器 | 驱动器选择/磁头寄存器 | 8 |
1 | 0 | 1 | 1 | 1 | 状态寄存器 | 命令寄存器 | 8 |
0 | 1 | 1 | 1 | 0 | 可选状态寄存器 | 设备控制寄存器 | 8 |
0 | 1 | 1 | 1 | 1 | 驱动器地址寄存器 | 保留 | 8 |
CF-ATA的基本命令有30余条,主要有数据的传输命令,包括扇区、缓冲区的读写等命令;CF卡的定义命令,包括磁道格式化、设置特征参数等命令;电源管理命令,包括检查电源管理模式、进入睡眠省电模式等命令;安全及权限的设置命令,包括CF卡安全密码的设置、安全权限的锁定与解锁等命令。每执行一条命令都要向CF-ATA的寄存器组写入参数和命令。下面以CF卡读取一扇区数据为例,说明CF-ATA命令的执行过程。
①读取CF卡状态寄存器,检测并等待当前CF卡是否空闲,若空闲,向下执行。
②填写地址寄存器块。地址寄存器块包括扇区数寄存器、扇区号寄存器、柱面号寄存器(低和高字节)、驱动器选择/磁头寄存器,选择访问的扇区地址。
③写命令寄存器,将读扇区命令写入命令寄存器(20h或21h)。
④读取CF卡状态寄存器,检测并等待CF卡的数据请求。有数据请求表示命令已被接收并处理,若长时间没有数据请求,需要进行超时处理。
⑤读数据寄存器。由于数据寄存器端口为16位,因此,读一个扇区512字节的数据仅需要连续执行256次访问数据寄存器的操作。要注意的是,在CF卡中存储的数据是低字节在前,高字节在后。在数据寄存器中,会产生高低字节颠倒的问题。
⑥检测执行结果。在执行命令后,需要查看状态寄存器的D0位。若D0位为0,则表示命令执行成功,否则表示出错。其相应的错误信息在错误寄存器中可以查出。
4 TMS320LF2407与CF卡的电路连接
TMS320LF2407是TI公司C24X系列中功能最完整、资源最丰富的控制芯片DSP,提供了多种接口的最优数字控制,有最高的代码效率。C24X是其C2000系列新代16位定点处理器产生,内核CPU为低功耗、高性能TMS320TM构架的增强设计;最优化控制多个外设;有2个事件管理模块,用于数据控制、电源转换,产生多种波形PWM;同步16通道高性能10位ADC,转换时间为500ns;支持串行异步通信接口(SCI)、串行同步外设接口(SPI)、CAN总线2.0标准接口。TMS320LF2407总寻址范围192K字,其中包括64K字程序空间,64K字数据空间,64K字I/O空间,片内程序空间集成32K字Flash,数据空间集成2.5K字RAM,包括544字DARAM(其中256字与程序空间共享),2K字SARAM。图1给出了TMS320LF2401与CF卡的一种电路连接方框图。CF卡占用TMS320LF2407的I/O空间地址,不需要任何中间接口转换芯片。
5 TI公司DSP汇编程序实例
考虑到TI公司的DSP各系列芯片汇编指令的兼容性例于跨平台移植和汇编语言代码的高效性,下面给出基于连接框图将CF卡中一扇区数据(512字节)读到TMS320LF2407片内RAM中汇编程序。READ_A_SECT:
W_CF_RDY: ;检测CF卡是否空闲
LDP #0h
IN CF_IN,CFCOM_STAT
;读状态寄存器
LALC CF_IN
AND #00FFh
XOR #0050h
BZ END_WAIT_RDY
B W_CF_RDY
END_WAIT_RDY:
SPLK #0000h,CF_OUT
OUT CF_OUT,CFERR_FEA
;写特片寄存器
SPLK #0001h,CF_OUT
OUT CF_OUT,CFSET_COU
;写扇区数寄存器
SAR AR3,CF_OUT
OUT CF_OUT,CFSEC_NO
;写扇区号寄存器
SAR AR4,CF_OUT
OUT CF_OUT,CFCYL_LOW
;写柱面号寄存器(低字节)
SAR AR5,CF_OUT
OUT CF_OUT,CFCYL_HIG
;写柱面号寄存器(高字节)
SAR AR6,CF_OUT
OUT CF_OUT,CF_CDH
;写驱动器选择/磁头寄存器
SPLK #0020h,CF_OUT
OUT CF_OUT,CFCOM_STAT
;写命令寄存器
W_CF_DRQ:;检测CF卡是否有数据请求
IN CF_IN,CFCOM_STAT
LACL CF_IN
AND #00FFh
XOR #0058h
BZ END_WAIT_DRQ
B W_CF_DRQ
END_WAIT_DRQ:
LAR AR2,#0FFh
;作256次循环读取一扇区数据(512字节)
MAR *,AR1
INLOOP:IN *+,CFDATA,AR2
;循环读取数据寄存器
BANZ INLOOP,*-,AR1
RET
程序说明:CFDATA为数据寄存器端口地址;CFCOM_STAT为状态/命令寄存器端口地址;CFERR_FEA为特征寄存器端口地址;CFSEC_COU为扇区数寄存器端口地址;CFSEC_NO为扇区号寄存器端口地址;CFCYL_LOW为柱面号寄存器(低字节)端口地址;CFCYL_HIG为柱面号寄存器(高字节)端口地址;AR1、AR3~AR6辅助寄存器为程序入口参数,其中AR1为RAM数据缓冲区的起始地址;AR3~AR6为CF卡各寄存器待赋的值;CF_IN和CF_OUT为变量。程序中没超时处理,在循环读取数据的过程中,最好禁用时间较长的中断。这是因为CF卡在15ms内没有接收到命令就会进入休眠(sleep),因此不论是读还是写扇区,在命令出后15ms内应将数据取出或填充上,否则会出错。
结语
采用TI公司的C24X、C28X系列DSP与CF卡搭建体电信号采集的硬件平台,仅使用很少的外部逻辑。整个系统可以采用低电压3.3V单一电压供电,供电电路非常简单。C24X、C28X系列DSP芯片对片内的各个模块独立供电,工作时可以屏蔽掉没有用到的模块,比如SCI、SPI、CAN总线接口等模块,减少系统的功耗。在系统软件实现上,可以采用交替式双缓存机制,将采集到的数据先存入数据缓冲区中(1扇区占512字节为易)。当数据缓冲区写满时发出溢出中断,对CF卡进行突发写操作。写操作完毕可以发送命令,使CF卡立即进入休眠状态,将功耗降至最低。这样在数据采集系统工作的大部分时间,CF卡处于休眠状态,工作电流仅为600μA。
笔者TMS320LF2407与CF卡搭建建硬平台,进行16路体电信号采集,采集频率为150Hz,CF卡容量为256MB。经实际测试,系统的功耗小于0.3W,使用3~4节干电池或1~2手机锂电池供电,可以连续工作10~20小时以上。该系统适于脑电、心电等体电信号的采集与存储工作,具有低功耗、携带方便、长时间监护、性能价格比高等特点。