天天看點

STM32-GPRS子產品連接配接系統主站

目錄: 一、GPRS基礎講解(GSM/CDMA/GPRS介紹) 1、通信專業術語 2、GPRS網絡結構 3、GPRS工作原理 4、GPRS協定模型 5、GPRS連接配接過程詳解 1)MS(移動台)附着   2)PDP激活 6、GPRS的應用---TCP/IP/PPP 7、GPRS相關AT指令集 1)GPRS指令   2)TCP/IP指令   3)多路TCP/IP連接配接指令 二、GPRS或CDMA子產品與網絡連接配接方式 三、系統主站通路GPRS/CDMA網絡中的子產品 四、GPRS子產品與主站通信流程 五、GPRS項目開發方案 1、主站協定 2、底層驅動部分 1)IO口初始化   2)序列槽初始化   3)AT指令操作   4)序列槽中斷函數 3、主循環部分 1)TCP/IP連接配接流程控制   2)資料鍊路層資料處理   3)逾時判斷 --------------------------------------------------------------------------------------------------------------------- 一、GPRS基礎講解(GSM/CDMA/GPRS介紹) 1、通信專業術語

BSS--基站子系統,通過無線接口與移動台直接聯系,負責在一定區域内和移動台通信。(GSM)

BTS--基站收發台,可以看作一複雜的無線調制器,BSS的主要部分,每個配置設定有若幹信道。(GSM)

RBS--Radio Base Station,無線基站:RBS是基站内所有裝置的總稱,在GSM規範中對應的主要部分是BTS,它由BSC來控制,用來提供移動台與系統的無線接口,它是CME20系統中的無線裝置部分,主要由無線收發信機構成。

BSC--基站控制器,其功能是作為無線電裝置與MSC的控制和通信的接口,直接控制BTS。(GSM) 

GPRS--General Packet Radio Service, 通用分組無線電業務。GPRS是一種新的GSM資料業務,它可以給移動使用者提供無線分組資料接入服務。GPRS主要是在移動使用者和遠端的資料網絡(如支援TCP/IP、X.25等網絡)之間提供一種連接配接,進而給移動使用者提供高速無線IP和無線X.25業務。GPRS采用分組交換技術,它可以讓多個使用者共享某些固定的信道資源。如果把空中接口上的TDMA幀中的8個時隙都用來傳送資料,那麼資料速率最高可達164kb/s。GSM空中接口的信道資源既可以被話音占用,也可以被GPRS資料業務占用。當然在信道充足的條件下,可以把一些信道定義為GPRS專用信道。沿海部分城市已開通試營業。

GSM--Pan-European digital cellular land mobile telecommunication system ,泛歐數字蜂窩移動通信系統。1982年,歐洲郵電行政大會(CEPT)設立的"移動通信特别小組(Group Special Mobile)即GSM提出的數字蜂窩移動通信系統,其特點為用數字技術開發全歐統一的蜂窩系統以取代歐洲各種模拟蜂窩系統,後來又易名為"全球移動通信系統(Global System for Mobile Communication)。1989年制訂了GSM标準;1991年GSM系統正式在歐洲問世,網路開通運作,現已在全球獲得廣泛應用。該系統發射頻段基台為935~960MHz,移動台為890-915MHz,雙工間隔45MHz,射頻載波間隔200kHz,采用時分多址技術,語音編碼采用規則脈沖激勵長期預測編碼(REP-LPC)算法;小區半徑0.5~35km,頻譜效率與使用者容量較TACS,NMT等模拟蜂窩移動通信系統要高。我國就大部分采用此技術。1991年又更名為SMG:特别移動組。SMG1-SMG4分别對應以前的GSM1-GSM4,而SMG5是緻力與GSM形成後的“通用移動電信系統”,1992年又建立了一個SMG6,負責起草運作和維護的規範。

GSN--GPRS Support Node,一個GSN是一個網絡節點,它支援在GSM核心網中對GPRS的使用。所有的GSN都應當擁有一個Gn接口,并支援GPRS隧道協定。GSN有兩個關鍵的變種,即網關(gateway)和業務(service)GPRS支撐節點。

IMEI--國際移動裝置識别碼。(GSM) 

IMSI--國際移動使用者識别碼。儲存在使用者的SIM卡内,和GSM系統存儲器中,以便系統識别任何唯一的移動台。(GSM)

