關(guān)鍵詞:TS27.010 串行鏈路復(fù)用 GPRS移動終端 嵌入式Linux
隨著移動通信技術(shù)的迅速發(fā)展,具備無線通信功能的移動終端也迅速發(fā)展起來。這些移動終端支持普通的話音、短消息等業(yè)務(wù),隨著GPRS網(wǎng)絡(luò)覆蓋的迅速擴大,越來越多的手持/車載移動終端也開始支持GPRS上網(wǎng)業(yè)務(wù)。如何在一個終端設(shè)備上整合這些業(yè)務(wù),這是許多移動終端設(shè)備開發(fā)者面對的問題。筆者在開發(fā)一款車載移動終端過程中,采用了3GPP的TS 27.010協(xié)議,成功地整合了這些業(yè)務(wù)。
圖1 TS27.010協(xié)議棧組成與示意圖
1 TS27.010協(xié)議介紹
在常用的GSM/GPRS通信模塊中(如Siemens的MC35、WaveCom的Q2400等),只能通過一個普通9針的異步串口與終端設(shè)備TE(Terminal Equipment)進行通信。TE和MS?穴Mobile Station?雪需要通過這個串口交換各種類型的數(shù)據(jù),例如:語音、傳真、數(shù)據(jù)、SMS、CBS、電話號碼本的維護、電池狀態(tài)、GPRS、USSD等。如何在一個串口上同時支持這么多的業(yè)務(wù)?例如,在數(shù)據(jù)通信過程中,怎樣發(fā)送或接收SMS?為了解決這些問題,3GPP提出了一個協(xié)議——TS27.010協(xié)議(Terminal Equipment to Mobile Station Multiplexer Protocol)。有了Multiplexer,即使在數(shù)據(jù)連接過程中,也可以發(fā)送SMS。其它業(yè)務(wù)組合也可以同時進行。例如,數(shù)字語音和SMS同時發(fā)送。Multiplexer的存在使得一個完整的系統(tǒng)能夠根據(jù)需要進行劃分。
3GPP 的Multiplexer設(shè)計非常靈活,并且獨立于MS/TE平臺,已有的應(yīng)用程序不需要改動即可工作。在設(shè)計Multiplexer時,特別考慮到采用電池供電的設(shè)備的需求,所以包含了省電模式控制等很重要的功能,并且Multiplexer本身在運行時也盡量使用最小的功耗和內(nèi)存。
Multiplexer基于ISO的HDLC標(biāo)準(zhǔn)設(shè)計,工作于有多種選項的單模式下。但是Basic Option并不遵從HDLC。在基本選項模式下,Multiplexer沒有透明機制,也沒有錯誤恢復(fù)功能。但是在高級選項(Advanced Option)模式下,使用HDLC的透明機制,且Multiplexer有一個方便的再同步機制,能夠在DC1/DC3(XON/XOFF)流控打開的鏈路上工作,且包含了錯誤恢復(fù)功能。
3GPP的Multiplexer依賴于一個控制信道。在這個控制信道上,TE和MS交換控制信息,例如參數(shù)協(xié)商、節(jié)電控制信息、流控信息等。Multiplexer是一個可選項,如果支持這個功能,就應(yīng)使用AT+CMUX命令激活它。
Multiplexer為TE和MS在一個起始/停止模式的、具有分幀功能的串行鏈路上傳輸數(shù)據(jù)流提供了一套機制。圖1給出了不同的協(xié)議層及其功能示意。Multiplexer?qū)迂?fù)責(zé)將數(shù)據(jù)按字節(jié)流的方式傳輸,不再進行進一步的組幀;如果數(shù)據(jù)需要按一定結(jié)構(gòu)傳輸,就需要增加一個會聚層來完成這些功能。
Multiplexer為TE上的進程和MS上相對應(yīng)的進程提供了一條虛連接,這樣TE和MS上的進程就可以通過這條虛連接通信。例如,TE上的SMS應(yīng)用程序可以通過一條Multiplexer通道與MS上的SMS處理程序連接起來。
TS27.010規(guī)范使用8bit字符的start-stop傳輸模式,兩個Mulitplexer?qū)嶓w間的通信使用了規(guī)定的幀格式。TE和MS之間的每個信道稱為一條數(shù)據(jù)鏈路連接DLC(Data Link Connection),這些DLC被依次獨立地建立起來。每個DLC都可以有自己的流控機制。
Multiplexer有三種工作模式:Basic、Advanced without error recovery和Advanced with error recovery。這三種模式特點如下:
·Basic:長度標(biāo)識代替HDLC的透明機制;使用與HDLC不同的標(biāo)志字;不能用于具有XON/XOFF流控的鏈路;從同步丟失狀態(tài)中恢復(fù)需要更長的時間。
·Advanced without error recovery:遵從ISO/IEC13239的異步HDLC過程;可以用于具備XON/XOFF流控的鏈路上;可以更快地從失同步狀態(tài)恢復(fù)。
·Advanced with error recovery:使用了HDLC的錯誤恢復(fù)過程。
2 Wavecom GSM/GPRS模塊Multiplexing協(xié)議介紹
筆者選用了Wavecom的Q2403A,這是一款E-GSM/GPRS 900/1800的雙頻模塊。這個模塊支持大部分常用的AT命令,但不支持標(biāo)準(zhǔn)的TS27.010協(xié)議。為了能夠數(shù)據(jù)/命令復(fù)用,Wavecom定義了自己的multiplex協(xié)議。
Wavecom的復(fù)用協(xié)議允許一條串行鏈路上同時進行兩個會話(即虛連接):一個AT命令的會話和一個數(shù)據(jù)通信的會話。AT+WMUX=1將激活模塊的復(fù)用模式。在這種模式下,AT命令和數(shù)據(jù)都被封裝成數(shù)據(jù)包。通過包頭,可以區(qū)分是數(shù)據(jù)包還是AT命令包。
2.1 AT命令包格式
AT命令包幀格式如圖2所示。第一個字節(jié)(0xAA)用于標(biāo)識這是一個命令包,第二個字節(jié)是AT命令長度的低八位。第三個字節(jié)由兩部分組成:低3位是AT命令長度的高3位;高3位用于標(biāo)識一個AT命令。AT命令的最大長度可以為2047字節(jié)。校驗和?穴checksum?雪是包中所有字節(jié)(包括頭和AT命令)之和對256取模。
圖4 Linux下串行通信數(shù)據(jù)流和函數(shù)調(diào)用示意圖
2.2 數(shù)據(jù)包格式
數(shù)據(jù)包各個字段(除packet type外)意義與AT命令包相同,其幀格式如圖3所示。數(shù)據(jù)包有以下幾種類型:
·Type=0——DATA 包:這個包是發(fā)送到無線鏈路上或者從無線鏈路上接收到的數(shù)據(jù)
·Type=1——STATUS包:這個包給出了SA、SB、X和中斷條件編碼的信息。
狀態(tài)包的長度總為1字節(jié)。任何一個狀態(tài)(除了break)改變時,所有的狀態(tài)位都要發(fā)送出去。缺省情況下,所有的狀態(tài)位都是關(guān)閉的(因此DTR、RTS都是關(guān)閉的),所以在打開復(fù)用開關(guān)準(zhǔn)備傳送數(shù)據(jù)之前,一定要發(fā)送一個狀態(tài)包。
·Type=2——READY包:這個包表示發(fā)送READY包的一方可以接收數(shù)據(jù)了。包中沒有數(shù)據(jù),所以長度字段為0。
·Type=3——BUSY 包:這個包表示發(fā)送READY包的一方忙,無法接收數(shù)據(jù)。包中沒有數(shù)據(jù)。
3 Linux下串口通信系統(tǒng)的組成
要在Linux系統(tǒng)上實現(xiàn)TS27.010協(xié)議,就必須了解Linux下串口驅(qū)動軟件模塊的結(jié)構(gòu)。
圖4不但給出了Linux kernel中串口通信模塊的組成結(jié)構(gòu),還形象地表示出了數(shù)據(jù)是如何在用戶和硬件接口之間流動的(筆者使用Linux 2.4.19的內(nèi)核)。從圖4可以看到串口通信模塊可在邏輯上分為三層:TTY層、line discipline層和底層驅(qū)動層。TTY層是用戶空間和內(nèi)核空間的橋梁,用戶程序和內(nèi)核需要通過tty層交換數(shù)據(jù);Low-level driver則負(fù)責(zé)硬件的交互,它對硬件進行控制和讀寫操作;line discipline層是整個串行通信模塊中最靈活、設(shè)計最巧妙的一層,它要為一個串行口的使用定下數(shù)據(jù)交互的“規(guī)程”,在Linux內(nèi)核中已經(jīng)存在了許多line discipline,例如PPP、SLIP、TTY等。缺省使用TTY line discipline??梢愿鶕?jù)需要將line discipline替換成Linux已經(jīng)定義的line discipline結(jié)構(gòu),甚至替換為自己的line discipline結(jié)構(gòu)。
在圖4中,向硬件接口寫數(shù)據(jù)的過程是顯而易見的。但是,用戶程序從硬件讀取數(shù)據(jù)的過程卻要復(fù)雜一些,這是因為硬件與用戶空間之間沒有直接的聯(lián)系。解決的辦法就是使用緩沖技術(shù),硬件接收數(shù)據(jù)存儲于kernel buffer中,等待用戶程序請求這些數(shù)據(jù);如果用戶程序請求數(shù)據(jù)時,這個buffer是空的,那么用戶程序就會被掛起,直到buffer中有數(shù)據(jù)時,它才被喚醒。實際上,TTY相關(guān)的緩沖是由兩級構(gòu)成的:一個“常規(guī)”buffer(數(shù)據(jù)等待著line discpline取走,缺省情況下傳到用戶空間)和一個“flip”buffer(硬件驅(qū)動函數(shù)將底層進來的數(shù)據(jù)盡可能快地存入這個緩沖,而不必考慮并發(fā)存取問題,因為這個buffer是每個硬件驅(qū)動專有的)。flip buffer由兩個物理的緩沖實現(xiàn),并被交替地寫入,這樣中斷處理函數(shù)就會總有一個緩沖可用。
Linux下串口軟件的這種分層結(jié)構(gòu)雖然增加了復(fù)雜性,但是它帶來的好處是多方面的。第一,串口模塊更加靈活,在為新的串口硬件編寫驅(qū)動程序時,只需修改和增加最底層的軟件即可;第二,上層應(yīng)用程序可以根據(jù)需要改變line discipline的處理軟件,在使用PPP、SLIP等協(xié)議進行撥號連接時,都需要將原有的line discipline替換為PPP或者SLIP協(xié)議本身的line discipline?鴉第三,可以根據(jù)需要,在層與層之間加入一層自己的處理軟件。事實上,筆者在實現(xiàn)Multiplex協(xié)議時正是這樣做的。
圖5 MUX系統(tǒng)組成
4 Multiplexing協(xié)議的實現(xiàn)
4.1 協(xié)議實現(xiàn)時的考慮
在實現(xiàn)TS27.010協(xié)議時,基于以下考慮:第一,使用串口的上層應(yīng)用程序不需要改動。這一點很重要,因為系統(tǒng)中有許多用戶程序使用串口進行通信。如果需要對它們進行改動,那么由此付出的代價顯然是不值得的。在這一點上,尤其需要特別考慮PPP軟件,因為在Linux下通過GPRS上網(wǎng)必須使用PPP協(xié)議進行撥號。PPP存在于用戶空間和內(nèi)核空間兩個地方,用戶空間的pppd應(yīng)用程序完成撥號連接的管理功能;內(nèi)核空間的ppp協(xié)議軟件實現(xiàn)PPP包的組幀/分幀等核心功能。PPP定義了自己的line discipline模塊,且到此為止,往下就不再有PPP相關(guān)的軟件模塊(參看圖4的分層結(jié)構(gòu))。第二,盡可能多地實現(xiàn)TS27.010協(xié)議。雖然這個協(xié)議的內(nèi)容很豐富,但是由于Wavecom通信模塊只支持有限的幾種格式,并且?guī)^部分還略有不同。這樣實現(xiàn)起來就存在許多困難,只能在保證實現(xiàn)Wavecom復(fù)用協(xié)議并可靠工作的前提下,盡量實現(xiàn)TS27.010協(xié)議,以便于以后硬件和軟件的升級。
4.2 mux driver的實現(xiàn)方案
正是基于以上兩點考慮,決定將這個協(xié)議的實現(xiàn)放在Line discipline和Low-level driver兩層之間,參看圖5。這樣,不需要對Linux的TCP/IP協(xié)議棧軟件和PPP軟件作任何修改,就可以在復(fù)用模式下實現(xiàn)原有的無線上網(wǎng)功能。
圖5給出了MUX模塊的函數(shù)調(diào)用和數(shù)據(jù)流程。TTY Layer、line discipline和serial driver是Linux tty設(shè)備文件系統(tǒng)在內(nèi)核中已有的三層,在前一節(jié)已經(jīng)介紹。
正如筆者在實現(xiàn)TS27.010協(xié)議時所考慮的,為了不影響上層應(yīng)用程序,MUX必須支持標(biāo)準(zhǔn)的Linux系統(tǒng)調(diào)用,如write()、read()、ioctl()等。write()如果成功,則返回發(fā)送的字節(jié)數(shù);如果失敗則返回-1,并將errno(Linux系統(tǒng)下一個全局變量,用戶接口可以根據(jù)這個值判斷錯誤類型)置為合適的值。正如圖5所示,write?穴?雪并不是將數(shù)據(jù)直接發(fā)送出去,要發(fā)送的數(shù)據(jù)首先按照TS27.010協(xié)議的要求(筆者使用Wavecom模塊,它有自己的協(xié)議要求)組成MUX幀?熏然后根據(jù)數(shù)據(jù)的優(yōu)先級排隊,優(yōu)先級高的數(shù)據(jù)首先被發(fā)送。
同樣,對設(shè)備/dev/muxN(0<N<M)的標(biāo)準(zhǔn)的Linux調(diào)用read()也不是由MUX直接支持的。MUX不會知道一個用戶應(yīng)用程序何時讀設(shè)備/dev/muxN(0<N<M)。read()功能由MUX的上層(主要是TTY層)支持。MUX根據(jù)TS27.010協(xié)議(或者Wavecom協(xié)議)將物理鏈路上接收到的MUX包解封裝,然后將純數(shù)據(jù)發(fā)送到設(shè)備/dev/muxN(0<N<M)的讀緩沖區(qū)中。如果設(shè)備/dev/muxN(0<N<M)沒有足夠的讀緩沖空間,MUX就會將數(shù)據(jù)放到自己的接收緩沖區(qū)中。
4.3 Wavecom復(fù)用協(xié)議特殊情況的處理
在實現(xiàn)TS27.010協(xié)議時,考慮到Wavecom協(xié)議的特殊情況,在完全實現(xiàn)Wavecom復(fù)用功能的同時,盡可能多地實現(xiàn)TS27.010協(xié)議。由于Wavecom只能同時支持兩個虛連接,所以這里的M=2。其中,/dev/mux0用于AT命令,作為控制信息通道;/dev/mux1用于PPP連接,作為數(shù)據(jù)通道。作為Wavecom復(fù)用協(xié)議的一個嚴(yán)重缺陷,從圖2、圖3的幀結(jié)構(gòu)可以看到,從串行鏈路提交來的數(shù)據(jù)只能區(qū)分出是AT command數(shù)據(jù)還是DATA數(shù)據(jù),而無法確定鏈路的信息,即無法確定數(shù)據(jù)是mux0接收,還是mux1接收。為了解決這個問題,筆者在實現(xiàn)時,將底層提交的數(shù)據(jù)同時送給mux0和mux1(如果這兩個設(shè)備都已經(jīng)打開)。但是考慮到軟件的效率和數(shù)據(jù)的可靠性,在向上層提交數(shù)據(jù)時,有以下兩點例外:第一,mux1是PPP專用的,在PPP沒起來之前,mux1可以作為AT命令通道,但是PPP連接成功后(PPP的line discipline已經(jīng)替換掉了缺省的TTY line discipline),它將不再接收AT命令,所以此時底層提交的AT命令幀不會送給mux1?鴉第二,mux0作為AT命令通道,將不接收PPP數(shù)據(jù),所以在PPP連接成功后,不會把0x7E開始和0x7E結(jié)束(PPP的幀同步標(biāo)志字節(jié))的DATA幀發(fā)送到mux1。
GPRS網(wǎng)絡(luò)作為一種過渡性質(zhì)的2.5G網(wǎng)絡(luò),覆蓋日益廣泛。由于它的速率高、實時性好、費用低廉等諸多優(yōu)勢,日益被手持/車載等移動終端設(shè)備采用。在使用GPRS網(wǎng)絡(luò)傳輸數(shù)據(jù)的同時,這些設(shè)備也必須能支持普通的無線業(yè)務(wù),如語音、短消息等。TS 27.010協(xié)議很好地解決了這些業(yè)務(wù)的復(fù)用問題。筆者開發(fā)的這套Linux上的multiplexing軟件實現(xiàn)了這些功能,使得移動終端能夠在PPP連接不斷開的情況下,可以打出/接聽電話、發(fā)送/接收短消息。
- 數(shù)據(jù)終端(9708)
相關(guān)推薦
無線通信產(chǎn)業(yè)鏈,“贏家通吃”局面何時破?
6471無線串行通信技術(shù)總結(jié)
無線數(shù)據(jù)終端 在PLC無線通訊 項目中的應(yīng)用
無線模塊通信中的數(shù)據(jù)延遲
無線串口通信協(xié)議的相關(guān)資料分享
無線數(shù)傳模塊連接plc做無線通信
無線測控終端的供電方式與工作模式的關(guān)系
無線通信模塊
無線通信模塊
無線通信模塊
無線通信模塊
無線通信模塊
無線通信模塊行業(yè)介紹
無線通信設(shè)備測試方案
無線通信鏈路結(jié)構(gòu)及各模塊功能
無線通信的加密保護
無線通信網(wǎng)絡(luò)之LoRa技術(shù)
無線通信設(shè)計秘密:時分和頻分復(fù)用
AT命令
CC2530無線通信機制問題
InDTU311系列工業(yè)級無線數(shù)據(jù)終端產(chǎn)品規(guī)格書V3.1.7
InDTU312系列工業(yè)級無線數(shù)據(jù)終端產(chǎn)品規(guī)格書V3.1.6
PLC結(jié)合無線數(shù)傳模塊做無線通信
PLC網(wǎng)絡(luò)的無線通信方式研究圖解
WTZJ-II型機車綜合無線通信設(shè)備
ZigBee無線通信
dsp無線通信電臺的通信協(xié)議研究
lnDTU950-NR系列工業(yè)無線數(shù)據(jù)終端規(guī)格書
lora無線通信模塊技術(shù)介紹
【下載】大話無線通信
為何西門子提供的PLC無線通信方案費用高達2萬多元?
為歐姆龍PLC用戶提供的無線通信方案
為西門子PLC代理商提供的無線通信方案
低功耗工業(yè)無線通信模塊硬件設(shè)計
使用通信中的無線模塊的數(shù)據(jù)延遲
使用通信中的無線模塊的數(shù)據(jù)延遲
幾種串行通信接口標(biāo)準(zhǔn)詳解
基于AD9361和SIMULINK通信鏈路快速驗證開發(fā)平臺
基于藍牙技術(shù)的機器人模塊化無線通信設(shè)計
大話無線通信
如何區(qū)分不同種類的無線通信控制模塊?
如何在2個設(shè)備之間使用LoRa協(xié)議創(chuàng)建系統(tǒng)通信?
如何將PLC通信口與無線數(shù)據(jù)終端連接起來??
如何選擇一款距離遠(yuǎn)的無線通信模塊
如何選擇一款距離遠(yuǎn)的無線通信模塊
工業(yè)無線通信模塊種類 有哪些用處和優(yōu)勢
常見的無線通信協(xié)議有哪些
怎么實現(xiàn)基于CC2430和ZigBee2006協(xié)議棧的通信模塊設(shè)計?
替代西門子編程電纜,實現(xiàn)無線調(diào)試,無線運行程序!
畢業(yè)設(shè)計:無線數(shù)據(jù)收發(fā)系統(tǒng)的設(shè)計與實現(xiàn)
求推薦實現(xiàn)石膏板房之間無線通信
測量與控制用無線通信技術(shù)介紹及目錄
藍牙網(wǎng)關(guān):實現(xiàn)設(shè)備無線通信與安全連接的關(guān)鍵角色
觸摸屏與PLC的無線通信方案
觸摸屏與PLC的無線通信方案
觸摸屏與PLC的無線通信方案
近距離無線通信的特點和劃分
高頻無線通信RF的防護技術(shù)
遙測終端無線通信模塊
拓普瑞4G迷你DTU模塊透明傳輸TTL485 無線通訊數(shù)據(jù)GSM
點對多點的多任務(wù)無線通信
21用MC145026 27實現(xiàn)多機并口無線通信
44點對多點的多任務(wù)無線通信
15利用偽終端實現(xiàn)串行通信鏈路復(fù)用功能An Approach t
15移動無線通信的設(shè)備類型
2142移動無線通信的設(shè)備類型
1486數(shù)據(jù)終端設(shè)備與無線通信模塊之間串行通信鏈路
63ZWCOM數(shù)據(jù)終端動態(tài)連接庫使用說明書
41ZT系列ZigBee無線通信模塊用戶手冊
54無線通信應(yīng)用火爆 2013年該關(guān)注什么?

