<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于MC35i的M2M終端設(shè)計(jì)與研究

          基于MC35i的M2M終端設(shè)計(jì)與研究

          作者: 時(shí)間:2012-10-22 來源:網(wǎng)絡(luò) 收藏

          數(shù)據(jù)的封裝和傳輸

          通過GPRS進(jìn)行數(shù)據(jù)的傳輸需要經(jīng)過Internet網(wǎng)絡(luò)進(jìn)行中轉(zhuǎn),因而傳輸?shù)臄?shù)據(jù)封裝必須進(jìn)行TCP/IP協(xié)議。文中利用軟件進(jìn)行了數(shù)據(jù)封裝。需要傳輸?shù)臄?shù)據(jù)經(jīng)過傳輸層UDP協(xié)議頭封裝,然后是IP協(xié)議頭的封裝,最后進(jìn)行PPP協(xié)議的封裝。經(jīng)過封裝傳輸?shù)?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/MC35i">MC35i的數(shù)據(jù)格式如表1所示。

          將接收到的數(shù)據(jù)透明地傳輸?shù)絀nternet網(wǎng)絡(luò)中。通過Internet網(wǎng)絡(luò)路由器中轉(zhuǎn),最終將數(shù)據(jù)傳輸?shù)奖O(jiān)控中心。接收端對接收到的數(shù)據(jù)按照相應(yīng)的層次進(jìn)行解析,從而確定數(shù)據(jù)的目標(biāo)程序。

          系統(tǒng)軟件設(shè)計(jì)采用分層的結(jié)構(gòu),從底到上分別為:串口驅(qū)動層(物理層)、PPP協(xié)議層(鏈路層)、IP協(xié)議層(網(wǎng)絡(luò)層)、UDP協(xié)議和ICMP層(傳輸層)以及應(yīng)用層。在移植好的LwIP協(xié)議棧中,通過在各層中建立相應(yīng)功能的線程,實(shí)現(xiàn)數(shù)據(jù)的封裝。底層軟件為上層軟件提供函數(shù)支持,上層軟件利用底層軟件完成應(yīng)用程序的編寫和實(shí)現(xiàn)。軟件采用自底向上的設(shè)計(jì)方法逐步實(shí)現(xiàn)系統(tǒng)中各個(gè)函數(shù)的功能,各部分函數(shù)實(shí)現(xiàn)均采用模塊化的設(shè)計(jì)方法。每個(gè)任務(wù)對應(yīng)一個(gè)模塊。對每個(gè)任務(wù)單獨(dú)進(jìn)行設(shè)計(jì)后,最終由FreeRTOS操作系統(tǒng)統(tǒng)一管理,通過采用信號量和郵箱的方式實(shí)現(xiàn)多個(gè)任務(wù)之間的通信,軟件各部分主要函數(shù)之間的關(guān)系如圖3所示。


          在MC35SerialISR()中將接收的數(shù)據(jù)存放到xQRxChars隊(duì)列中后,發(fā)送SemMC35Rx信號量來激活PPPRxTask()任務(wù),通過對接收數(shù)據(jù)的解析,確定數(shù)據(jù)包的類型,然后由相應(yīng)的函數(shù)對接收數(shù)據(jù)進(jìn)行處理。

          如果接收的數(shù)據(jù)是應(yīng)用程序的數(shù)據(jù),將由IPRx()函數(shù)判斷目標(biāo)主機(jī)是否正確,再經(jīng)過傳輸層解析數(shù)據(jù)從而判定對數(shù)據(jù)處理的應(yīng)用程序。最后由應(yīng)用程序解析數(shù)據(jù)并執(zhí)行相應(yīng)的功能,如將數(shù)據(jù)通過串口發(fā)送到主機(jī)、向數(shù)據(jù)采集系統(tǒng)發(fā)送控制命令、接收數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)并發(fā)送等。當(dāng)接收隊(duì)列中所有數(shù)據(jù)均處理完畢后,延時(shí)250ms如果還沒有接收到數(shù)據(jù),則任務(wù)通過等待信號量SemMC35Rx將自己掛起。數(shù)據(jù)的發(fā)送過程是一個(gè)相反的過程。應(yīng)用程序根據(jù)需要的功能建立UDPTxTask()或ICMPTxTask()任務(wù),并將數(shù)據(jù)發(fā)送到xAPPTxQ隊(duì)列中。相應(yīng)的任務(wù)再調(diào)用IPTx()和PPPTx()函數(shù)進(jìn)行數(shù)據(jù)的封裝并將數(shù)據(jù)發(fā)送到XqTxChar隊(duì)列中,從而喚醒MC35SerialISR()中斷程序?qū)?shù)據(jù)通過串口發(fā)送到中進(jìn)行傳輸。為提高系統(tǒng)的實(shí)時(shí)性,本文中FreeRTOS采用可剝奪內(nèi)核方式進(jìn)行調(diào)度。采用FreeRTOS操作系統(tǒng)對任務(wù)進(jìn)行管理簡化了軟件的編寫難度,同時(shí)提高了程序的可讀性和可移植性。

          結(jié)語

          基于GPRS M2M產(chǎn)品的無線數(shù)據(jù)傳輸以及遠(yuǎn)程監(jiān)控系統(tǒng)是目前國內(nèi)外研究的熱點(diǎn)。本文采用完全免費(fèi)的操作系統(tǒng)和TCP/IP協(xié)議棧給出的系統(tǒng)設(shè)計(jì)方案具備成本低、性能好、可升級等優(yōu)點(diǎn),為遠(yuǎn)程監(jiān)控系統(tǒng)相關(guān)領(lǐng)域的數(shù)據(jù)傳輸提供了一個(gè)可行的設(shè)計(jì)方案。



          參考文獻(xiàn):

          [1]. GPRS datasheet http://www.dzsc.com/datasheet/GPRS_1594650.html.
          [2]. MC35i datasheet http://www.dzsc.com/datasheet/MC35i_1136952.html.
          [3]. datasheet http://www.dzsc.com/datasheet/_143844.html.
          [4]. RS232 datasheet http://www.dzsc.com/datasheet/RS232_585128.html.
          [5]. CS-1 datasheet http://www.dzsc.com/datasheet/CS-1_2525798.html.
          [6]. CS-4 datasheet http://www.dzsc.com/datasheet/CS-4_2331612.html.
          [7]. ARM7TDMI datasheet http://www.dzsc.com/datasheet/ARM7TDMI_139812.html.
          [8]. UA7805 datasheet http://www.dzsc.com/datasheet/UA7805_669157.html.
          [9]. 1N5819 datasheet http://www.dzsc.com/datasheet/1N5819_1063816.html.
          [10]. REG1117-3.3 datasheet http://www.dzsc.com/datasheet/REG1117-3.3_576588.html.


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: MC35i M2M終端 AT91SAM7S64

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();