冷鏈物流車載終端的串口擴(kuò)展方法研究_第1頁
冷鏈物流車載終端的串口擴(kuò)展方法研究_第2頁
冷鏈物流車載終端的串口擴(kuò)展方法研究_第3頁
冷鏈物流車載終端的串口擴(kuò)展方法研究_第4頁
冷鏈物流車載終端的串口擴(kuò)展方法研究_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、上海鯤博通信技術(shù)有限公司冷鏈物流車載終端的串口擴(kuò)展方法研究關(guān)鍵詞:冷鏈物流 北斗定位 串口擴(kuò)展文/黃偉 冷鏈物流是我國物流行業(yè)的重點(diǎn)和難點(diǎn),食品企業(yè)的物流及供應(yīng)鏈管理能力逐漸成為企業(yè)的核心競爭力,代表了交通運(yùn)輸現(xiàn)代化的發(fā)展趨勢。而隨著我國北斗衛(wèi)星導(dǎo)航的全面推廣,基于北斗衛(wèi)星導(dǎo)航的食品冷鏈物流信息監(jiān)控系統(tǒng)有著巨大的應(yīng)用前景。冷鏈物流監(jiān)控終端以嵌入式硬件平臺(tái)為基礎(chǔ),通過北斗和GPS雙模技術(shù)、無線通信和無線傳感技術(shù)的有機(jī)結(jié)合,實(shí)時(shí)獲取車輛的位置信息、車廂溫濕度狀態(tài)數(shù)據(jù),并將信息發(fā)送到遠(yuǎn)程運(yùn)營中心,實(shí)現(xiàn)了貨物在流通過程中的質(zhì)量與安全監(jiān)控問題,可以提高車隊(duì)的利用率和整體效率。本項(xiàng)目終端采用先進(jìn)的Cort

2、exA8內(nèi)核、主頻1GHz的處理器S5PV210,配合嵌入式實(shí)時(shí)操作系統(tǒng)WINCE6.0,性能和穩(wěn)定性好。同時(shí)采用北斗/GPS雙模定位技術(shù)、GPRS/3G/4G無線通信技術(shù)、溫濕度傳感器及門禁傳感器、ZigBee短距離通信等技術(shù)應(yīng)用于車載物流信息終端,實(shí)現(xiàn)冷鏈物流運(yùn)輸?shù)臒o縫實(shí)時(shí)監(jiān)控。車載終端結(jié)構(gòu)如圖1所示。SAMSUNG CPUS5PV2101GHz北斗/GPSModuleZigBee無線通信溫度傳感器濕度傳感器門禁傳感器IC讀卡ModuleGPRS/3G/4G無線通信CameraModule圖1從圖1可以看出,該車載終端串口外設(shè)較多,比如,北斗/GPS模塊、IC讀卡器、ZigBee通信模塊、

3、指紋儀等外設(shè)都通過串口與核心處理器通信,但是一般的核心處理器沒有這么多串口資源,該項(xiàng)目的S5PV210處理器只有4個(gè)UART串口,難以滿足冷鏈物流的車載終端的使用要求,所以本文提出了在WinCE系統(tǒng)下的該車載終端的串口擴(kuò)展方法。1、WinCE UART驅(qū)動(dòng)模型WinCE中的串口驅(qū)動(dòng)遵循ISO/OSI網(wǎng)絡(luò)通訊模型,通信串口屬于WinCE網(wǎng)絡(luò)模塊的一個(gè)部分,其串口驅(qū)動(dòng)的構(gòu)架如圖2所示。驅(qū)動(dòng)采用分層結(jié)構(gòu)設(shè)計(jì),上面一層稱為模型設(shè)備驅(qū)動(dòng)(Model Device Driver,簡稱MDD),MDD層向設(shè)備管理器提供標(biāo)準(zhǔn)的流設(shè)備驅(qū)動(dòng)接口,是獨(dú)立于硬件平臺(tái)的框架性的實(shí)現(xiàn);下面一層稱為平臺(tái)相關(guān)驅(qū)動(dòng)(Platf

4、orm Dependence Driver,簡稱PDD),PDD層包含特定的硬件平臺(tái)專用代碼,是與硬件平臺(tái)相關(guān)的具體實(shí)現(xiàn)。兩層驅(qū)動(dòng)通過設(shè)備驅(qū)動(dòng)服務(wù)接口(DDSI)進(jìn)行交互,串口驅(qū)動(dòng)是作為流接口驅(qū)動(dòng)來實(shí)現(xiàn)的。CPUS5PV210HardwareUARTMDD LayerPDD LayerCOM_XXXDDSI圖2下面主要描述串口驅(qū)動(dòng)的具體實(shí)現(xiàn),WinCE中串口驅(qū)動(dòng)由設(shè)備管理器Device.exe加載,MDD層是以完整的流接口函數(shù)給出的,下面介紹串口驅(qū)動(dòng)中基本流接口函數(shù)。  COM_Init是串口驅(qū)動(dòng)的初始化函數(shù),在設(shè)備管理器加載該驅(qū)動(dòng)后被首先調(diào)用,用于初始化所需的變量,硬件設(shè)

