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

基于GPRS無線通信模塊的工作原理
30基于STM32的無線通信模塊設計
8810
無線數(shù)據(jù)終端怎么使用說明及設置方法
289089基于DSP的串行通信在航空相機中的應用
1無線通信芯片、模塊廠商介紹及其產(chǎn)業(yè)鏈匯總
28484
如何使用“藍牙”技術實現(xiàn)嵌入式終端設備的開發(fā)及硬件實現(xiàn)
6無線通信模塊是什么?又有哪些?
3101無線通信模塊產(chǎn)品行業(yè)的詳細資料分析
9842無線通信模塊種類
22983無線通信模塊功能的區(qū)別 無線通信模塊應用范圍
10054物聯(lián)網(wǎng)中常見的無線通信模塊種類
6573淺談物聯(lián)網(wǎng)中常見的無線通信模塊種類
1482智能家電終端無線通信接口的設計
17短距離無線通信之藍牙模塊
4PLC與對接設備如何實現(xiàn)無線通信
7266
如何使用XBee模塊進行Arduino無線通信
5810
?無線數(shù)據(jù)終端DTU的ESD靜電放電及雷擊浪涌防護產(chǎn)品型號推薦
1293
Zigbee無線通信模塊的工作原理和作用
8597Zigbee無線通信模塊的特點和應用場景
3173智能cv5200模塊方案/無線遠距離WiFi傳輸/無線通信技術應用
0數(shù)據(jù)鏈路——無線通信
0物聯(lián)網(wǎng)無線傳輸模塊 無線通信DTU
14G蜂窩無線通信終端DTU
5安科瑞AWT100無線通信終端介紹
0藍牙、WIFI、5G、窄帶物聯(lián)網(wǎng)的無線通信技術有哪些?
2455
無線鏈路控制協(xié)議和作用
1954NBIOT無線通信模塊可以傳輸多遠?
5488無線通信模塊通過TCP/IP協(xié)議實現(xiàn)與PC端的數(shù)據(jù)傳輸
1783北斗通信指揮終端設備
1459
PLC無線通信模塊應用場景 PLC無線通信模塊使用手冊
1780PLC無線通信模塊技術參數(shù) PLC無線通信模塊故障排除
1672PLC無線通信模塊的工作原理 PLC無線通信模塊網(wǎng)絡配置
2402PLC無線通信模塊的優(yōu)缺點 PLC無線通信模塊開發(fā)板使用
1715PLC無線通信模塊安全性問題
1418基于LTE的車聯(lián)網(wǎng)無線通信技術支持直連通信的車載終端設備技術要求
0
電子發(fā)燒友App




評論