標籤:style blog http io 使用 ar for strong 資料
源:http://blog.chinaunix.net/uid-20745340-id-1878732.html
單片機微控制器以其體積小、功耗低、使用方便等特點,廣泛應用於各種工業、民用的嵌入式系統中;而隨著互連網(Internet)的興起與普及,使微控制器通過互連網傳送資料就變得非常有意義。目前使微控制器上網的解決方案一般有兩種:一種是採用微控制器驅動網卡,通過乙太網路串連Internet;另一種是使微控制器直接驅動數據機(MODEM)通過電話線向ISP撥接。這兩種方案的缺點在雩都要使用有線網路,無法應用於在邊遠地區或可移動系統中。
針對這一問題,提出一種基於GPRS的單片機上網的解決方案,即在單片機中實現PPP協議,並通過驅動GPRS模組經過GPRS無線網串連到Internet實現上網。這種方案的優點在於:
①覆蓋面廣,適用於廣大偏遠地區;
②無線上網,適用於可移動目標;
③使用廉價的微控制器實現簡單、成本低;
④安裝簡便,維護方便。
GPRS技術及其特點
GPRS(General Packet Radio Service)是整合封包無線電服務的簡稱,是在GSM基礎上發展起來的一種封包交換的資料承載和傳輸方式。與原有的GSM比較,GPRS在資料業務的承載和支援上具有非常明顯的優勢:通過多個GSM時隙的複用,支援的資料轉送速率更高,理論峰值達115kb/s;不同的網路使用者共用同一組GPRS通道,但只有當某一個使用者需要發送或接收資料時才會佔用通道資源。這樣,通過多使用者的業務複用,更有效地利用無線網路通道資源,特別適合突發性、頻繁的小流量資料轉送,很好地適應資料業務的突發性特點;GPRS計費方式更加靈活,可以支援按資料流量來進行計費;與無線應用通訊協定(WAP)技術不同,GPRS能夠隨時為使用者提供透明的IP通道,可直接存取Internet中的所有網站和資源;採用通道複用技術,每一個GPRS使用者都能夠實現永遠線上;另外,GPRS還能支援在進行資料轉送的同時進行語音通話等等,而且相對於短訊息等其它無線資料通訊業務,GPRS的價格優勢比較明顯。目前,我國移動推出的GPRS上網業務最高每KB也只有3分錢,而且使用者可以根據自己的需要,以月租、包月等多種形式進一步降低GPRS通訊的費用。 因此使用GPRS實現遠端資料的傳送是非常經濟實用的,特別是對於不易架設有線網路的邊遠地區和可移動裝置。
硬體串連和GPRS模組設定
通過GPRS網進行資料轉送一般需要使用GPRS模組。目前,GPRS模組一般是指帶有GPRS功能的GSM模組,可以利用GPRS網進行資料通訊。 其中比較流行的有法國Wave公司的WISMO系列和西門子公司的S系列等等。WAVECOM的WISMO模組介面簡單、使用方便且功能非常強大。
其中GPRS模組與單片機間是通過串列口進行通訊的,通訊速率最快可以達到115 200b/s。模組與控制器間的通訊協定是AT命令集,其中大部分命令是符合協議“AT command set for GSM Mobile Equipment (ME) (GSM 07.07 version 6.4.0 Release 1997)”的,但也有一些是Wavecom自己定義的AT命令。除了串口發送(TX)、串口接收(RX)之外,微控制器與GPRS模組之間還有一些硬體握手訊號,如DTR、CTS、DCD等。 為了簡化微控制器的控制,硬體設計時不要使用全部的硬體握手訊號,而只使用資料偵測載波(Data Carrier Detect, DCD)和終端準備(Data Terminal Ready, DTR)訊號。 DCD訊號可以檢測GPRS模組是處於資料傳送狀態還是處於AT命令傳送狀態。 DTR訊號用來通知GPRS模組傳送工作已經結束。
硬體串連完成後,在進行GPRS上網操作之前,首先要對GPRS模組進行一定的設定。主要的設定工作有:
① 設定通訊傳輸速率,可以使用AT+IPR=38400命令,把傳輸速率設為38 400b/s或其它合適的傳輸速率,預設的通訊速度為9600b/s。
② 設定接入網關,通過AT+ CGD CONT="1", “IP”, “CMNET”命令設定GPRS接入網關為移動夢網。
③設定移動終端的類別,通過AT+CGCLASS=“B”設定移動終端的類別為B類,即同時監控多種業務;但只能運行一種業務,即在同一時間只能使用GPRS上網,或者使用GSM的語音通訊。
④ 測試GPRS服務是否開通,使用AT+CGACT=1,1命令啟用GPRS功能。如果返回OK,則GPRS串連成功;如果返回ERROR,則意味著GPRS失敗。這時應檢查一下SIM卡的GPRS業務是否已經開通,GPRS模組天線是否安裝正確等問題。
中國移動在GPRS與Internet網中間建立了許多相當於ISP的網關支援節點(GGSN),以串連GPRS網與外部的Internet網。GPRS模組可以通過撥“*99***1#”登入到GGSN上動態分配到Internet網的IP地址。其間GPRS模組與網關的通訊要符合點對點通訊協定 (PPP)(Point to Point Protocol, PPP),其中身分識別驗證時使用者名稱、密碼都為空白。使用PPP協議登入上之後,就可以通過GGSN接上Internet了。
軟體整體結構
程式中的所有代碼最好採用C語言編寫,並採用分層的結構,從底到上分別為:串口驅動層、GPRS模組驅動層、PPP協議層、IP協議層、UDP協議層與應用程式層。上層函數的實現需要應用到底層函數,而底層函數的任務就是為上層函數提供服務,最終完成應用程式層任務——傳送資料。
驅動程式編寫
首先是串列口驅動層。它實現開啟串口、關閉串口、讀串口資料、寫串口資料等函數。然後,在這些串口函數的基礎上編寫GPRS模組的驅動函數。單片機通過串列口控制GPRS模組,進行撥號、設定等操作。控制的方法是採用AT命令。 在控制GPRS模組撥打移動夢網GGSN的登入號碼“*99***1#”之後,GPRS模組就轉入線上模式(On-Line)。此時單片機向串列口發送的所有資料都透明地傳送給了GGSN,同樣GGSN的回答也傳回單片機的串列口。 當資料傳送完成後,單片機需要通知GPRS模組結束會話,並從線上模式轉回普通的命令模式,這可以通過置高DTR線完成。同時,如果線路由於異常斷開,CD線會回複到平常的低電平,所以處於線上模式下也要不斷檢測CD線是否處於高電平。根據這些操作,可以編寫GPRS驅動函數:初始化GPRS模組函數、撥號函數、中斷連線函數、檢測是否處於線上狀態函數。 這些底層的驅動函數將會使上層協議的編寫很方便,更重要的是,它為我們提供了一個驅動抽象層。當底層硬體做出改動的時候,只需要對底層的驅動函數進行改動,而上層函數的代碼不變。
PPP協議的實現
由於移動夢網的GGSN與GPRS模組通訊時遵循PPP協議,所以要在單片機中也實現一部分PPP協議才能與之對話。GPRS模組在撥號後首先要與GPRS網關進行通訊鏈路的協商,即協商點到點的各種鏈路參數配置。協商過程遵守LCP(Link Control Protocol)、PAP(Password Authentication Protocol)和IPCP(Internet Protocol Control Protocol)等協議。其中LCP協議用於建立、構造、測試鏈路串連;PAP協議用於處理密碼驗證部分;IPCP協議用於設定網路通訊協定環境,並分配IP地址。協商機制用有限狀態機器的模型來實現。一旦協商完成,鏈路已經建立,IP地址已經分配就可以按照協商的標準進行IP報文的傳輸了。根據應用的不同,IP報文中可以攜帶UDP報文,也可以是TCP或ICMP報文。本系統正是採用UDP報文傳送資料資訊的。資料轉送完成之後,單片機會向GGSN發送LCP的中斷連線報文,以終止網路連接。
PPP協議的幀結構(圖略)。單片機的串口中斷接收程式首先以包起始和結束符來判斷是否有完整的PPP包,並對PPP包的內容進行校正,以確定資料包的完整性和正確性。然後,在主迴圈中進入PPP報文解析模組。
登入GGSN的過程
系統的一個痛點是單片機登陸GPRS網關(GGSN)並與網關通過LCP、PAP、IPCP協議進行協商的過程。LCP、PAP與IPCP協議的幀結構大同小異,最常用的為請求(REQ)、同意(ACK)和拒絕(NAK)三種幀。單片機與GGSN各為一方進行協商,任何一方都可以發送REQ幀請求某方面的配製,另一方覺得配置不能接受會回應NAK幀,如果可以則回應ACK幀。為了節省資源,我們只處理這三種資料幀,其它鏈路問題都由單片機在程式控制下自己重新撥號解決。
協商過程大致描述如下:在撥號成功串連後,GGSN首先會返回一個PAP REQ資料幀。我們發送一個空LCP REQ幀,以強迫進行協議協商階段。隨後,GGSN發送LCP設定幀,我們拒絕所有的設定並請求驗證模式。GGSN選擇CHAP或PAP方式驗證,我們只接受PAP方式。然後,進行PAP驗證使用者名稱和密碼過程,在GPRS中使用者名稱與密碼都為空白,如果成功,GGSN會返回IPCP報文分配動態IP地址。此時,就完成了與GGSN的協商過程。協商過程的狀態轉換4所示。
協商完成後進入IP資料報通訊階段。此時,單片機向GGSN發送的所有包含IP報文的PPP報文都會被傳送給Internet網中相應的IP地址;而遠端所有向單片機IP地址發送的報文也都會經GPRS網傳送到單片機上,從而完成單片機與遠程主機通過互連網的資料轉送。
GPRS優點介紹及GPRS上網相關知識(轉)