5、備等資源。分配代表設(shè)備硬件實(shí)例的數(shù)據(jù)結(jié)構(gòu),并通過硬件抽象接口初始化硬件,接著為接收串口數(shù)據(jù)創(chuàng)建相應(yīng)事件并初始化臨界區(qū),最后創(chuàng)建數(shù)據(jù)接受緩沖區(qū)。  COM_Deinit函數(shù)在驅(qū)動(dòng)卸載時(shí)被執(zhí)行,實(shí)現(xiàn)與COM_Init相反的操作。這個(gè)過程會(huì)釋放驅(qū)動(dòng)中所使用的內(nèi)存和臨界區(qū)等系統(tǒng)資源,停止接收數(shù)據(jù)線程的執(zhí)行等操作。COM_Oepn函數(shù)在串口被打開時(shí)調(diào)用,首先為打開設(shè)備的結(jié)構(gòu)體分配空間并初始化,檢查設(shè)備句柄是否有效,加載數(shù)據(jù)中斷服務(wù)線程,最后調(diào)用PDD層函數(shù)對硬件進(jìn)行初始化。COM_Close函數(shù)是釋放COM_Open所分配的系統(tǒng)資源,停止在COM_Open中創(chuàng)建的相關(guān)線程和一些避免線

6、程競爭的處理,恢復(fù)驅(qū)動(dòng)狀態(tài)。COM_Read函數(shù)是從串口獲取所接收到的數(shù)據(jù),該函數(shù)有三個(gè)參數(shù),第一個(gè)參數(shù)是COM_Oepn打開的設(shè)備句柄,后兩個(gè)參數(shù)與文件系統(tǒng)的使用方法完全一樣,一個(gè)是接受緩沖指針,另一個(gè)是長度。首先進(jìn)行參數(shù)檢查,包括對存取權(quán)限,計(jì)算超時(shí)時(shí)間。如果設(shè)定了超時(shí)讀取動(dòng)作會(huì)在超時(shí)后返回,然后就是對數(shù)據(jù)緩沖區(qū)進(jìn)行讀取的操作。  COM_Write是與COM_Read相對應(yīng)的寫串口操作。首先檢查參數(shù)的合法性,然后進(jìn)入臨界區(qū)(保障多線程下的獨(dú)占)設(shè)置寫數(shù)據(jù)的目標(biāo)地址和長度,等待數(shù)據(jù)發(fā)送完成事件后開始新的數(shù)據(jù)發(fā)送。最后,需要處理數(shù)據(jù)異常情況,如果使用了硬件流控制還要在這里

7、清除發(fā)送請求信號(hào),然后通知發(fā)送數(shù)據(jù)操作結(jié)束。  COM_PowerUp和COM_PowerDown操作,這兩個(gè)函數(shù)的調(diào)用都由WinCE的電源管理事件來觸發(fā),驅(qū)動(dòng)的MDD層并沒有對這兩個(gè)函數(shù)進(jìn)行處理,具體設(shè)備上電及下電操作,以及驅(qū)動(dòng)的狀態(tài)恢復(fù)等操作都由PDD層來完成。 COM_IOControl函數(shù)用于向設(shè)備發(fā)送控制命令。包括驅(qū)動(dòng)的電源管理,串口通訊的參數(shù)設(shè)置,讀寫串口的同步事件等,具體操作都由PDD層完成功能。 2、軟件虛擬UART串口的實(shí)現(xiàn)北斗定位技術(shù)應(yīng)用于冷鏈物流運(yùn)輸行業(yè),可以獲取物流運(yùn)輸車輛的位置以及速度信息,將這些信息上傳至遠(yuǎn)程的運(yùn)營中心,可以實(shí)現(xiàn)車輛和貨

