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

          新聞中心

          EEPW首頁 > 汽車電子 > 設(shè)計(jì)應(yīng)用 > CAN/GPRS無線車載網(wǎng)關(guān)的設(shè)計(jì)與實(shí)現(xiàn)

          CAN/GPRS無線車載網(wǎng)關(guān)的設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2009-03-25 來源:網(wǎng)絡(luò) 收藏

          使用韓國 MIZI 公司開發(fā)的VIVI 作為bootloader、選擇2.6 內(nèi)核的ARM-Linux 作為嵌入式操作系統(tǒng),并用busybox 制作Linux 的根文件系統(tǒng)。在K9F1208 NAND Flash 芯片上存儲(chǔ)區(qū)域的劃分如表1 所示。

          本文引用地址:http://www.ex-cimer.com/article/197886.htm

          4.2 ARM-Linux 下SPI 驅(qū)動(dòng)程序編寫
          使用 S3C2410 自帶的SPI 通道0 與MCP2510 進(jìn)行通信,其SPI 驅(qū)動(dòng)程序流程[3]如下:
          (1)寫SPPRE0 寄存器,設(shè)置波特率。
          (2)寫SPCON0 寄存器,設(shè)置數(shù)據(jù)傳輸為0,0SPI 模式。
          (3)向SPIDAT0 寄存器寫10 次0xFF,以初始化MCP2510。
          (4)設(shè)置GPIO 引腳,用來充當(dāng)片選,設(shè)定低電平以激活MCP2510。
          (5)檢查SPSTA0 寄存器的發(fā)送狀態(tài)位REDY 是否為1,若是,則可以向SPTDAT0 寄存器寫數(shù)據(jù)并發(fā)送出去。
          (6)SPCON0 寄存器的TAGD 不使能,向SPTDAT0 寄存器寫入0xFF,在確認(rèn)REDY 有效后,可從SPRDAT0 寄存器中讀數(shù)據(jù);TAGD 使能,確認(rèn)REDY 后,也可從SPRDAT0 寄存器中讀數(shù)據(jù)。
          (7)設(shè)置GPIO 引腳,信號(hào)設(shè)為高電平,片選不使能。
          4.3 ARM-Linux 下 驅(qū)動(dòng)程序編寫
          因?yàn)? 應(yīng)用層協(xié)議是基于2.0B 技術(shù)規(guī)范設(shè)計(jì)的,所以通信報(bào)文采用CAN2.0B擴(kuò)展幀格式。
          初始化:(1)發(fā)送0xc0 復(fù)位指令,MCP2510 復(fù)位;(2)進(jìn)入配置模式,設(shè)置CAN 總線波特率,關(guān)中斷;(3) 設(shè)置屏蔽寄存器RXM(0、1)SID(L/H)、RXM(0、1)EID(8/0)和濾波寄存器RXF(0~5)SID(L/H)、RXF(0、1)EID(8/0)并啟動(dòng);(4)設(shè)置CAN 設(shè)備為普通模式并切換到正常模式;(5)清空接收和發(fā)送緩沖區(qū)。(6)開啟接收或發(fā)送緩沖區(qū),開啟中斷。發(fā)送報(bào)文:(1)寫標(biāo)識(shí)符寄存器TXB(0~2)SID(L/H)、TXB(0~2)EID(8/0);(2)向發(fā)送緩沖器數(shù)據(jù)長度寄存器TXB(0~2)DLC 寫入要發(fā)送的報(bào)文長度;(3) 寫數(shù)據(jù)時(shí),需依次向MCP2510 發(fā)送0x02 寫指令、發(fā)送緩沖器數(shù)據(jù)寄存器TXB(0~2)DM 的8 位地址碼和需要發(fā)送的報(bào)文數(shù)據(jù);(4)必須進(jìn)行發(fā)送有效性檢測(cè),即:檢測(cè)發(fā)送緩沖器控制寄存器TXB(0~2)CTRL 的TXREQ 位。為1 時(shí),說明正在發(fā)送報(bào)文,須等待;當(dāng)此報(bào)文發(fā)送完畢后,該位將被自動(dòng)清零,這時(shí)才可寫入下一個(gè)將要發(fā)送的報(bào)文數(shù)據(jù)。接收?qǐng)?bào)文:(1) 向MCP2510 發(fā)送0xA0 狀態(tài)讀指令,并不斷檢測(cè)中斷標(biāo)志寄存器CANINTF,當(dāng)發(fā)現(xiàn)RX(0、1)IF 位為1,說明接收緩沖器已收到報(bào)文;(2)這時(shí)可從接收緩沖器標(biāo)識(shí)符寄存器中讀出幀的ID,從接收緩沖器數(shù)據(jù)長度寄存器RX(0、1)BDLC 讀出收到的報(bào)文長度;(3)讀數(shù)據(jù)時(shí),需依次向MCP2510 發(fā)送0x03 讀指令、接收緩沖器數(shù)據(jù)寄存器RXB(0、1)DM 的8 位地址碼后MCP2510 才會(huì)將數(shù)據(jù)通過SO 引腳發(fā)送出來。讀完數(shù)據(jù),RX(0、1)IF 位需清零。
          4.4 ARM-Linux 下串口驅(qū)動(dòng)程序修改及加載
          因?yàn)槲覀兪褂玫氖桥c 16c550 寄存器兼容的UART 控制器芯片SC16C550,所以需要加載其在Linux 下的驅(qū)動(dòng)程序serial_8250.c。但SC16C550 芯片是通過外部總線和S3C2410 微處理器連接的,所以在驅(qū)動(dòng)程序的serial8250_isa_init_ports 函數(shù)中需加入對(duì)SC16C550 芯片所在Bank 空間的初始化,包括設(shè)置讀/寫時(shí)序、速度和總線寬度等信息[4]。
          4.5 ARM-Linux 下 聯(lián)網(wǎng)
          通過PPP(Point-to-Point Protocol,點(diǎn)對(duì)點(diǎn)協(xié)議)來完成聯(lián)網(wǎng)。PPP 是在直接連接的串行鏈路上創(chuàng)建和運(yùn)行IP 網(wǎng)際協(xié)議或其他網(wǎng)絡(luò)協(xié)議的一個(gè)方案。在ARM-Linux 下對(duì)PPP的支持需要內(nèi)核和應(yīng)用程序配合管理。對(duì)于Linux2.6 內(nèi)核,在配置內(nèi)核時(shí)需要選擇對(duì)PPP的支持,如:在Network device support 菜單下,選擇支持PPP 協(xié)議、PPP 異步/同步串口通信和PPP 壓縮。此外,還需要移植Linux 下PPP 的應(yīng)用程序工具包,即把交叉編譯后得到的pppd、chat 程序加入根文件系統(tǒng)。在根文件系統(tǒng)的/etc/ppp 目錄下,還需編寫3 個(gè)腳本文件:options(pppd 配置腳本)、gprs-connect(pppd 連接腳本)、gprs-disconnect(pppd 斷開腳本)。在options 腳本中需指定串口控制臺(tái)設(shè)備/dev/ttse/0、連接波特率115200、連接和斷開腳本的存放路徑; 在gprs-connect 腳本中運(yùn)行chat 程序, 并指定APN 接入點(diǎn), 如:'AT+CGDCONT=1,IP,CMNET,,0,0'和ISP 呼叫號(hào)碼:'ATD*99***1#'等。這樣系統(tǒng)啟動(dòng)
          后,直接使用pppd 命令即可實(shí)現(xiàn) 接入互聯(lián)網(wǎng)。
          4.6 CAN 應(yīng)用層協(xié)議與UDP 或TCP 協(xié)議轉(zhuǎn)換
          因?yàn)?GPRS 網(wǎng)絡(luò)是建立在TCP/IP 協(xié)議基礎(chǔ)上的,所以通過GPRS 網(wǎng)絡(luò)與Internet 遠(yuǎn)程服務(wù)器通信可以使用UDP 或TCP 協(xié)議。由于S3C2410 上不僅移植了Arm-Linux 操作系統(tǒng),其本身已支持TCP/IP 協(xié)議,而且我們也把CAN 的應(yīng)用層協(xié)議加載了上去。所以在網(wǎng)關(guān)上發(fā)送數(shù)據(jù)時(shí),只需將汽車CAN 網(wǎng)上的CAN 數(shù)據(jù)包數(shù)據(jù)域中的數(shù)據(jù)加上UDP 或TCP包頭即可發(fā)送出去;當(dāng)在網(wǎng)關(guān)上接收數(shù)據(jù)時(shí),只需去掉UDP 或TCP 數(shù)據(jù)包的包頭,得
          到的數(shù)據(jù)可以遵照CAN 應(yīng)用層協(xié)議的報(bào)文格式向CAN 網(wǎng)上發(fā)送。協(xié)議轉(zhuǎn)換如圖4 所示。

          4.7 心跳程序的實(shí)現(xiàn)
          因?yàn)?CAN/GPRS 無線網(wǎng)關(guān)與Internet 遠(yuǎn)程服務(wù)器通信時(shí),可能會(huì)出現(xiàn)連接的異常情況,所以需要使用心跳程序來檢測(cè)異常情況的發(fā)生,并通過心跳程序重新?lián)芴?hào)來保證無線通信鏈路的正常連接[5]。我們可以定時(shí)Ping 遠(yuǎn)程服務(wù)器,若能Ping 通,則表示無線通信鏈路工作正常;若多次無法Ping 通,則必須斷開連接,重新?lián)芴?hào)。
          5 結(jié)論
          本文詳細(xì)介紹了 CAN/GPRS 無線網(wǎng)關(guān)的實(shí)現(xiàn),所實(shí)現(xiàn)的網(wǎng)關(guān)在實(shí)驗(yàn)通信網(wǎng)絡(luò)中能較好地完成汽車內(nèi)部CAN 網(wǎng)數(shù)據(jù)信息與外界的交互任務(wù),并能長時(shí)間穩(wěn)定運(yùn)行,基本上達(dá)到了工作要求。
          本文作者創(chuàng)新點(diǎn):在CAN/GPRS 無線網(wǎng)關(guān)上能成功地運(yùn)行ARM-Linux 嵌入式操作系統(tǒng)、心跳程序和底層硬件驅(qū)動(dòng)程序,完成了CAN 應(yīng)用層協(xié)議與TCP 或UDP 協(xié)議的轉(zhuǎn)換,使得汽車內(nèi)部CAN 網(wǎng)能與外界進(jìn)行無線數(shù)據(jù)通信。


          上一頁 1 2 下一頁

          關(guān)鍵詞: GPRS CAN 無線 車載

          評(píng)論


          相關(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); })();