MSC--移動交換中心,應用在數字蜂窩系統中,移動使用者、PSTN以及其他移動交換中和移動使用者通過MTS産生聯結。

SN--Serial Number的縮寫,有時也叫SerialNo,也就是産品序列号,産品序列是為了驗證産品的合法身份”而引入的一個概念,它是用來保障使用者的正版權益,享受合法服務的。

HLR--歸屬位置寄存器。(GSM)

VLR--拜訪位置寄存器。(GSM)

ISDN--ISDN。

OPERATOR--營運者。

PDP-- Packet Data Protocol,分組資料協定,是外部PDN網與GPRS接口所用的網絡協定。

PDN--Pubic Data Network,公用資料網,一種由電信營運商組建的廣域網,提供接入廣域網的服務與技術,為使用者提供高品質資料傳輸服務。

PSPDN--公用分組交換資料網。

SMS--short message services--短消息業務。

SIM--使用者識别碼。

X.25--分組交換網内的一種通信協定。1976年準許,并多次修改,一般用于ISDN的分組交換中。包括三個層:實體層,鍊路層,分組層。對應于OSI模型的最低三層。

------------------------------------------------------------ 2、GPRS網絡結構 ​圖1 GPRS的原理結構圖

    GPRS網絡引入了分組交換和分組傳輸的概念,使得GSM網絡對資料業務的支援上得到了加強,它是通過在GSM網絡上增加GGSN和SGSN來實作的,GGSN和SGSN分别表示GPRS網關支援節點和GPRS服務支援節點。

    GPRS網絡分為無線接入和核心網絡兩個部分,無線接入部分是在移動台(MS)與基站子系統(BSS)之間傳輸資料,核心網絡在BSS與标準資料通信網邊界網關之間中繼傳輸資料。按GSM規範提出的基本結構,BSS由兩個基本部分組成:通過無連接配接口與移動台一側相連的基站收、發信機(BTS)和與交換機一側相連的基站控制器(BSC)。

    GSN是GPRS網絡中最重要的網絡節點。GSN具有移動路由管理功能,它可以連接配接各種類型的資料網絡,并可以連到GPRS寄存器。GSN可以完成移動台和各種資料網絡之間的資料傳送和格式轉換。GSN可以是一種類似于路由器的獨立裝置,也可以與GSM中的MSC內建在一起。

    GSN有兩種類型:一種為SGSN(Serving GSN,服務GSN),另一種為GGSN(Gateway GSN,網關GSN),SGSN的主要作用是記錄移動台的目前位置資訊,并且在移動台和GGSN之間完成移動分組資料的發送和接收。GGSN主要是起網關作用,它可以和多種不同的資料網絡連接配接,如ISDN、PSPDN和LAN等。有的文獻中,把GGSN稱為GPRS路由器。GGSN可以把GSM網中的GPRS分組資料包進行協定轉換,進而可以把這些分組資料包傳送到遠端的TCP/IP或X.25網絡。

    另外,有的廠商提出了GR(GSM Register,GPRS資料庫)的概念。GR類似于GSM中的HLR,是GPRS業務資料庫。它可以獨立存在,也可以和HLR共存,由伺服器或程控交換機實作。GR這個名稱在ETSI的建議中沒有專門提及

------------------------------------------------------------ 3、GPRS的工作原理

    GPRS網絡的工作原理展現在它的分組資料路由傳輸和傳輸協定模式上,使用者通訊資料通過串行或無線方式連接配接到GPRS終端上,然後GPRS終端與GSM基站通信,這種方式與電路交換式資料呼叫不同,GPRS分組是從基站發送到GPRS服務支援節點(SGSN),而不是通過移動交換中心(MSC)連接配接到語音網絡上。是以,SGSN與GPRS網關支援節點(GGSN)進行通信,GGSN對分組資料進行相應的處理後,再發送到目的網絡,如Internet或X.25網絡。

如圖 1 所示,其具體的資料傳輸流程分為四步:

第一步:使用者裝置通過串行接口向GPRS終端傳輸資料;

第二步:經過處理後的GPRS分組資料發送到GSM基站;

第三步:分組資料經GSM基站的SGSN封裝後,然後發送到GPRS骨幹網;