8、物的追蹤以及監(jiān)控管理。另外,由于車載終端配合第三方的導(dǎo)航軟件,可以實(shí)現(xiàn)道路導(dǎo)航,物流車輛可以按照固定線路運(yùn)行,或者根據(jù)導(dǎo)航軟件規(guī)劃的最優(yōu)路徑運(yùn)行,可以提高物流運(yùn)輸?shù)男省5?,串口是?dú)占設(shè)備,同一時(shí)間只能由一個(gè)應(yīng)用功能使用,為了滿足本項(xiàng)目的使用需要,讓物流車輛監(jiān)控和道路導(dǎo)航能同時(shí)進(jìn)行,本文提出了一種軟件虛擬串口的實(shí)現(xiàn)方法,軟件框架如圖3所示。車載導(dǎo)航軟件虛擬串口車輛位置監(jiān)控終端物理串口北斗/GPS雙模數(shù)據(jù):經(jīng)緯度、速度、時(shí)間圖3虛擬串口采用標(biāo)準(zhǔn)的流接口驅(qū)動(dòng)模型,MDD層是兩個(gè)虛擬串口驅(qū)動(dòng)的標(biāo)準(zhǔn)實(shí)現(xiàn),為兩個(gè)虛擬串口初始化并分別分配數(shù)據(jù)接收緩沖區(qū);PDD層采用與北斗模塊通信的物理串口,將獲取的北斗

9、數(shù)據(jù)分別放在虛擬串口的數(shù)據(jù)緩沖區(qū)中,兩個(gè)虛擬串口可以分別獲取北斗數(shù)據(jù)給上層應(yīng)用程序使用。虛擬串口的實(shí)現(xiàn)中主要的數(shù)據(jù)結(jié)構(gòu)體定義如下:typedef struct tVirtual_PortDWORD com_number;BOOL com_open_flag;MyCircleBuffer *buffer;CRITICAL_SECTION g_csOpen;CRITICAL_SECTION g_csWrite;CRITICAL_SECTION g_csRead; Virtual_Port, *PVirtal_Port;該結(jié)構(gòu)體定義中,com_number表示和北斗模塊通信的物理串口號(hào);com_op

10、en_flag表示該物理串口是否已經(jīng)打開,由于兩個(gè)虛擬串口初始化時(shí)都會(huì)打開物理串口的操作,所以該變量防止物理串口被多次打開;MyCircleBuffer是接受數(shù)據(jù)的循環(huán)緩沖區(qū),每個(gè)虛擬串口分配一個(gè)2K字節(jié)的緩沖區(qū),將北斗模塊的數(shù)據(jù)存在緩沖區(qū)中,由應(yīng)用程序來獲取使用;g_csOpen、g_csWrite和g_csRead是臨界區(qū)變量,起到保護(hù)物理串口的打開以及讀寫操作,兩個(gè)虛擬串口操作同一個(gè)物理串口,需要互斥操作,否則會(huì)發(fā)生數(shù)據(jù)沖突,導(dǎo)致數(shù)據(jù)通信異常。虛擬串口的COM_Init函數(shù)會(huì)初始化上述的結(jié)構(gòu)體變量,申請內(nèi)存資源,創(chuàng)建接收數(shù)據(jù)的通知事件;COM_Oepn函數(shù)中會(huì)打開和北斗模塊連接的物理串口

11、,同時(shí)創(chuàng)建物理串口的數(shù)據(jù)接收線程,將接收到的北斗數(shù)據(jù)存放于循環(huán)緩沖區(qū)中;COM_IOControl函數(shù)實(shí)現(xiàn)串口的電源管理,同時(shí)實(shí)現(xiàn)接收虛擬串口數(shù)據(jù)的事件,通知應(yīng)用層北斗數(shù)據(jù)可以獲??;COM_Read函數(shù)實(shí)現(xiàn)應(yīng)用層讀數(shù)據(jù)的操作,從循環(huán)緩沖區(qū)中將北斗數(shù)據(jù)讀到應(yīng)用層處理;COM_Write函數(shù)實(shí)現(xiàn)從應(yīng)用層的數(shù)據(jù)通過物理串口寫到北斗通信模塊中,可以對模塊進(jìn)行信息設(shè)置。3、物理UART串口的擴(kuò)展3.1 VK3224芯片介紹本項(xiàng)目采用VK3224芯片來實(shí)現(xiàn)物理UART串口的擴(kuò)展,該芯片是SPI接口的4通道UART器件,實(shí)現(xiàn)SPI橋接/擴(kuò)展4個(gè)串口的功能。該芯片廣泛適用于多串口服務(wù)器,多串口卡,工業(yè)自動(dòng)化R

