Multiplexer protocol(以下簡稱MUX) 簡單一點就是多工,將原有的一條物理通道虛擬成幾條可並發的邏輯通道,同網路通訊協定中的物理鏈路,邏輯鏈路有點類似.實現上也類似,將邏輯通道上的資料打包,加上包頭包尾,再發到物理通道上.
為建立邏輯通道,發送資料的例子.其中AT+CMUX=0是物理通道上的資料,告訴GSM
MODEM(以下簡稱貓)我要進到MUX模式了,貓響應OK.主機依次發送SAMB0,1,2,3,建立編號為0~3的邏輯通道.貓響應UA表示同意. 然
後主機就可以使用邏輯通道發命令了,如的UIH(1,"ATrn"),貓也在該通道(地址為1)上響應UIH包,資料同物理通道上響應一致,也就是
OKrn.
原理上很簡單,剩下的問題就是有多少種包,包的格式...
規範07-10裡一共定義了6種包(不保括Error Recovery Mode)
Set Asynchronous Balanced Mode (SABM) command
Disconnect (DISC) command
這兩個包是命令包,用來建立,取消邏輯通道
Unnumbered Acknowledgement (UA) response
Disconnected Mode (DM) response
這兩個是響應包, 分別用來回應正確和錯誤
Unnumbered information with header check (UIH)
Unnumbered Information (UI)
這兩個可以是命令包,也可以是狀態包,區別就是前者不對包的資料部分產生校正碼.
再來看看包的格式.
07-10支援三種模式,分別是Basic,Advanced,Advance with error recovery.
其中前兩種不支援錯誤校正,這裡我們也只討論這兩種模式.
Basic模式包格式為
Flag(1B) Adderss (1B) Control(1B) Length(1~2B) Info(Length指定長度,可變)
FCS(1B) Flag(1B)
各項含義如下
Flag固定為0xF9
Adderss 邏輯通道編號,類似於MAC地址.bit1 為 E/A,bit2 為 C/R,bit3~8為邏輯通道號.
E/A 為1表示當前位元組是否是該項的最後一個位元組,這裡只能為1
C/R用來指示命令發送方是否是通道發起方,是則為1
如主機建立的邏輯通道1,往該通道上發命令包時,Adderss為0x7,貓響應Adderss也是0x7
Control
為上面說的包類型,其中bit5為P/F,大致可以這麼理解,SAMB,DISC包及其響應時,P/F為1(響應為DM時,該位可以是0或1)
Length 為Info項長度,bit定義依次為
E/A,L1,L2,...,L7,(L8,...,L15),長度小於128時,E/A為1,不編碼第二個位元組
Info 類容取決域包類型
FCS 為校正碼,UIH,UI包的區別就在這裡,UIH不對Info項編碼,只編碼Adderss,Control,Length
Advanced模式包格式為
Flag(1B) Adderss (1B) Control(1B) Info(不定長) FCS(1B) Flag(1B)
其中Flag固定為0x7E
兩種模式的區別就是Advanced模式沒有Length一項,而是採取了特定格式編碼,來決定包何時結束.
具體實現就是發包方對Flag除外其他項編碼,碰到0x7E,0x7D等字元則在其前插入0x7D,接受方去掉相應0x7D.這樣碰到單獨的0x7E則表
示包的結束和開始.