0710 mux協議的做用(ppp撥號時如何和gprs進行at指令交互)

ppp撥號使gprs上網的同時如何和gprs模塊進行at指令的交互,這是一個問題。linux

 

在linux中,ppp撥號上網是內核中支持的,只須要在內核配置中選上。數組

ppp撥號的方式使gprs進行上網與at指令使gprs上網,二者之間有不一樣。ppp是一個將用at指令使gprs上網的那一部分給封裝了起來。只要你將ppp成功的移植到了你的根文件系統中,那麼你使用pppd call的時候就至關於用at指令讓gprs上網了,封裝的部分,包括一部分at命令,認證等等一些列的過程。最後雙方認證經過,達成一致後,給了你的終端一個ip地址,以後你的終端就能夠經過移動基站和另外一個基站中的東西進行通訊了,也就是你的終端這時上網了。網絡

 

ppp和gprs模塊之間經過一個物理串口進行互相溝通,這裏假如這個串口是ttyS6,若是你用pppd call的方法使用了ttyS6這個串口進行撥號,使gprs模塊進行上網了。這個時候,你的串口6和應用程序中的socket是關聯的,當你在應用程序中socket通訊的時候,內核中ppp那部分就會將你的socket中的的數據經過物理串口6到達gprs模塊中,經gprs模塊將數據發送到移動基站等,最後經移動基站路由到目的地址去。這時串口6就只能做爲網絡通訊,數據鏈路的通訊,這時gprs模塊是沒法進入到at命令模式的,也就是沒法經過應用程序發AT命令與gprs進行at命令交互了,由於你的串口6和gprs之間已經做爲了網絡通訊使用,因此對at命令是不給予例會的。這時就問題大了,由於你可能會想上網的同時,就能讀取gprs中的短信內容,或者進行語音呼叫等等一些列的與gprs之間的at交互。可是由於你的惟一和gprs進行交互的串口已經作爲了數據模式,沒法進行at命令交互了。socket

 

因此這個時候,就有了一個東西,這個東西就是cmux協議(gsm0710)具體叫什麼我也不十分清楚,多路複用串口技術,許多sim卡模塊都是支持這個協議的,你可能會在sim卡的詳情中看到他支持0710 mux協議的特性。這cmux是在你的mcu或者Soc和gprs之間一個東西,它會使得你的串口變成多個,通常是三個,同時也會使得gprs模塊那邊的串口也變成多個。固然這變出來的串口都是虛擬出來的,就是用這個協議虛擬出來的串口。這虛擬出來的串口,在你這邊和gprs那邊是一一對應的,它們二者之間通訊時走的就是這個協議。函數

 

這個時候,你能夠用ppp撥號使用cmux經過串口6虛擬出來的串口,好比/dev/mux0 做爲撥號上網網絡通訊用的串口。可使用虛擬出來的/dev/mux1 串口做爲和gprs模塊之間at交互用的串口,固然這虛擬出來的串口和正常的串口是同樣進行操做的,只不過是用於gprs的。由於gprs支持這個協議。debug

 

它們通訊的原則應該是這樣的:你在應用程序中經過socket通訊時,數據走到了你撥號用的虛擬串口/dev/mux0,這個虛擬串口通過gsm0710協議,會走到物理串口6,在走到gprs模塊中,由於這個時候,你確定已經選擇gprs模塊工做在cmux下了,因此走到gprs模塊中後,也會通過這個協議,而後明白這個數據是網絡用的,而後發向網絡中;同時當你在應用程序中使用另外一個串口/dev/mux1與gprs模塊之間發AT命令,也會通過協議走到物理串口6而後到gprs中,而後通過協議進行at的命令交互。這虛擬出來的串口是分時複用的。多是10ms的時間去mux1中了,多是10ms的時間去mux0中了。調試

 

這樣就可使你ppp撥號上網的同時,也能和gprs模塊進行at命令交互了。接口

 

gsm0710協議的使用:進程

去網上尋找並下載gsm0710的協議代碼,通常四個文件就夠用了,通常都是gsm0710.c和對應的頭文件,buffer.c和對應的頭文件,有可能你下載的協議代碼沒有buffer,那麼你須要繼續去網上尋找下載。ip

 

下載下來的協議代碼,你能夠嘗試編譯生成可執行程序,而後放到arm板上去運行,你直接運行就會看到一些關於使用的幫助信息等,按照合理的參數成功運行後就能夠看到你多出來了兩個虛擬串口了,以後就可使用了,但有的時候,你可能編譯連接生成可執行程序成功了,可是你運行後並無達到你的效果,那多是你下載的這個協議代碼是上傳的人進行過改動了,你能夠總體閱讀下協議代碼,瞭解下思路,而後再下載一份,在運行試試,互相比較着進行調試。最後,你要讓這個協議代碼變成守護進程,在代碼中有一個_debug的全局變量,將它設置爲0後,就能夠成爲守護進程,會去掉調試信息,若是成爲不了守護進程,那多是別人修改致使的。

 

我對gsm0710代碼的理解的簡單過程:

/dev/modem爲你的調制解調器設備的所在,就是你的gprs模塊是和哪一個串口鏈接的,後者是usb,modem是你和gprs鏈接的真正的物理接口,串口,usb口等。

獲取你運行程序的參數並解析。

程序經過三次打開/dev/ptmx 設備文件,來建立出根據你運行應用程序時帶的參數爲前綴的0,1,2三個虛擬串口。

關於波特率的獲取,能夠在全局變量那個表示波特率的寫死,也能夠運行程序帶參數,可是有的人將協議代碼中的獲取波特率那行的代碼註釋掉了,你須要給去掉註釋,由於若是不這樣可能會致使你撥號不成功。

讓後就是關於協議內部的數據處理那塊了,我沒有細看,可是多是根據協議將數據組成數組幀了,最後經過write_fram函數寫數據幀,這個函數名可能不對,英語很差,以後你和gprs之間就經過這個協議進行通訊了

相關文章
相關標籤/搜索