基于GPRS無線通信模塊的工作原理
29基于STM32的無線通信模塊設(shè)計
7210
無線通信芯片、模塊廠商介紹及其產(chǎn)業(yè)鏈匯總
26273
無線通信模塊是什么?又有哪些?
2089無線通信模塊種類
20358物聯(lián)網(wǎng)兄弟企業(yè),“移為通信”與“移遠(yuǎn)通信”解析
18534無線通信模塊功能的區(qū)別 無線通信模塊應(yīng)用范圍
8953什么是串行無線模塊,它的原理是怎樣的
1902物聯(lián)網(wǎng)中常見的無線通信模塊種類
5493淺談物聯(lián)網(wǎng)中常見的無線通信模塊種類
551DTU數(shù)傳無線通信模塊是什么,它的優(yōu)點是什么
4018智能家電終端無線通信接口的設(shè)計
17短距離無線通信之藍牙模塊
4PLC與對接設(shè)備如何實現(xiàn)無線通信
5666
三菱FX3UPLC如何選用無線通信模塊?
2989
?無線數(shù)據(jù)終端DTU的ESD靜電放電及雷擊浪涌防護產(chǎn)品型號推薦
493
Zigbee無線通信模塊的工作原理和作用
4299Zigbee無線通信模塊的特點和應(yīng)用場景
1324PLC與無線開關(guān)量測控終端之間Modbus通信實例
372
4G蜂窩無線通信終端DTU
5藍牙、WIFI、5G、窄帶物聯(lián)網(wǎng)的無線通信技術(shù)有哪些?
951
電子發(fā)燒友App





評論