12、S-485控制,車載信息平臺(tái),遠(yuǎn)傳自動(dòng)抄表系統(tǒng)等領(lǐng)域。擴(kuò)展的子通道的UART具備如下功能特點(diǎn): 每個(gè)子通道UART的波特率、字長、校驗(yàn)格式可以獨(dú)立設(shè)置,最高可以提供1Mbps的通信速率。每個(gè)子通道可以獨(dú)立設(shè)置工作在IrDA紅外通信、RS-485及其9位網(wǎng)絡(luò)地址自動(dòng)識(shí)別、軟件/硬件自動(dòng)流量控制、廣播接收等高級(jí)工作模式下。每個(gè)子通道具備收/發(fā)獨(dú)立的16 BYTE數(shù)據(jù)緩沖區(qū),F(xiàn)IFO的中斷為4級(jí)可編程條件觸發(fā)點(diǎn)。VK3224采用SOP20綠色環(huán)保的無鉛封裝,可以工作在2.55.5V的寬工作電壓范圍,具備可配置自動(dòng)休眠/喚醒功能。3.2 VK3224的軟件實(shí)現(xiàn)在本項(xiàng)目中,VK3224工作在SPI同步串

13、行通信的從機(jī)模式下,為實(shí)現(xiàn)與主處理器S5PV210的通信,在主處理器端需要設(shè)置CPOL=0(SPI時(shí)鐘極性選擇位),CPHA=0( SPI時(shí)鐘相位選擇位),VK3224和S5PV210之間通過數(shù)據(jù)輸入/輸出信號(hào)(SDIN,SDOUT),時(shí)鐘信號(hào)(SCLK),片選信號(hào)(SCS)以及中斷信號(hào)(IRQ)連接,如圖4所示。SPIControllerS5PV210SDINSDOUTSCLK RX SCS TXIRQVK3224圖4S5PV210工作在SPI主模式,發(fā)送數(shù)據(jù)時(shí),首先,通過片選信號(hào)選中VK3224,然后S5PV210產(chǎn)生時(shí)鐘將數(shù)據(jù)發(fā)送到VK3224端,VK3224根據(jù)制定的UART串口號(hào),將

14、數(shù)據(jù)發(fā)送至外設(shè);S5PV210接收數(shù)據(jù)時(shí),VK3224從外設(shè)的UART串口接收到數(shù)據(jù)后,首先產(chǎn)生中斷信號(hào)通知主機(jī),然后S5PV210產(chǎn)生時(shí)鐘通過數(shù)據(jù)輸入信號(hào)將數(shù)據(jù)讀取。VK3224有兩級(jí)中斷:子串口,全局中斷。當(dāng)IRQ引腳指示有中斷時(shí),可以通過讀取全局中斷寄存器以判斷當(dāng)前中斷的類型,然后去讀取相應(yīng)的中斷狀態(tài)寄存器,以確定當(dāng)前的中斷源。VK3224的每個(gè)子串口都有獨(dú)立的中斷系統(tǒng),包括:FIFO數(shù)據(jù)錯(cuò)誤中斷,接收地址中斷(RS485模式),XOFF發(fā)送中斷,發(fā)送FIFO觸發(fā)點(diǎn)中斷,接收FIFO觸發(fā)點(diǎn)中斷。當(dāng)任意一個(gè)中斷使能后,滿足中斷條件就會(huì)產(chǎn)生相應(yīng)的中斷。3.3 SPI擴(kuò)展UART的實(shí)現(xiàn)本項(xiàng)目的

