625
技術社區[雲棲]
移動通信課論
移動通信課程論文
GSM/GPRS原理與應用
——基於SIM900A的應用與實現
目錄
3基於SIM900A的GSM/GPRS電路係統設計...11
附錄1:CC2430控製SIM900A實現TCP相關主要程序...21
綜述
本文對GSM、GPRS係統做了簡要介紹,講解了GSM、GPRS係統的相關組成與功能。並選用SIM900A模塊設計了一個硬件電路係統,該模塊是雙頻GSM/GPRS模塊,其內部集成了TCPIP協議。實踐部分,本文利用PC機通過串口控製該SIM900A電路係統實現了SMS和TCPIP數據收發功能,並利用單片機與SIM900A進行了通訊實驗,使其連續不斷地發送數據,經實驗測定其數據正確性基本為100%。文章最後給出了相關源代碼。
關鍵字:GSM GPRS SIM900A SMS TCP數據收發
1 GSM係統簡介
1.1 GSM涵義
GSM中文名稱為:全球移動通信係統;英文名稱為:Global system for mobile communications。GSM屬於第二代移動通信技術,起源於歐洲的移動通信技術標準,又稱“全球通”,取一部手機行遍全球之意,其實現手段為全球使用同一個移動電話網絡標準。
我國於20世紀90年代引進該技術標準,進而取代了第一代移動通信技術標準-蜂窩模擬移動技術。GSM係統包括GSM 900:900MHz、GSM1800:1800MHz 及 GSM-1900:1900MHz等幾個頻段 。
1.2 GSM係統結構與功能
GSM係統由若幹個子係統或功能實體組成。其中基站子係統(BSS)在移動台(MS)和網路子係統(NSS)之間提供和管理傳輸通路,特別包括了MS與GSM係統的功能實體之間的無線接口管理。NSS負責管理通信業務,保證MS與相關的供應能夠通信網或與其他MS之間建立通信。MS、BSS和NSS組成GSM係統的實體部分。操作支持係統(OSS)提供運營部門一種手段來控製和維護這些實際運行部分。
圖1.1 GSM係統結構
1.2.1移動台(MS)
公用GSM移動通信網中用戶使用的設備叫做移動台,它是整個GSM係統中用戶惟一接觸的設備,移動台的類型包括手持台、車載台和便攜台,其中手持台用戶的比例最大。移動台必須提供與使用者之間的接口以及通過無線接口接入GSM係統的基本功能,其中主要包括話筒、揚聲器、顯示屏和按鍵等。此外,移動台另外一個重要的組成部分是用戶識別模塊-SIM卡,它是一張符合ISO標準的智慧卡。他包含所有與用戶相關的和某些無線接口信息,其中包括鑒權和加密信息。使用GSM標注你的移動台都需要插入SIM卡,隻有當處理異常的緊急情況的緊急唿叫可以在不用SIM卡的情況下操作。
1.2.2基站子係統 (BSS)
基站子係統是由基站收發信台BTS和基站控製器BSC兩部分功能實體組成。基站子係統BSS是GSM係統中與無線蜂窩方麵關係最直接的組成部分,它通過無線接口直接與移動台相接負責無線發送與接收和無線資源管理。另一方麵,基站子係統與網路子係統NSS中的移動業務交換中心MSC相連。實現移動用戶之間或移動用戶與固定網路之間的通信連接傳送係統信號和用戶信息等。此外,為了對BSS進行操作維護管理還需要建立BSS與操作子係統OSS之間的通信連接。
基站收發信台BTS屬於基站子係統的無線部分,由基站控製器BSC控製服務於某個小區的無線收發信設備完成BSC與無線信道之間的轉換,實現BTS與移動台MS之間通過空中接口的無線傳輸及相關的控製功能。實際上一個基站控製器根據話務量需要可以控製十個BTS,BTS可以直接與BSC相連也可以通過基站接口設備BIE采用遠端控製方式與BSC相連接。BTS主要分為基帶單元、載頻單元、控製單元三大部分。
基站控製器BSC屬於基站子係統的控製部分,起著BSS的變換設備的作用。即各種接口的管理,承擔無線資源和無線參數的管理。
1.2.3網路子係統(NSS)
網路子係統NSS主要包含有GSM係統的交換功能和用於用戶數據與移動性管理、安全性管理所需的數據庫功能。它對GSM移動用戶與其他通信網用戶之間通信起著管理作用。NSS由一係列功能實體構成,整個GSM係統內部,即NSS的各功能實體之間和NSS與B生死之間都通過符合CCITI心靈係統No.7協議和GSM規範的7號信令網路互相通信。
網路的核心是移動業務交換中心MSC,它提供交換功能及麵向係統其它功能實體如:基站子係統BSS,歸屬用戶位置寄存器HLR 鑒權中心AUC 移動設備識別寄存器EIR 操作維護中心OMC 和麵向固定網公用電話網PSTN 綜合業務數字網ISDN 分組交換公用數據網PSPDN,電路交換公用數據網CSPDN的接口功能。把移動用戶與移動用戶,移動用戶與固定網用戶互相連接起來,移動業務交換中心MSC可從三種數據庫。即歸屬用戶位置寄存器 HLR 訪問用戶位置寄存器VLR 和鑒權中心 AUC。獲取處理用戶位置登記和唿叫請求所需的全部數據。反之MSC也根據其最新獲取的信息請求更新數據庫的部分數據MSC可為移動用戶提供一係列業務。此外,作為網路的核心,MSC還支持位置登記,越區切換和自動漫遊等移動特征性能和其它網路功能
1.2.4操作支持子係統(OSS)
操作支持子係統OSS,需要完成許多任務包括移動用戶管理,移動設備管理以及網路操作和維護移動用戶管理(用戶數據管理和唿叫計費)。用戶數據管理一般由歸屬用戶位置寄存器HLR來完成,HLR是NSS功能實體之一,用戶識別卡SIM的管理也是用戶數據管理的一部分,但是作為相對獨立的用戶識別卡SIM的管理還必須根據運營部門對SIM 的管理要求和模式采用專門的SIM個人化設備來完成。唿叫計費可以由移動用戶所訪問的各個移動業務交換中心MSC和GMSC分別處理也可以采用通過HLR或獨立的計費設備來集中處理計費數據的方式。移動設備管理是由移動設備識別寄存器 EIR 來完成的。
1.3 GSM信道
GSM信道可以分為物理信道和邏輯信道。物理信道是指實際物理承載的傳輸信道,邏輯信道則是按照信道的功能劃分,物理信道是邏輯信道的載體。
1.3.1物理信道與幀結構
時分多址是GSM的基本特點,GSM有8個時隙,它不足以滿足每個小區實際的用戶需求,因此,GSM采用以時分為主體,時分頻分相結合的方式。對於GSM900(一階段),GSM上下行各占有25MHZ頻段,而每個信道僅占用200KHZ,所以GSM可容納的頻分信道數是125,而每個頻分信道有8個時隙,所以GSM總共可以提供的時分信道數為1000個。而對於GSM900第二階段,上下行頻段擴展至35MHZ,時分信道也相應增至1400。此外,可利用小區蜂窩規劃對不同小區進行空分,以進一步增加信道數。
GSM幀結構分為四個層次:TDMA、複幀、超幀、超高幀。TDMA幀是GSM中的基礎幀,一個TDMA幀由8個時隙組成,而每個時隙可以是下列4類時隙突發中的某一種類型:常規突發序列、頻率校正突發序列、同步突發序列和接入突發序列,其中,常規突發序列應用較多,主要用於信息通信,其他三類則多用於不同的控製。此外,TDMA幀可以構成兩類複幀,進而構成兩類超幀。GSM幀結構圖如圖1.2。
圖1.2 GSM幀結構圖
1.3.2 GSM邏輯信道
邏輯信道按功能劃分分為主業務信道和為了配合業務正常進行的輔助性控製信道兩大類。
主業務信道又可以分為語音與數據兩類。語音信道分為全速率語音信道和半速率語音信道,分別為13.5kbps和6.5kbps。數據信道則可以分為五種類型:9.6kbps全數率數據業務;4.8kbps全速率數據業務;<=2.4kbps全速率數據業務;4.8kbps半速率數據業務;2.4kbps半速率數據業務。
輔助性控製信道是為了保證業務信道有效且正常傳送輔助信息的信道。它可分為三種類型:廣播信道,其中包括頻率校正信道、同步信道和廣播控製信道;公共控製信道,它包含下行的尋唿信道和準予接入信道及上行的隨機接入信道;專用控製信道,它包含獨立專用控製信道和兩類(快、慢)隨路控製信道。
2 GPRS係統簡介
2.1 GPRS涵義
GPRS,英文名稱為:General Packet Radio Service,即通用分組無線業務,其標準是歐洲電信標準化協會ETSI製定並於1998年完成的。它是從GSM係統上發展起來的分組無線數據業務,GPRS與GSM公用頻段、公用基站並共享GSM係統能夠與網絡中的一些設備和設施。GPRS大大拓廣了GSM的服務範圍,在GSM原有電路交換的語音與數據業務的基礎上提供了一個平行的分組交換的數據與語音業務的網絡平台。基於上述原因,GPRS經常被描述成“2.5G”,也就是說這項技術位於第二代(2G)和第三代(3G)移動通訊技術之間。
GPRS的主要功能是移動蜂窩網中支持分組交換業務,按時隙而不占用整個通路,將無線資源分配給所需的移動用戶,收費亦按占用時隙計算,因而收費相對較低。GPRS不僅可應用於GSM係統,還可以用於其它基於X.25與IP的各類分組網絡中,為無線因特網業務提供一個簡單的網絡平台。
2.2 GPRS網絡結構
GPRS網絡結構如圖2.1所示。主要包括,分組控製單元PCU、網關GPRS支持節點GCSN、服務GPRS支持節點SGSN、域名服務器DNC、邊界網關BG、計費網絡CG等。
圖2.1 GPRS網絡結構
2.2.1分組控製單元 PCU
分組控製單元主要完成無線鏈路控製與媒體接入控製以及與服務GPRS支持節點之間Gb分組業務的轉換。包括啟動、監視、拆斷分組交換唿叫、無線資源組合、信道配置等;PCU與SGSN之間通過幀中繼或者E1方式連接。
2.2.2服務GPRS支持節點 SGSN
服務GPRS支持節點主要負責GPRS與無線端的接入控製、路由選擇、加密、鑒權、移動管理,以及與MSC、SMS、HLR、IP和其他分組網之間的傳輸與網絡接口。此外,SGSN可以被看做一個無線接入路由器。
2.2.3網關GPRS支持節點 GGSN
網關支持節點主要支持與外部因特網及X.25分組網連接的網關,可看做提供移動用戶IP地址的網關和路由器。網關支持節點還包含防火牆和分組濾波器並提供網間安全機製。
2.2.4邊界網關BG
邊界網關是其他運營者的GPRS網關與本地GPRS網關主幹網之間互相連接的網關,它應具有基本的安全功能和根據漫遊協議增加相關功能的能力。
2.2.5計費網關CG與域名服務器DNS
計費網關通過相關接口Ga與GPRS網中的計費實體相連接,用於收集各類GSN的計費數據並記錄和進行計費。域名服務器DNS負責提供GPRS網內部SGSN、GGSN等網絡節點域名解析及接入點名APN的解析。
2.3 GPRS技術優勢
2.3.1資源利用率高
在GSM網絡中,GPRS首先引入了分組交換的傳輸模式,使得原有的采用電路交換模式的GSM傳輸數據發生了根本變換,這在一定程度上解決了無限資源稀缺的問題。按照電路交換模式,在整個連接期間,無論用戶是否發送數據都將獨自占有信道。在會話期間亦會有一些空閑時隙,用戶隻有充分利用這些空隙,才能充分利用無線資源,從而提高信道利用率。對於分組模式的GPRS,很好的解決了這些問題,用戶計費以通信的數據量為主要依據,實際上,GPRS連接時間可能長達數小時,而需要支付的費用卻很少。
2.3.2傳輸速率高
GPRS可提供高達115Kbit/s的數據傳輸速率(最高值為171.2Kbit/s,不包括FEC)。這意味著通過便攜式電腦GPRS用戶將可以獲得和ISDN用戶一樣的快速上網瀏覽,使快速網絡服務可以隨時隨地。
2.3.3接入時間短
分組交換接入時間小於1秒,能提供快速即時的連接,可以大幅度提高一些事物的效率,並使現有的Internet操作更加方便、快捷、流暢。
2.3.4支持IP協議和X.25協議
GPRS支持Internet上應用最廣泛的IP協議和X.25協議。支持X.25協議可使已經存在的X.25應用能夠在GSM網絡上繼續使用。而且由於GSM網絡覆蓋麵廣,所以是得GPRS能夠提供Internet和其他分組網絡的全球性無線接入。
2.4 GPRS業務應用
GPRS如今的應用已經比較廣泛。具體涉及到以下幾個方麵:信息業務、網頁瀏覽、文件共享及協同工作、因特網和企業E-mail、交通工具定位、靜態圖像、遠程局域網接入等等。
信息業務包括的內容比較廣泛,如新聞、天氣、交通信息等等;網頁瀏覽可以使移動用戶獲得比電路交換數據更便捷的上網服務,由於電路交換速率比較低,因此數據從因特網服務器到瀏覽器需要很長一段時間,而GPRS則比較適合於因特網瀏覽業務;定位功能綜合了無線定位技術,該係統告訴人們所處的位置,並且利用短消息業務轉告其他人該位置信息;靜態圖像如照片圖片等可以在移動網絡上發送和接收,使用GPRS可以將圖像從一個GPRS設備傳送到因特網站點或者其他接收設備。
2.4.1 GPRS典型應用一
圖2.2 GPRS典型應用-遠程物品監控
如圖2.2所示,為一遠程物品實時監控係統,該係統可以用來對遠端的物品的狀態(是否發生故障、丟失、移動等等)進行實時監控,大大節省了人力,而且快捷方便。
該係統主要通過遠端的無線傳感器網對所要監控的物品的各項參數進行實時監測,或者設定閾值,待超過規定範圍實施報警。通過傳感器采集回來的數據經過GPRS終端發送到GPRS網絡,進一步發送到遠端的監控中心,監控中心對數據進行分析,做出相應處理。
2.4.2 GPRS典型應用二
圖2.3 GPRS典型應用-車輛實時監控
如圖2.3所示,為一車輛監控典型係統。GPRS手機與GPS聯合提供車輛的實時調度、監控和管理,GPS探測到的車輛當前位置信息,有GPRS手機通過GPRS網絡實時地傳輸到車輛調度中心,車輛調度中心的指令、命令也可以通知PTP或者PTM方式發送給一個或者多個駕駛員,完全可以取代現有的無線集群指揮調度係統,具有成本低、覆蓋範圍廣、使用簡單方便。
3基於SIM900A的GSM/GPRS電路係統設計
3.1 SIM900A模塊簡介
SIM900A是一個2頻的GSM/GPRS模塊,工作頻段為:EGSM 900MHZ和DCS 1800MHZ。SIM900A支持GPRS multi-slot class 10/class 8(可選)和GPRS編碼格式 CS-1,CS-2,CS-3 and CS-4。SIM900A采用省電技術設計,在SLEEP模式下最低耗流隻有1mA。此外,該模塊內嵌TCP/IP協議,擴展的TCP/IP命令讓用戶能夠很容易使用TCP/IP協議,這些在用戶做數據傳輸方麵的應用時非常有用。
SIM900A尺寸較小,幾乎可以滿足所有用戶應用中的對空間尺寸的要求。該模塊與用戶移動應用的物理接口為68個貼片焊盤,提供了模塊和客戶電路板的所有硬件接口:鍵盤和SPI顯示接口;主串口和調試串口;一路音頻接口,包含一個麥克風輸入和一個揚聲器輸出;可編程通用輸入輸出接口。SIM900A的功能框圖如圖3.1所示。
圖3.1 SIM900A功能框圖
3.2 SIM900A硬件係統設計
SIM900A硬件設計功能框圖如圖3.2所示。本電路設計之初,主要是為了實現SMS與TCP功能,因此語音接口沒有引出,外部功能模塊主要分為串口、電源、SIM卡、以及單片機相應接口。
圖3.2 硬件係統設計功能框圖
3.2.1 SIM900A原理圖
該電路係統設計的關鍵在於電源部分,由於GSM/GPRS模塊電源部分為3.8v,非典型固定電壓,而且瞬間電流可以達到2A。本係統選擇可調輸出電壓芯片LM2596,LM2596輸出電壓範圍為1.2-37v,瞬間可以通過最大電流達到3A,完全符合電路要求。
電路通信部分充分考慮了兼容性,是GSM/GPRS模塊既可以和PC機通信,同時又可以與單片機通信。由於所使用的MCU為5v接口電壓,而SIM900A的接口電壓為2.8v,因此需要在兩者之間加一電平轉換芯片,本係統采用NL27WZ07在SIM900A與模塊之間進行電平的轉換。
由於GSM/GPRS模塊為靜電敏感器件,因此電路中需要加入靜電防護措施。本係統中采用ESDA6V1W5,該器件專為靜電敏感器件設計,可承受瞬間靜電25KV,漏電流小於1uA。
圖3.3 SIM900A原理圖
3.2.2 SIM900A PCB圖設計
改電路設計需要考慮瞬間大電流問題,由於SIM900A在通信瞬間會產生高達2A的電流,因此,模塊的供電需要保持穩定,否則將對電路的穩定性甚至正常工作指標產生影響。本設計中采用了加粗電源線的方法。同時采用大麵積附銅接地(此處貼圖由於顯示問題沒有附銅)。係統PCB設計如圖3.4。
圖3.4 SIM900A PCB
圖3.5 SIM900A硬件係統實物圖
4基於SIM900A的SMS、TCP功能實現
4.1 SMS功能實現
SMS(Short Messaging Service)中文名稱短信服務,短信是當下每一部手機上必備的功能之一,顧名思義,它是在手機之間發送文字信息或從個人計算機或手持設備向手機發送信息的一種方式,其文本信息的最大發送量為160個字符(字母、數字或者拉丁字母中的字符),對於中文一般最大發送量為70個字符。
4.1.1 SMS工作原理
以手機為例,盡管平時沒有打電話或者接聽電話,但是我們的電話卻總在不停地收發數據,它通過被稱為控製信道的控製通路與手機發射塔進行通信。這種通訊的目的是讓手機係統了解自己所在的信號區域,以便移動時手機可以切換到其他信號區域以及確定工作正常。手機使用控製通道來建立唿叫,控製通道同樣也為SMS短信提供通路。當我們向一部手機發送短信時,該短信將通過手機發射塔以控製通道上小型數據包的形式先通過SMSC(短信業務中心),然後通過手機發射塔,再由發射塔將短信發送到目標手機。
對於短消息的控製共有三種模式:Block Mode、基於AT指令的Text Mode、基於AT指令的PDU Mode。目前手機中默認使用PDU Mode,通過PDU編碼的短消息內容可以是文字、聲音或者圖像。Text Mode隻能用於發送ANSI範圍的字符,發送方式比較簡單。本文通過文本模式發送短消息。
4.1.2 SMS實現步驟
在本係統中,利用PC機通過串口控製SIM900A模塊實現短信收發功能。首先通過9針串口線將PC機與SIM900A模塊連接,打開串口調試軟件,並設置相應參數:波特率-9600、奇偶校驗-無、數據位-8、停止位-1。設置完畢,在PC機端發送AT+ENTER,當連接正常時會返回“OK”。然後輸入相應的AT命令控製GSM模塊工作,詳見下圖
圖4.1 SMS實現步驟與結果
由圖8可見,該SIM900A係統實現了短信收發功能。我們通過該SIM900A係統向電話13842894487發送一條短信“THIS IS A TEST FROM SIM900A”,由於該電話為係統本身的電話號碼,可以通過結果發現該係統收到自己發出的短信,並返回+CMTI:”SM” 21表示收到短信,並且該短信為短信存儲位置的第21條。最後通過一條語句”AT+CMGR=21”讀取該短信。
表1 SMS相關主要AT命令
4.2 TCP數據傳輸功能實現
GPRS當前廣泛應用的行業有電力、有天、工業控製、運輸、金融、證券、公共安全、天氣預報、交通信息發布等。應用特點是數據量小、發送時間間隔大以及不定時發送。利用GPRS網絡進行數據傳輸,具有成本低、組網靈活迅速、範圍廣等優勢。
4.2.1 TCP數據傳輸原理
在應用中,用戶在GPRS網絡課選擇TCP或者UDP傳輸協議。UDP不提供可靠性連接,它把應用程序傳給IP 層地數據發送出去,但是並不保證他們能到達目的地。TCP提供與UDP完全不同的服務。TCP提供一種麵向連接的可靠的字節流服務。TCP將用戶數據打包構成報文段,並在發送數據後啟動一個定時器,等待對端數據確認。另一端對收到的數據進行確認,對失序的數據重新排序,丟棄重複的數據。TCP提供端到端的流量控製,並計算和驗證一個也強製性的端到端檢驗。
麵向連接意味著兩個使用TCP的應用在彼此交換數據之前必須先建立一個TCP連接。對於其連接過程,TCP用三個報文段完成連接的建立,該過程亦稱為三次握手。而終止一個連接則需要四次握手。此外,數據發送需要結果接收方確認,並有超時重傳機製。因此,TCP在傳輸中提供了可靠的通訊保障,同時付出了增加網絡開銷的代價。
4.2.2 TCP數據傳輸實現
在本係統中,通過兩種方式實現了TCP數據傳輸功能。一、利用PC機通過串口控製SIM900A模塊實現數據傳輸功能。該方式通過9針串口線將PC機與SIM900A模塊連接,設置相應串口參數:波特率-9600、奇偶校驗-無、數據位-8、停止位-1。然後輸入相應的AT命令控製GSM模塊工作。二、利用單片機控製SIM900A模塊傳輸數據。該方式利用硬件係統上的CC2430硬件接口,CC2430為一個51內核的集CPU、無線收發模塊於一體的片上係統,在此僅當做單片機使用。通過單片機設置SIM900A連續工作,處於連續發送數據模式,對於該模式本文不做詳細介紹,隻提供相關主要程序代碼見附錄。
下麵詳細介紹PC機通過串口控製SIM900A模塊進行TCP數據傳輸的步驟:
圖4.2 建立監聽服務器
步驟一:在數據接收端建立監聽服務器。在本例中,監聽PC機端口50000,監控是否有數據到達50000端口。由圖4.2可見,服務器的IP為192.168.7.10,該IP是內部IP,由其連接的路由器提供。此處需要在接在Internet上的具有唯一地址的路由器上將發送到其上的50000端口的數據轉發到內部IP為192.168.7.10的服務器的50000端口。
圖4.3 TCP連接相關設置
圖4.3 監聽端檢測到請求連接成功
步驟二:通過串口發送相應AT命令控製SIM900A模塊進行TCP連接。此處需要進行GPRS模塊工作的相關設置,設置網絡,設置協議,設置接入點等等,並向對方IP發起連接。相關AT命令解釋詳見表2。當監聽端收到GPRS模塊端發來的連接請求,進行連接,連接成功後可以在監聽端觀察到GPRS模塊所獲得的臨時IP地址117.136.5.217(該地址為遼寧移動所有)。
表2 TCP數據傳輸相關設置命令
圖4.4 數據發送成功
步驟三:發送數據。在此,我們發送數據“This is a test for Mobile communication technology!”,在接收端可以看見,收到了該數據,從而實現了TCP數據傳輸。數據傳輸完畢發送AT命令:AT+CIPCLOSE斷開連接,結束傳輸過程。
此外,本人進行了單片機與SIM900A模塊通信的實驗,單片機控製SIM900A發送數據,連續發送一天,經過實驗結果證明,TCP數據傳輸有效性基本為100%,由於數據量巨大,在此不予列舉。僅提供實驗程序,詳見附錄1。
附錄1:CC2430控製SIM900A實現TCP相關主要程序
#include <ioCC2430.h>
#include "hal.h"
#include "string.h"
#include "stdlib.h"
//建立tcp連接
/*
//關閉tpc連接
void AT_CLOSE()
{
halUart0SendData("AT+CIPCLOSE\r\n",13);
}
//發送數據
void AT_CIPSEND(BYTE* text)
{
BYTE len=strlen(text);
halUart0SendData("AT+CIPSEND\r\n",12);
halUart0SendData(text,len);
halUart0SendData("\1A",1);
}
//查詢數據傳輸狀態
void AT_CIPACK()
{
halUart0SendData("AT+CIPACK\r\n",11);
}
//設置本地端口
void AT_CLPORT(BYTE a)
{
BYTE b = strlen(a);
halUart0SendData("AT+CLPORT=\"TCP\",",16);
halUart0SendData(a,b);
halUart0SendData("\r\n",2);
}
//激活移動場景
void AT_CIICR()
{
halUart0SendData("AT+CIICR\r\n",10);
}
//關閉移動場景
void AT_CIPSHUT()
{
halUart0SendData("AT+CIPSHUT\r\n",12);
}
//獲得本地ip
void AT_CIFSR()
{
halUart0SendData("AT+CIICR\r\n",10);
}
//查詢連接狀態
void AT_CIPSTATUS()
{
halUart0SendData("AT+CIPSTATUS\r\n",14);
}
//配置域名服務器DNS
void AT_CDNSCFG(BYTE* dns)
{
BYTE a = strlen(dns);
halUart0SendData("AT+CDNSCFG=\"",11);
halUart0SendData(dns,a);
halUart0SendData("\"\r\n",3);
}
//域名解析
void AT_CDNSGIP(BYTE* domain)
{
BYTE a=strlen(domain);
halUart0SendData("AT+CDNSGIP=\"",12);
halUart0SendData(domain,a);
halUart0SendData("\"\r\n",3);
}
//設置自動發送時間(0未設置, 1設置;time 001-100,)
void AT_CIPATS_NotAutoSend(BYTE mode)
{
halUart0SendData("AT+CIPATS=",10);
halUart0SendData(mode,1);
halUart0SendData("\r\n",2);
}
void AT_CIPATS(BYTE mode,BYTE time)
{
halUart0SendData("AT+CIPATS=",10);
halUart0SendData(mode,1);
halUart0SendData(time,3);
halUart0SendData("\r\n",2);
}
//配置為服務器(0關閉,1開啟; port 00001-65535)
void AT_CIPSERVER_CloseServer(BYTE mode)
{
halUart0SendData("AT+CIPSERVER=",13);
halUart0SendData(mode,1);
halUart0SendData("\r\n",2);
}
void AT_CIPSERVER(BYTE mode,BYTE port)
{
halUart0SendData("AT+CIPSERVER=",13);
halUart0SendData(mode,1);
halUart0SendData(port,5);
halUart0SendData("\r\n",2);
}
//配置tcpip應用模式(0 非透明,1 透明)
void AT_CIPMODE(BYTE mode)
{
halUart0SendData("AT+CIPMODE=",11);
halUart0SendData(mode,1);
halUart0SendData("\r\n",2);
}
//配置透明傳輸模式(NmRetry 3-8, 2-10,SendSz 0001-1460,esc 0-1)
void AT_CIPCCFG(BYTE NmRetry,BYTE WaitTm,BYTE SendSz,BYTE esc)
{
halUart0SendData("AT+CIPCCFG=",11);
halUart0SendData(NmRetry,1);
halUart0SendData(",",1);
halUart0SendData(WaitTm,1);
halUart0SendData(",",1);
halUart0SendData(SendSz ,4);
halUart0SendData(",",1);
halUart0SendData(esc,1);
halUart0SendData("\r\n",2);
}
//中斷通話
void ATH()
{
if(strcmp(buf,"RING)==0)
{
halUart0SendData("ATH\r\n",5);
}
}
*/
#include "hal.h"
void halUart0Init(UINT32 baudrate)
{
IO_PER_LOC_UART0_AT_PORT0_PIN2345();
// baudrate should be checked before calling UART_SETUP
// but I havn't done it yet --by allbone
UART_SETUP(0, baudrate, 0);
// Enable receive
U0CSR |= RE;
}
void halUart1Init(UINT32 baudrate)
{
IO_PER_LOC_UART1_AT_PORT1_PIN4567();
UART_SETUP(1, baudrate, 0);
// Enable receive
U1CSR |= RE;
}
void uart485_Init(void)
{
IO_PER_LOC_UART1_AT_PORT1_PIN4567();
IO_DIR_PORT_PIN(2, 0, IO_OUT);
UART_SETUP(1, 2400, 0x18);//波特率2400,奇校驗,停止位高低電平均可
// Enable receive
U1CSR |= RE;
}
void halUart0SendData(BYTE* txbuf, BYTE len)
{
BYTE i;
for(i=0;i<len;i++)
{
UART0_SEND(*(txbuf+i));
while( U0CSR & COM_TX_ACTIVE );
}
}
void halUart1SendData(BYTE* txbuf, BYTE len)
{
BYTE i;
for(i=0;i<len;i++)
{
UART1_SEND(*(txbuf+i));
while( U1CSR & COM_TX_ACTIVE );
}
}
#include "ioCC2430.h"
#include "hal.h"
void sim900a_on(void)//1MHz
{
P1_7 = 0;
halWait(25);
P1_7 = 1;
halWait(255);
halWait(255);
halWait(255);
halWait(255);
P1_7 = 0;
}
void AT_CIPSTART(void)
{
halUart0SendData("AT+CIPSTART=\"TCP\",\"202.118.67.200\",\"50000\"\r\n",42);
}
BYTE resdata[70];
uint8 resdataidx;
/************主函數部分********/
main()
{
BYTE stringlen;
halInit();//硬件初始化函數
sim900a_on();
resdataidx=0;
for(uint8 i=0;i<100;i++)
{
halWait(200);
}
halUart0Init(9600);
halWait(200);
resdataidx=0;
halUart0SendData("ATE&W\r",6);
halWait(10);
stringlen = strlen((char *)AT_at);
halUart0SendData("AT\r",stringlen);
halWait(10);
stringlen = strlen((char *)AT_cgclass);
halUart0SendData(AT_cgclass,stringlen);
halWait(10);
stringlen = strlen((char *)AT_cgdcont);
halUart0SendData(AT_cgdcont,stringlen);
halWait(10);
stringlen = strlen((char *)AT_cgatt);
halUart0SendData(AT_cgatt,stringlen);
halWait(10);
stringlen = strlen((char *)AT_cipcsgp);
halUart0SendData(AT_cipcsgp,stringlen);
halWait(10);
stringlen = strlen((char *)AT_cipstart);
halUart0SendData(AT_cipstart,stringlen);
// halWait(20);
//halUart0SendData("AT+CCID\r",8);
//halWait(20);
// AT_CIPSTART();
//sim900a_on();
while(1)
{}
}
最後更新:2017-04-03 07:57:16