摘 要: 簡(jiǎn)要介紹了地鐵列車(chē)乘客信息系統(tǒng)的結(jié)構(gòu)和功能,針對(duì)上海地鐵部分線(xiàn)路的存儲(chǔ)模塊中存在的容量小和轉(zhuǎn)存方式復(fù)雜等問(wèn)題,提出了以USB作為通信方式的存儲(chǔ)模塊,用FAT32文件系統(tǒng)作為存儲(chǔ)方式。同時(shí)對(duì)存儲(chǔ)的過(guò)程進(jìn)行了分析,介紹了存儲(chǔ)模塊的硬件和軟件設(shè)計(jì)。
關(guān)鍵詞: PIS;存儲(chǔ)模塊;USB;FAT32文件系統(tǒng)
0 引言
地鐵是現(xiàn)代城市公共交通中的一種重要的運(yùn)輸工具,具有方便快捷、節(jié)約能源和環(huán)境污染小等優(yōu)點(diǎn),是重要的城市交通工具。地鐵列車(chē)乘客信息系統(tǒng)(Passenger Information System,PIS)為乘客提供站點(diǎn)信息、提示信息和突發(fā)信息等,是乘客獲取信息的重要途徑[1]。隨著電子技術(shù)的發(fā)展,地鐵列車(chē)通信設(shè)備不斷更新?lián)Q代,一些早期的列車(chē)通信設(shè)備已經(jīng)不能滿(mǎn)足地鐵列車(chē)運(yùn)行的需求。在現(xiàn)有的一些地鐵線(xiàn)路中,PIS的音頻文件存儲(chǔ)在閃存里,現(xiàn)有產(chǎn)品的閃存存儲(chǔ)容量較小,編輯對(duì)應(yīng)的音頻文件的過(guò)程較為繁瑣;在從電腦傳輸文件到存儲(chǔ)器的過(guò)程中,存取速度較慢,讀取過(guò)程中性能不穩(wěn)定,易出現(xiàn)中斷和誤讀等現(xiàn)象[2]。本文旨在對(duì)上述問(wèn)題進(jìn)行改進(jìn),設(shè)計(jì)方便穩(wěn)定的解決方案。
1 地鐵列車(chē)PIS
地鐵列車(chē)PIS由音頻系統(tǒng)、LED顯示系統(tǒng)和人工播報(bào)系統(tǒng)等組成。地鐵列車(chē)PIS接收上位機(jī)發(fā)出的信號(hào)并對(duì)該信號(hào)進(jìn)行分析處理,讀取存儲(chǔ)器中對(duì)應(yīng)的數(shù)據(jù),將讀出的數(shù)據(jù)進(jìn)行音頻播報(bào)、LED顯示等。系統(tǒng)控制模塊負(fù)責(zé)對(duì)接收的上位機(jī)信號(hào)進(jìn)行處理并控制音視頻信息的播放,系統(tǒng)控制模塊控制MCU各個(gè)子模塊。通信模塊負(fù)責(zé)與上位機(jī)進(jìn)行通信,接收上位機(jī)發(fā)出的信號(hào),并將系統(tǒng)控制模塊的處理結(jié)果反饋給上位機(jī)。USB接口模塊進(jìn)行電腦端與地鐵列車(chē)PIS的數(shù)據(jù)傳輸,電腦端通過(guò)該模塊直接對(duì)地鐵列車(chē)PIS傳輸音視頻文件和文本文件等,將文件存放在存儲(chǔ)模塊中并可對(duì)存儲(chǔ)模塊進(jìn)行讀取以及刪除等操作。音頻播放模塊和屏幕顯示模塊接收并處理MCU模塊發(fā)送的音視頻文件,對(duì)音視頻文件解碼后進(jìn)行播放[3]。系統(tǒng)組成如圖1所示。
2 地鐵列車(chē)PIS存儲(chǔ)模塊
2.1 設(shè)計(jì)方案
地鐵列車(chē)PIS存儲(chǔ)模塊主要對(duì)列車(chē)播報(bào)的語(yǔ)音信息、視頻信息和文本文件等進(jìn)行存儲(chǔ),一般需要較大的存儲(chǔ)容量。MCU對(duì)接收到的上位機(jī)命令進(jìn)行分析處理,根據(jù)分析的結(jié)果讀取存儲(chǔ)模塊對(duì)應(yīng)的文件并進(jìn)行播報(bào)。由于地鐵線(xiàn)路的延伸和站點(diǎn)的維護(hù)等原因,存儲(chǔ)模塊的文件需要做及時(shí)更新。以上因素對(duì)存儲(chǔ)模塊的穩(wěn)定性、精確性和容量等方面都提出了較高的要求。
USB存儲(chǔ)系統(tǒng)具有存儲(chǔ)速度快、容量大和系統(tǒng)穩(wěn)定等特點(diǎn),能夠滿(mǎn)足地鐵列車(chē)PIS對(duì)存儲(chǔ)模塊的要求。本設(shè)計(jì)采用USB存儲(chǔ)系統(tǒng)作為地鐵列車(chē)存儲(chǔ)模塊的設(shè)計(jì)方案,以AT90USB1287[4]作為處理芯片,該芯片是8位微處理器,具有USB接口、128 KB的可編程Flash和4 KB的EEPROM;采用K9F4G08U0B作為NAND Flash存儲(chǔ)芯片,該芯片具有512 MB的容量,能夠滿(mǎn)足系統(tǒng)存儲(chǔ)的需要。
2.2 硬件設(shè)計(jì)
硬件設(shè)計(jì)以電腦為主機(jī),存儲(chǔ)模塊為從機(jī),實(shí)現(xiàn)USB接入主機(jī)后,主機(jī)與設(shè)備之間互相通信。AT90USB1287的USB端口既可作為主機(jī)又可作為從機(jī),本設(shè)計(jì)將其作為從機(jī)使用。AT90USB1287包括一個(gè)64 B的控制端口、一個(gè)256 B的數(shù)據(jù)端口和5個(gè)64 B的數(shù)據(jù)端口。K9F4G08U0B的地址與數(shù)據(jù)共用同一端口,進(jìn)行分時(shí)復(fù)用。在設(shè)計(jì)中,將AT90USB1287的PF端口與K9F4G08U0B的I/O端口連接,將AT90USB1287的PB端口控制K9F4G08U0B的讀寫(xiě)等命令引腳。供電模塊電壓設(shè)計(jì)為3.3 V,硬件連接如圖2所示。
3 軟件設(shè)計(jì)
3.1 USB描述
USB2.0的存儲(chǔ)速度可達(dá)到480 Mb/s[5],支持熱插拔。USB設(shè)備包括三種類(lèi)型的端口:控制端口、輸入端口和輸出端口。控制端口負(fù)責(zé)接收主機(jī)的請(qǐng)求信息,并對(duì)主機(jī)的請(qǐng)求信息做出相應(yīng)的回答,包括對(duì)主機(jī)的setup包進(jìn)行接收和反饋,控制數(shù)據(jù)的讀寫(xiě)過(guò)程。USB設(shè)備的數(shù)據(jù)端口包括數(shù)據(jù)輸入端口和數(shù)據(jù)輸出端口,輸入端口將從主機(jī)接收到的數(shù)據(jù)發(fā)送到緩沖器中,輸出端口將緩沖器中的數(shù)據(jù)發(fā)送給主機(jī)。
主機(jī)與USB控制端口之間的命令傳輸采用SCSI(Small Computer System Interface)命令集。每個(gè)USB設(shè)備包括一個(gè)或多個(gè)接口,主機(jī)通過(guò)接口確定與哪個(gè)USB硬件之間進(jìn)行通信。每個(gè)接口又包括一個(gè)或多個(gè)端口,端口負(fù)責(zé)數(shù)據(jù)的控制、輸入和輸出。
3.2 系統(tǒng)初始化
系統(tǒng)初始化主要包括AT90USB1287和K9F4G08U0B的寄存器和相關(guān)接口的設(shè)置。通過(guò)設(shè)置寄存器的值來(lái)設(shè)定芯片的工作狀態(tài)。系統(tǒng)初始化后,可通過(guò)讀取NAND Flash的地址來(lái)驗(yàn)證AT90USB1287與K9F4G08U0B的連接及通信是否正常。系統(tǒng)初始化對(duì)應(yīng)程序如下:
void SystemInit()
{Clear_prescaler();
MCUCR|=0x80;//不使用JTAG接口功能,使能普通接口
MCUCR|=0x80;
uart_init();//串口用于調(diào)試
usb_device_task_init();
//AT90USB1287初始化為從機(jī)模式
NAND_flash_select();
nfc_detect();
nf_test_unit_ready();//測(cè)試NAND Flash
}
3.3 USB通信過(guò)程
3.3.1 電腦端對(duì)USB存儲(chǔ)模塊的識(shí)別
USB存儲(chǔ)設(shè)備上電后,首先將AT90USB1287進(jìn)行初始化,電腦端發(fā)送設(shè)備描述符命令、配置描述符命令、地址描述符命令和接口描述符命令等對(duì)存儲(chǔ)模塊進(jìn)行識(shí)別[6]。USB設(shè)備分別對(duì)這些命令進(jìn)行應(yīng)答,電腦端根據(jù)設(shè)備的應(yīng)答信號(hào)來(lái)判斷設(shè)備的型號(hào)、容量及是否工作正常等。若設(shè)備應(yīng)答正確,則識(shí)別過(guò)程完成;若設(shè)備應(yīng)答不正確或無(wú)應(yīng)答,主機(jī)將在一段時(shí)間之后再次發(fā)送識(shí)別命令,若進(jìn)行3次嘗試均無(wú)應(yīng)答,則識(shí)別失敗。該識(shí)別過(guò)程是通過(guò)控制端口進(jìn)行的,對(duì)應(yīng)的程序如下。
void usb_identification_process(void)
{U8 bmType;
U8 bmRequest;//請(qǐng)求描述符
bmType=Usb_read_byte();//讀取緩沖區(qū),大小為1 KB
bmRequest=Usb_read_byte();
switch(bmRequest)
{case DESCRIPTOR:
descriptor();
break;
case CONFIG://獲取配置描述符
config();
break;
case ADDRESS://設(shè)置通信地址
address();
break;
case GET_INTERFACE://獲取接口描述符
get_interface();
break;
case SET_INTERFACE://設(shè)置接口描述符
set_interface();
break;
}
}
3.3.2 主機(jī)和設(shè)備的數(shù)據(jù)傳輸
主機(jī)對(duì)USB存儲(chǔ)設(shè)備識(shí)別之后,便開(kāi)始對(duì)設(shè)備的讀寫(xiě)過(guò)程,設(shè)備通過(guò)數(shù)據(jù)輸入與輸出端口與主機(jī)進(jìn)行通信,主機(jī)通過(guò)發(fā)送命令塊包(Command Block Wrapper,CBW)與存儲(chǔ)設(shè)備通信,設(shè)備對(duì)接收到的CBW包進(jìn)行分析,根據(jù)分析的結(jié)果進(jìn)行應(yīng)答,應(yīng)答的結(jié)果通過(guò)狀態(tài)塊包(Command Status Wrapper,CSW)發(fā)送給主機(jī),對(duì)主機(jī)發(fā)送的命令進(jìn)行回應(yīng)。該過(guò)程使用SCSI命令集,設(shè)計(jì)程序從CBW命令包中解析出SCSI命令,根據(jù)解析的命令做出對(duì)應(yīng)的響應(yīng)。主機(jī)會(huì)先后發(fā)出INQUIRY、Read Capacity和UFI Mode Sense等SCSI命令[7],若以上命令得到正確的回應(yīng),主機(jī)會(huì)繼續(xù)發(fā)送READ命令和WRITE命令,對(duì)NAND Flash進(jìn)行識(shí)別和內(nèi)容讀寫(xiě)等操作;若設(shè)備沒(méi)有正確的回應(yīng),則存儲(chǔ)過(guò)程失敗。
3.3.3 NAND Flash文件系統(tǒng)的設(shè)計(jì)
主機(jī)對(duì)USB設(shè)備的操作主要包括讀、寫(xiě)和刪除等操作,這些操作需要主機(jī)能夠定位到NAND Flash的相應(yīng)地址上。K9F4G08U0B存儲(chǔ)采用FAT32(File Allocation Table)文件系統(tǒng),F(xiàn)AT32文件系統(tǒng)將存儲(chǔ)區(qū)分為MBR區(qū)、DBR區(qū)、FAT1區(qū)、FAT2區(qū)、目錄區(qū)和數(shù)據(jù)存儲(chǔ)區(qū)等[8]。其中MBR(Master Boot Record)和DBR(Dos Boot Record)區(qū)為主機(jī)對(duì)存儲(chǔ)器的操作提供信息,提供了FAT32文件系統(tǒng)的分區(qū)信息。FAT1區(qū)是用來(lái)表示文件在存儲(chǔ)芯片中存儲(chǔ)位置的存儲(chǔ)區(qū),F(xiàn)AT區(qū)是以簇為單位表示文件的大小,簇號(hào)對(duì)應(yīng)相應(yīng)的存儲(chǔ)區(qū)域,設(shè)計(jì)者可以定義簇的大小。在讀寫(xiě)文件時(shí),主機(jī)首先根據(jù)FAT區(qū)文件占有的簇的情況進(jìn)行對(duì)應(yīng)數(shù)據(jù)區(qū)的讀寫(xiě)。FAT2區(qū)為FAT1區(qū)的備份。FAT區(qū)之后為目錄區(qū),目錄區(qū)存放文件的目錄,目錄由文件名、擴(kuò)展名、文件屬性、修改時(shí)間和文件長(zhǎng)度等組成。FAT文件系統(tǒng)的最后一個(gè)分區(qū)即為文件的數(shù)據(jù)存儲(chǔ)區(qū),用以根據(jù)FAT區(qū)索引的位置存取對(duì)應(yīng)的文件。
K9F4G08U0B的存儲(chǔ)容量為512 MB,包含4 096個(gè)128 KB的塊,每塊包含64個(gè)2 KB的頁(yè),F(xiàn)AT32用32位二進(jìn)制數(shù)表示一個(gè)簇[9]。主機(jī)向存儲(chǔ)設(shè)備發(fā)送邏輯地址號(hào),由設(shè)備將邏輯地址(Logical Block Address,LBA)轉(zhuǎn)換為物理地址。
K9F4G08U0B擦除文件時(shí)為塊擦除方式,即擦除時(shí)必須刪除一整塊的數(shù)據(jù),故在設(shè)計(jì)刪除某塊一個(gè)文件的算法時(shí),應(yīng)將該塊的其他文件先保存到一個(gè)公共塊中,在刪除該文件后,再將其他文件復(fù)制回該塊。由于文件的大小不同,存儲(chǔ)文件時(shí)可能會(huì)涉及跨塊操作,在設(shè)計(jì)存儲(chǔ)和刪除文件時(shí),應(yīng)將這些情況分別進(jìn)行處理。
4 結(jié)論
本文設(shè)計(jì)了以USB作為傳輸方式的存儲(chǔ)模塊,解決了上海地鐵部分線(xiàn)路中存儲(chǔ)模塊存儲(chǔ)容量小和存儲(chǔ)速度慢等問(wèn)題。USB存儲(chǔ)模塊作為地鐵列車(chē)PIS的一部分,為系統(tǒng)性能的提高起到了重大的作用,能夠滿(mǎn)足我國(guó)地鐵列車(chē)國(guó)產(chǎn)化的需要。
參考文獻(xiàn)
[1] 陳冠群.地鐵PIS系統(tǒng)安全研究[J].信息通信,2011(6):176-177.
[2] 張少鋒,肖向前.廣州地鐵車(chē)輛數(shù)字報(bào)站器的國(guó)產(chǎn)化改進(jìn)[J].機(jī)車(chē)電傳動(dòng),2005(2):48-49.
[3] 倉(cāng)青懷.地鐵廣播系統(tǒng)的集成應(yīng)用[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接口的研究與實(shí)現(xiàn)[D].上海:復(fù)旦大學(xué),2009.
[6] 楊書(shū)濤.USB接口技術(shù)與應(yīng)用研究[D].濟(jì)南:山東大學(xué),2008.
[7] 褚曉濱,陸鐵軍,宗宇.USB接口海量存儲(chǔ)指令分析[J].機(jī)電產(chǎn)品開(kāi)發(fā)與創(chuàng)新,2008,21(3):103-105.
[8] 石曉磊.基于FAT32的保護(hù)加密U盤(pán)的軟件設(shè)計(jì)[D].大連:大連理工大學(xué),2013.
[9] 夏昀.基于FAT32文件系統(tǒng)的安全存儲(chǔ)方案[D].上海:上海交通大學(xué),2013.