第四步:在GPRS網關支援節點GGSN對SGSN分組資料進行相應的處理後,再發送到目的網絡移動台(MS),和GPRS 之間的分層傳輸協定模型主要由GTP LLC和RLC協定構成,Um接口是GSM的空中接口,Um接口上的通信協定有 5 層,自下而上依次為實體層、MAC層、 LLC層、SNDC層和網絡層,RLC/MAC為無線鍊路控制、媒質接入控制層,LLC層為邏輯鍊路控制層,GTP是将使用者資料及信令用隧道技術在GPRS網絡GSN節點之間傳送。

------------------------------------------------------------ 4、GPRS協定模型

    Um接口是GSM的空中接口。Um接口上的通信協定有5層,自下而上依次為實體層、MAC Medium Access Control)層、LLC(Logical Link Control)層、SNDC(Sub network Dependant Convergence)層和網絡層。

    Um接口的實體層為射頻接口部分,而實體鍊路層則負責提供空中接口的各種邏輯信道。GSM空中接口的載頻帶寬為20OkHz,一個載頻分為8個實體信道。如果8個實體信道都配置設定為傳送GPRS資料,則原始資料速率可達20Okb/s。考慮前向糾錯碼的開銷,則最終的資料速率可達164kb/s左右。

    MAC為媒質接入控制層。MAC的主要作用是定義和配置設定空中接口的GPRS邏輯信道,使得這些信道能被不同的移動台共享。GPRS的邏輯信道共有3類,分别是公共控制信道、分組業務信道和GPRS廣播信道。公共控制信道用來傳送資料通信的控制信令,具體又分為尋呼和應答等信道。分組業務信道用來傳送分組資料。廣播信道則是用來給移動台發送網絡資訊。

    LLC層為邏輯鍊路控制層。它是一種基于高速資料鍊路規程HDLC的無線鍊路協定。LLC層負責在高層SNDC層的SNDC資料單元上形成LLC位址、幀字段,進而生成完整的LLC幀。另外,LLC可以實作一點對多點的尋址和資料幀的重發控制。

    BSS中的LLR層是邏輯鍊路傳遞層。這一層負責轉送MS和SGSN之間的LLC幀。LLR層對于SNDC資料單元來說是透明的,即不負責處理SNDC資料。SNDC被稱為子網依賴結合層。它的主要作用是完成傳送資料的分組、打包,确定TCP/IP位址和加密方式。在SNDC層,移動台和SGSN之間傳送的資料被分割為一個或多個SNDC資料包單元。SNDC資料包單元生成後被放置到LLC幀内。

    網絡層的協定目前主要是Phase 1階段提供的TCP/IP和L25協定。TCP/IP和X.25協定對于傳統的GSM網絡裝置(如BSS和NSS等裝置)是透明的。

    在GPRS網絡傳輸中,常用的有兩種傳輸協定,即TCP和使用者資料報協定UDP它們都是使用 IP 作為網絡層協定,每組資料都通過端系統和每個中間路由器中的 IP層在網際網路中進行傳輸TCP主要負責把應用程式交給它的資料分成合适的小塊然後再交給下面的網絡層 确認接收到的分組 設定發送最後确認分組的逾時時鐘等,是為兩台主機提供高可靠性的資料通信。

    UDP協定與TCP協定最大的不同表現在資料傳輸的可靠性上,UDP協定是一種不可靠的或最盡力的協定,它本身不提供可靠的資料傳輸,但并不意味着在UDP協定之上就不能有可靠的資料傳輸 在網絡傳輸中使用UDP協定的應用程式要負責實施重傳 過濾多餘資訊等等 如果一個UDP包在傳輸過程中丢失或者損壞,需要引起發送資料的應用程式注意才行TCP協定和UDP協定各有優勢,工業監控系統中究竟是采用 TCP協定還是 UDP協定,可以根據實際條件和技術水準來綜合考慮。

