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則表示包的結束和開始.