摘 要: 简要介绍了地铁列车乘客信息系统的结构和功能,针对上海地铁部分线路的存储模块中存在的容量小和转存方式复杂等问题,提出了以USB作为通信方式的存储模块,用FAT32文件系统作为存储方式。同时对存储的过程进行了分析,介绍了存储模块的硬件和软件设计。
关键词: PIS;存储模块;USB;FAT32文件系统
0 引言
地铁是现代城市公共交通中的一种重要的运输工具,具有方便快捷、节约能源和环境污染小等优点,是重要的城市交通工具。地铁列车乘客信息系统(Passenger Information System,PIS)为乘客提供站点信息、提示信息和突发信息等,是乘客获取信息的重要途径[1]。随着电子技术的发展,地铁列车通信设备不断更新换代,一些早期的列车通信设备已经不能满足地铁列车运行的需求。在现有的一些地铁线路中,PIS的音频文件存储在闪存里,现有产品的闪存存储容量较小,编辑对应的音频文件的过程较为繁琐;在从电脑传输文件到存储器的过程中,存取速度较慢,读取过程中性能不稳定,易出现中断和误读等现象[2]。本文旨在对上述问题进行改进,设计方便稳定的解决方案。
1 地铁列车PIS
地铁列车PIS由音频系统、LED显示系统和人工播报系统等组成。地铁列车PIS接收上位机发出的信号并对该信号进行分析处理,读取存储器中对应的数据,将读出的数据进行音频播报、LED显示等。系统控制模块负责对接收的上位机信号进行处理并控制音视频信息的播放,系统控制模块控制MCU各个子模块。通信模块负责与上位机进行通信,接收上位机发出的信号,并将系统控制模块的处理结果反馈给上位机。USB接口模块进行电脑端与地铁列车PIS的数据传输,电脑端通过该模块直接对地铁列车PIS传输音视频文件和文本文件等,将文件存放在存储模块中并可对存储模块进行读取以及删除等操作。音频播放模块和屏幕显示模块接收并处理MCU模块发送的音视频文件,对音视频文件解码后进行播放[3]。系统组成如图1所示。
2 地铁列车PIS存储模块
2.1 设计方案
地铁列车PIS存储模块主要对列车播报的语音信息、视频信息和文本文件等进行存储,一般需要较大的存储容量。MCU对接收到的上位机命令进行分析处理,根据分析的结果读取存储模块对应的文件并进行播报。由于地铁线路的延伸和站点的维护等原因,存储模块的文件需要做及时更新。以上因素对存储模块的稳定性、精确性和容量等方面都提出了较高的要求。
USB存储系统具有存储速度快、容量大和系统稳定等特点,能够满足地铁列车PIS对存储模块的要求。本设计采用USB存储系统作为地铁列车存储模块的设计方案,以AT90USB1287[4]作为处理芯片,该芯片是8位微处理器,具有USB接口、128 KB的可编程Flash和4 KB的EEPROM;采用K9F4G08U0B作为NAND Flash存储芯片,该芯片具有512 MB的容量,能够满足系统存储的需要。
2.2 硬件设计
硬件设计以电脑为主机,存储模块为从机,实现USB接入主机后,主机与设备之间互相通信。AT90USB1287的USB端口既可作为主机又可作为从机,本设计将其作为从机使用。AT90USB1287包括一个64 B的控制端口、一个256 B的数据端口和5个64 B的数据端口。K9F4G08U0B的地址与数据共用同一端口,进行分时复用。在设计中,将AT90USB1287的PF端口与K9F4G08U0B的I/O端口连接,将AT90USB1287的PB端口控制K9F4G08U0B的读写等命令引脚。供电模块电压设计为3.3 V,硬件连接如图2所示。
3 软件设计
3.1 USB描述
USB2.0的存储速度可达到480 Mb/s[5],支持热插拔。USB设备包括三种类型的端口:控制端口、输入端口和输出端口。控制端口负责接收主机的请求信息,并对主机的请求信息做出相应的回答,包括对主机的setup包进行接收和反馈,控制数据的读写过程。USB设备的数据端口包括数据输入端口和数据输出端口,输入端口将从主机接收到的数据发送到缓冲器中,输出端口将缓冲器中的数据发送给主机。
主机与USB控制端口之间的命令传输采用SCSI(Small Computer System Interface)命令集。每个USB设备包括一个或多个接口,主机通过接口确定与哪个USB硬件之间进行通信。每个接口又包括一个或多个端口,端口负责数据的控制、输入和输出。
3.2 系统初始化
系统初始化主要包括AT90USB1287和K9F4G08U0B的寄存器和相关接口的设置。通过设置寄存器的值来设定芯片的工作状态。系统初始化后,可通过读取NAND Flash的地址来验证AT90USB1287与K9F4G08U0B的连接及通信是否正常。系统初始化对应程序如下:
void SystemInit()
{Clear_prescaler();
MCUCR|=0x80;//不使用JTAG接口功能,使能普通接口
MCUCR|=0x80;
uart_init();//串口用于调试
usb_device_task_init();
//AT90USB1287初始化为从机模式
NAND_flash_select();
nfc_detect();
nf_test_unit_ready();//测试NAND Flash
}
3.3 USB通信过程
3.3.1 电脑端对USB存储模块的识别
USB存储设备上电后,首先将AT90USB1287进行初始化,电脑端发送设备描述符命令、配置描述符命令、地址描述符命令和接口描述符命令等对存储模块进行识别[6]。USB设备分别对这些命令进行应答,电脑端根据设备的应答信号来判断设备的型号、容量及是否工作正常等。若设备应答正确,则识别过程完成;若设备应答不正确或无应答,主机将在一段时间之后再次发送识别命令,若进行3次尝试均无应答,则识别失败。该识别过程是通过控制端口进行的,对应的程序如下。
void usb_identification_process(void)
{U8 bmType;
U8 bmRequest;//请求描述符
bmType=Usb_read_byte();//读取缓冲区,大小为1 KB
bmRequest=Usb_read_byte();
switch(bmRequest)
{case DESCRIPTOR:
descriptor();
break;
case CONFIG://获取配置描述符
config();
break;
case ADDRESS://设置通信地址
address();
break;
case GET_INTERFACE://获取接口描述符
get_interface();
break;
case SET_INTERFACE://设置接口描述符
set_interface();
break;
}
}
3.3.2 主机和设备的数据传输
主机对USB存储设备识别之后,便开始对设备的读写过程,设备通过数据输入与输出端口与主机进行通信,主机通过发送命令块包(Command Block Wrapper,CBW)与存储设备通信,设备对接收到的CBW包进行分析,根据分析的结果进行应答,应答的结果通过状态块包(Command Status Wrapper,CSW)发送给主机,对主机发送的命令进行回应。该过程使用SCSI命令集,设计程序从CBW命令包中解析出SCSI命令,根据解析的命令做出对应的响应。主机会先后发出INQUIRY、Read Capacity和UFI Mode Sense等SCSI命令[7],若以上命令得到正确的回应,主机会继续发送READ命令和WRITE命令,对NAND Flash进行识别和内容读写等操作;若设备没有正确的回应,则存储过程失败。
3.3.3 NAND Flash文件系统的设计
主机对USB设备的操作主要包括读、写和删除等操作,这些操作需要主机能够定位到NAND Flash的相应地址上。K9F4G08U0B存储采用FAT32(File Allocation Table)文件系统,FAT32文件系统将存储区分为MBR区、DBR区、FAT1区、FAT2区、目录区和数据存储区等[8]。其中MBR(Master Boot Record)和DBR(Dos Boot Record)区为主机对存储器的操作提供信息,提供了FAT32文件系统的分区信息。FAT1区是用来表示文件在存储芯片中存储位置的存储区,FAT区是以簇为单位表示文件的大小,簇号对应相应的存储区域,设计者可以定义簇的大小。在读写文件时,主机首先根据FAT区文件占有的簇的情况进行对应数据区的读写。FAT2区为FAT1区的备份。FAT区之后为目录区,目录区存放文件的目录,目录由文件名、扩展名、文件属性、修改时间和文件长度等组成。FAT文件系统的最后一个分区即为文件的数据存储区,用以根据FAT区索引的位置存取对应的文件。
K9F4G08U0B的存储容量为512 MB,包含4 096个128 KB的块,每块包含64个2 KB的页,FAT32用32位二进制数表示一个簇[9]。主机向存储设备发送逻辑地址号,由设备将逻辑地址(Logical Block Address,LBA)转换为物理地址。
K9F4G08U0B擦除文件时为块擦除方式,即擦除时必须删除一整块的数据,故在设计删除某块一个文件的算法时,应将该块的其他文件先保存到一个公共块中,在删除该文件后,再将其他文件复制回该块。由于文件的大小不同,存储文件时可能会涉及跨块操作,在设计存储和删除文件时,应将这些情况分别进行处理。
4 结论
本文设计了以USB作为传输方式的存储模块,解决了上海地铁部分线路中存储模块存储容量小和存储速度慢等问题。USB存储模块作为地铁列车PIS的一部分,为系统性能的提高起到了重大的作用,能够满足我国地铁列车国产化的需要。
参考文献
[1] 陈冠群.地铁PIS系统安全研究[J].信息通信,2011(6):176-177.
[2] 张少锋,肖向前.广州地铁车辆数字报站器的国产化改进[J].机车电传动,2005(2):48-49.
[3] 仓青怀.地铁广播系统的集成应用[J].都市快轨交通,2010(1):99-103.
[4] AT90USB64/128 datasheet [EB/OL].(2012-08-XX)[2014-07-20]. http://www.atmel.com/Images/doc7593.pdf.
[5] 蔡磊.基于STM32F103芯片的USB接口的研究与实现[D].上海:复旦大学,2009.
[6] 杨书涛.USB接口技术与应用研究[D].济南:山东大学,2008.
[7] 褚晓滨,陆铁军,宗宇.USB接口海量存储指令分析[J].机电产品开发与创新,2008,21(3):103-105.
[8] 石晓磊.基于FAT32的保护加密U盘的软件设计[D].大连:大连理工大学,2013.
[9] 夏昀.基于FAT32文件系统的安全存储方案[D].上海:上海交通大学,2013.