15、主處理器三星S5PV210有4個(gè)UART串口,本文通過SPI接口連接VK3224芯片額外再擴(kuò)展4路UART串口。圖5所示為S5PV210處理器自帶串口的驅(qū)動(dòng)模型,串口驅(qū)動(dòng)采用標(biāo)準(zhǔn)的串口類,Wince驅(qū)動(dòng)層提供流接口函數(shù)COM_XXX,鏈路層通過UART控制器提供UART串口,驅(qū)動(dòng)的實(shí)現(xiàn)如本文第一章內(nèi)容所介紹。CPUS5PV210UARTControllerUART DriverWINCECOM_XXXUART1UART2UART3圖5在上圖所示的串口驅(qū)動(dòng)構(gòu)架上,我們提出了UART串口擴(kuò)展的方案,新的驅(qū)動(dòng)構(gòu)架如圖6所示。新的驅(qū)動(dòng)構(gòu)架上,WINCE驅(qū)動(dòng)層依然采用標(biāo)準(zhǔn)的串口類,提供標(biāo)準(zhǔn)流接口函數(shù)。鏈

16、路層分成兩部分,第一部分采用UART控制器提供多個(gè)UART串口,和圖5所示驅(qū)動(dòng)模型一樣;第二部分采用SPI擴(kuò)展的方式,通過SPI控制器和UART擴(kuò)展芯片VK3224連接,數(shù)據(jù)通過SPI傳輸給VK3224,然后VK3224根據(jù)數(shù)據(jù)傳輸?shù)膮f(xié)議,將數(shù)據(jù)分發(fā)給不同的外擴(kuò)串口。本文主要介紹通過SPI外擴(kuò)串口的驅(qū)動(dòng)實(shí)現(xiàn),4個(gè)外擴(kuò)串口共享一套驅(qū)動(dòng),提供標(biāo)準(zhǔn)的流接口函數(shù)。在COM_Init函數(shù)中,首先通過注冊表獲取當(dāng)前的串口號(hào)并記錄在結(jié)構(gòu)體變量中,初始化該串口的讀、寫操作同步信號(hào)量,接著創(chuàng)建當(dāng)前串口的接收循環(huán)緩沖區(qū),然后初始化SPI控制器,配置SPI的主從傳輸模式,以及SPI傳輸時(shí)鐘及數(shù)據(jù)格式,最后初始化外部

17、接收中斷,創(chuàng)建SPI接收數(shù)據(jù)線程,有數(shù)據(jù)接收時(shí),VK3224會(huì)中斷CPU啟動(dòng)接收。CPUS5PV210UARTControllerUART DriverWINCECOM_XXXUART1UART2UART3SPI à UARTVK3224UART4UART5UART6圖6串口數(shù)據(jù)的接收流程主要是COM_Read函數(shù),從接收循環(huán)緩沖區(qū)中取數(shù)據(jù)。當(dāng)外部UART有數(shù)據(jù)要接收時(shí),首先VK3224會(huì)通過中斷IO通知主處理器S5PV210,主處理器接收線程先產(chǎn)生SPI時(shí)鐘信號(hào)從VK3224開始讀取數(shù)據(jù),由于多個(gè)外擴(kuò)串口共享一個(gè)接收數(shù)據(jù)線程,所以接收數(shù)據(jù)需要解析,然后放入對應(yīng)串口的接收緩沖區(qū),同時(shí)

18、通過同步信號(hào)通知上層應(yīng)用可以調(diào)用COM_Read讀取數(shù)據(jù)。接收線程繼續(xù)下一幀數(shù)據(jù)的處理。串口數(shù)據(jù)的發(fā)送流程主要是COM_Write函數(shù),應(yīng)用程序?qū)⒋谔?hào)、數(shù)據(jù)內(nèi)容和長度傳遞給COM_Write函數(shù),驅(qū)動(dòng)層將數(shù)據(jù)體按照協(xié)議的格式封裝,啟動(dòng)SPI將數(shù)據(jù)發(fā)送給VK3224,VK3224接收到數(shù)據(jù)后,解析出當(dāng)前數(shù)據(jù)的串口號(hào),將數(shù)據(jù)發(fā)送給對應(yīng)的外擴(kuò)UART串口。此外,比較重要的還有COM_IOControl函數(shù),此函數(shù)主要配置VK3224的外部串口的通信格式,比如IOCTL_SERIAL_SET_DCB控制命令,該命令初始化串口外部串口讀寫的參數(shù),應(yīng)用程序調(diào)用該命令后,驅(qū)動(dòng)層將參數(shù)數(shù)據(jù)通過協(xié)議格式封裝,然后啟動(dòng)SPI將數(shù)據(jù)發(fā)送給VK3224,VK3224解析出數(shù)據(jù)的串口號(hào)、通信波特率、數(shù)據(jù)校驗(yàn)位以及停止

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論