------------------------------------------------------------ 5、GPRS連接配接過程詳解 ​ 1)MS(移動台)附着 在此過程中,通過BSC系統的PCU子產品進行接入控制和信道配置設定,通過SGSN和HLR進行鑒權管理,并從HLR中獲得使用者的簽約資訊,最終在MS、HLR與SGSN内部形成有關使用者的移動管理資訊,此時MS通過HLR系統完成鑒權,位置更新等過程,最後由HLR通過GR接口信令向SGSN發送鑒權三元組,完成附着。 當MS完成附着後,它将在RLC/MAC層使用TLLI作為身份辨別,這時MS進入READY狀态,并在MS和SGSN中建立起MM上下文,之後MS才可以發起PDP上下文激活過程,在這個時刻以前的所有過程的成功與否均與PDP沒有關系。即是使用者在附着過程中,主要涉及無線系統、如PCU、無線信道、SGSN和HLR等業務單元,而與GGSN無關。 ​ ------------------------------- 2)PDP激活 作為GPRS通信過程中第二個重要的過程,在該過程中涉及中DNS号段解析、DHCP位址配置設定、radius認證過程等重要過程。當PDP激活成功後,手機可以獲得IP位址,系統開始形成計費話單,使用者将進入通信前的臨界狀态。     PDP上下文包含與某個APN相關的位址映射以及路由資訊。目前在我省主要的APN應用由WAP、NET以及今後的行業VPDN應用,這些特定的應用均有相對應的IP位址網段、路由資訊與之相比對。MS通過激活PDP上下文得到GGSN系統配置設定的動态IP位址後完成資料接入工作。是以MS能否正常從GGSN系統獲得IP位址是PDP成功激活的關鍵所在。     DNS系統解析是否成功直接關系到PDP激活是否成功。     GPRS通信全過程包含ATTACH(附着)和PDP(激活)兩個子過程。 ------------------------------------------------------------ 6、GPRS的應用---TCP/IP/PPP 實際上GPRS DTU上實作的協定棧是TCP/IP Over PPP。 1)每一次DTU撥ATD*99***1#(或ATD*99***1#)之後其實都在采用PPP協定和移動的接入裝置(一般是移動公司的一台特殊的GGSN路由器)進行握手,當PPP協定握手成功後,DTU都會獲得一個動态IP位址。一般來說,每一次DTU下線後(挂斷連接配接或者直接斷電後)在重新進行撥号和PPP握手後取得的動态IP位址都是不一樣的。但是移動公司可以通過為客戶開通特定的APN和發行特殊的SIM卡,使得用這張SIM卡獲得的動态IP位址每一次都不變。也就是說可以做到SIM卡和IP位址綁定。 ------------------------------- 2)我們在做測試時,應當注意到如下事實:在采用公網的APN(“cmnet”)的條件下,如果我們用DTU主動向公網上的一個靜态公網IP位址發起TCP連接配接,隻要這個公網上的機器确實有偵聽相應的端口,這樣是可以連上的;但是相反地,如果是由公網上的靜态IP向DTU動态獲得的IP位址主動發起的TCP連接配接将不會成功。這個現象的原因是:實際上DTU獲得的動态IP位址是移動的一個特殊的内部網段上的位址,這個特殊内部網段裡的位址如果要和外部網(公網)的位址進行TCP通信,必須通過一個類似于TCP代理(或者NAT)的裝置進行通信的轉發。換句話說,這個動态位址對于網絡上的其他機器來說是不可通路的。 ------------------------------- 3)标準AT指令+CGDCONT的主要作用是指定APN。APN是Access Point Name(通路接入點)的縮寫,移動通過開通特殊的APN為行業客戶提供VPN(Virtual Private Net)服務。比如說,如果是要上公網(Internet),應當使用“cmnet”作為APN。又如某企業向移動公司申請了VPN服務,移動公司為其開通了一個APN為“hxsw.gd”,則我們就應當用這個APN來設定GPRS子產品,格式:AT+CGDCONT=1,“IP”,“hxsw.gd” ------------------------------- 4)确定一條TCP連接配接有4個要素,這4個要素是雙方的IP位址和雙方的TCP端口号,這也就是DTU為什麼将本地端口、目的端口和目的IP位址結合起來作為連接配接的ID号(DTU在PPP握手成功後獲得的動态位址隻要不斷線重連就不會改變)的原因。 ------------------------------- 5)使用TCP協定進行資料通信時,必須要經過三個階段,第一個階段是連接配接建立階段,第二個階段是資料收發階段,第三個階段是連接配接釋放階段。 (1)連接配接建立階段 連接配接的建立又有主動連接配接和被動連接配接之分,一般來說客戶機都是主動發起連接配接的,而伺服器是被動接受連接配接的。 所謂的主動連接配接是指本方主動向遠端發起連接配接請求, 而被動連接配接指的是本方偵聽一個端口,等待遠端及其主動向自己發起一個連接配接請求并且進行回應并且最終握手建鍊成功。 在連接配接成功切換到資料态後,我們可以通過OPEN指令幀控制DTU進行主動連接配接。當然,連接配接時要指定對方的IP位址和端口号。 ---------------- (2)資料收發階段 當一條連接配接建立之後,就可以在這條連接配接上進行資料收發了。 可以使用SEND指令幀控制DTU進行資料發送。當然,發送時要指定連接配接号(通過本地端口、目的位址和端口唯一确定)。 對于對方發送過來的資料,DTU首先将其存儲在自身的資料緩沖區中,然後将資料已到達此事件通知給上位機,上位機讀取到資料已到達事件後,應當及時使用RECV指令幀控制DTU将相應連接配接上的所有資料通過序列槽讀出,當資料讀出後,這些資料原先占用的資料緩沖區空間将會被釋放。注意,由于DTU的資料緩沖區有限,是以對于對方發來的資料,上位機一定要及時讀出,否則資料越積越多,可能會導緻資料緩沖區溢出,丢失資料。 ---------------- (3)挂斷連接配接階段 當一條連接配接上的所有資料都已經收發完成了,不再需要這條連接配接時,就可以把連接配接給挂斷。 和連接配接建立階段相類似,挂斷也分為主動挂斷和被動挂斷。 可以使用RSET指令幀控制DTU進行連接配接的主動挂斷,如果連接配接被對方主動挂斷,DTU将會把這個事件通知給上位機進行處理。 ------------------------------------------------------------ 7、GPRS相關AT指令集 1)GPRS指令 AT+CGATT=1    //傳回OK,附着網絡 AT+CGACT=1,1    //激活網絡,之後就可以使用TCP/IP的指令了 ------------------------------- 2)TCP/IP指令 AT+CIPSTART="TCP","121.41.97.28",60000    //連接配接TCP/IP伺服器 AT+CIPSEND=20    //傳回>,就可以輸入要發送的内容20表示有20個位元組 AT+CIPCLOSE    //關閉TCP/IP連接配接 +CIPRCV:5,12345    //收到伺服器傳回的5個位元組 ------------------------------- 3)多路TCP/IP連接配接指令 AT+CGDCONT=1,"IP","cmnet"    //設定PDP參數,cmnet是APN AT+CGACT=1,1    //激活PDP AT+CIPSTATUS    //查詢ip連接配接情況,共有8路,實際最多支援同時開4路TCP/IP連接配接  AT+CIPCLOSE    //關閉該鍊路 AT+CIPMUX    //查詢是否開啟多連接配接 AT+CIPMUX=1    //開啟多連結 AT+CGPADDR    //顯示PDP位址 ATD*99***1#    //請求GPRS服務 --------------------------------------------------------------------------------------------------------------------- 二、GPRS或CDMA子產品與網絡連接配接方式 1、主站系統具有公網固定IP的,内網通過端口映射收發資料。這種方式要在最前端路由器上做一個端口映射。 假如你的CDMA子產品終端要連接配接端口是5002,把這個端口映射給資料接收中心的那台電腦上即可。 2、主站系統采用動态IP,應用DNS域名解析這種方式接收中心有路由器的話也需要端口映射。域名解析有很多軟體可以用,如花生殼,金萬維之類。 3、通過專線APN接入即IP對IP。GPRS比CDMA要多一種方式,點對點,移動網内可以實作點對點。 --------------------------------------------------------------------------------------------------------------------- 三、系統主站通路GPRS/CDMA網絡中的子產品 GPRS/CDMA子產品終端運作後,會得到一個IP位址,這個位址是中國移動(GPRS)/中國聯通(CDMA)内部網絡位址,不能從外部(如Internet)直接通路到,此時可采用以下兩種方案: 1、 移動/聯通内部網均可以通路Internet,是以如果主站在Inernet上有固定IP或域名,則可以由終端首先通路主站,主站收到終端通路時記錄下終端IP(與終端在GPRS/CDMA内部網的IP不同,是臨時配置設定的,一般在幾十秒到幾分鐘内有效),可在其有效時間内用這個IP通路終端。該方案的缺點是如果終端通路主站的間隔過短則通信費用會大大增加,如果過長則主站可能無法及時與終端通訊。如果使用者的終端數量不多,或主要是終端上報資料,可采用此方案。主站也可以采取短信或電話振鈴等輔助方式通知終端首先發起通路。 2、對終端數量較多的使用者,應與中國移動/中國聯通取得聯系,為終端建立專用的APN,為主站開通專線或VPN聯網,這樣終端可以獲得固定的IP位址,主站可以象在局域内一樣與終端通訊,便于整個系統維護。 --------------------------------------------------------------------------------------------------------------------- 四、GPRS子產品與主站通信流程 GPRS子產品通過序列槽連接配接到ARM闆,是以要進行通信首先要進行序列槽等初始化。 GPRS子產品供電以後,SIM卡首先通過SGSN節點附在GPRS網絡上(注冊),然後通過PPP協定進行連結,接着GPRS網絡給SIM卡配置設定一個動态的IP位址(網内位址)進行TCP/IP連接配接。 由于GPRS配置設定的是動态IP,是以主站的IP要固定,主站可以向移動提出申請固定IP(特殊服務,據說收費很貴),或者利用專網VPN服務。在建立連接配接以後,子產品與上位機如何進行通信有兩種協定:内部協定和外部協定。 内部協定是采用指令模式(AT指令集),外部協定采用指令模式或者資料模式。預設采用的是外部模式。可以通過AT指令設定成内部模式。是以,要與主站進行通信的流程就變的很明朗。 以芯訊通SIM7600CE-A為例,整個流程如下: 1)子產品上電後初始化,初始化完畢後,會送出+pbready。如果沒有收到,檢查子產品序列槽是否通; 2)檢查SIM卡; 3)檢查信号強度; 4)查詢網絡注冊情況; 5)設定内部協定棧; 6)設定APN; 7)對于一些專網,若需要使用者認證指令,要進行使用者認證; 8)建立PPP連接配接; 9)查詢PPP鍊路狀況; 10)建立TCP/IP連接配接。 整個流程代碼量不大,購買GPRS子產品會附送代碼參考,省下很多開發時間。    AT/r    AT+ccid/r    //檢測是否裝有SIM 卡    AT+cgmr/r    //檢測軟體版本,5.0 以上的才有GPRS 功能支援    AT+csq/r    //檢測信号品質,确定是否可以登陸上網絡;若傳回10--31,0之間的信号數字則繼續,如果信号是99,99,                       //則應該考慮不停的的讓子產品去搜尋網絡。    AT+CGCLASS="B"/r   //設定子產品工作類型    AT+CGDCONT=1,"IP","CMNET"/r   //設定PDP參數    AT+CGATT=1   //激活PDP,獲得IP      AT+CIPCSGP=1,"CMNET"/r    AT+CIPSTART="TCP","10.56.12.207","2020"/r    AT+CIPSEND/r    >   //傳回“>”後輸入要傳輸的資料,再發送CTRL+Z,即将所要發送的資料發送到指定IP的伺服器上 發送成功會傳回SEND OK    AT+CIPCLOSE/r  //隻有在TCP/UDP處于CONNECT OK的狀态下才傳回OK,否則傳回ERROR    AT+CIPSHUT/r   //關閉移動場景 正常傳回 SHUT OK --------------------------------------------------------------------------------------------------------------------- 五、GPRS項目開發方案 1、主站協定 百度網盤搜尋“IHDC協定設計V1[1].4[無線子產品協定]”。 ​

STM32-GPRS子產品連接配接系統主站

STM32-GPRS子產品連接配接系統主站

​​​​​​​

------------------------------------------------------------

2、底層驅動部分 1)IO口初始化 控制 IO 和通訊 IO,控制包括電源控制,複位和低功耗模式,通訊就是序列槽。在這個基礎上還可以組合出複位的功能,複位在GPRS連接配接出錯時會用到,或直接關閉子產品電源再打開。 -------------------------------- 2)序列槽初始化 子產品的波特率為115200,8位資料位,1位停止位,沒有校驗位和流控。 序列槽還需要兩個發送函數,發送一個位元組和發送一串字元串。序列槽中斷處理函數放到後面說。 -------------------------------- 3)AT指令操作 發送AT指令 設定GPRS 資料長度 發送GPRS資料内容 接收GPRS資料内容 AT指令/GPRS資料解析 -------------------------------- 4)序列槽中斷函數 包含AT指令/GPRS資料解析和接收GPRS資料内容,判斷AT指令是否發送成功。 AT指令傳回的結束符除了設定GPRS資料長度的是'>',其他都是"\r\n"。但是在判斷接收結束的時候不能隻考慮這兩種情況,還有一個情況需要特殊處理,那就是當接收到GPRS資料的時候,完全有可能會出現'\r','\n'對應的十六進制數。解決的辦法就是在接收到"+CIPRCV:xxx,"的時候,附帶判斷接收到的資料長度,"xxx"代表的是GPRS資料長度資訊,字元型格式,在這裡還需要做一個格式轉換。資料長度的位數根據字元 ','來進行判斷,',' 将AT指令和GPRS資料進行分割。"xxx"換算過來的數值決定了 ',' 後面接收到的資料長度。 由于目前采用的SIM卡子產品内部沒有自帶緩沖區,在GPRS資料接收的時候,需要另外開辟一個存儲空間用于資料的臨時存儲,建議采用環形緩沖區Buffer, 将序列槽接收到的資料按順序存儲,這個部分在序列槽中斷函數裡面實作。在大循環裡面将資料取出處理,并設定相關标志位。開始設計的時候隻開辟了一個非環形的緩沖區,每次接收到完整的資料,會從緩沖區的0位址重新開始存儲,那麼就會導緻未及時處理的資料被新的資料沖掉。不知道有沒有别家的SIM卡子產品是自帶緩沖區的。 ------------------------------------------------------------ 3、主循環部分 1)TCP/IP連接配接流程控制 step1:"AT\r\n"   //檢測子產品序列槽工作 step2:"AT+CCID\r\n"   //檢查是否插卡 step3:"AT+CREG?\r\n"   //檢查網絡注冊情況 step4:"AT+CGATT=1\r\n"   //附着網絡 step5:"AT+CGDCONT=1,\"IP\",\"CMNET\"\r\n"   //設定PDP參數,其中CMNET是APN step6:"AT+CGACT=1,1\r\n"   //激活網絡,獲得IP step7: "AT+CIPSTART=\"TCP\",\"121.41.xxx.xxx\",port\r\n"   //連接配接TCP/IP伺服器 這個子產品硬體初始化差不多就要10秒,在硬體初始化完成後,按照以上7步進行伺服器連接配接。前面兩步是硬體檢測用的,如果這2步都測不過,那就需要檢查下硬體是否完整。3到6步如果傳回ERROR,可重複發送,直至傳回OK,每一步之間可間隔數秒。最後一步如果失敗,需先關閉連接配接,再重新發起連接配接。如果第7步一直連接配接不成功,那麼可以控制IO複位子產品,當然也可以先确認下伺服器的端口是否打開。 我的經驗是連接配接和通訊的過程中,若出現錯誤的情況,複位子產品是最有效和快捷的方式。在确認硬體連接配接正常的情況下,若多次發送指令失敗,傳回ERROR的話,那還是複位子產品吧。 另外兩個AT指令也很好用 "AT+CIPCLOSE\r\n"   //關閉TCP/IP連接配接 "ATE0\r\n"   //關閉回顯,關閉自己發給子產品的序列槽資料,調試的時候可以不開啟這個功能,友善觀察。 -------------------------------- 2)資料鍊路層資料處理 實作GPRS資料接收/發送控制,存儲序列槽中斷接收到的資料,發送GPRS資料長度和GPRS資料内容。 這個函數裡面需要注意的是發送GPRS長度和資料的操作,需要在一次操作流程裡面完成。我一開始腦殘的将GPRS資料長度和資料發送分開處理,導緻設定完資料長度後,發送狀态處于準備好的狀态,此時隻要檢測到有資料是需要發送的,便會通過GPRS發送出去,而無法保證是目前資料長度對應的資料幀(我在這裡一共開辟了8個資料緩存,但是沒有對發送狀态進行分開判斷)。在設定完資料長度後,需要判斷是否接收到字元'>',大概需要50毫秒的時間。一開始分開發送也是和這個'>'字元的操作有關的,我已經幫大家試過了,連在一起發就好了。 發送完GPRS長度幀後,傳回字元'>',接着發送資料幀,在子產品傳回"OK"之前,發送的資料都會被發送到伺服器,導緻通訊出錯。是以在資料發送後,需要等待判斷子產品是否已經發送成功。 -------------------------------- 3)逾時判斷 檢測GPRS資料是否發送失敗,失敗後可關閉TCP/IP連接配接,進行重連,如果還是失敗,可複位子產品,重新進行TCP/IP連接配接流程。 ---------------------------------------------------------------------------------------------------------------------