<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > CAN總線(xiàn)到Ethernet網(wǎng)的網(wǎng)關(guān)研究實(shí)現

CAN總線(xiàn)到Ethernet網(wǎng)的網(wǎng)關(guān)研究實(shí)現

作者: 時(shí)間:2009-09-21 來(lái)源:網(wǎng)絡(luò ) 收藏


控制器協(xié)議模塊
控制器協(xié)議轉換模塊程序主要由SJA1000的寄存器讀、寫(xiě)程序,初始化程序和發(fā)送、接收程序5 個(gè)子程序組成。之所以要編寫(xiě)單獨的SJA1000寄存器讀、寫(xiě)子程序,這是由SX52 芯片只有I/O端口的特點(diǎn)所決定的。

(1) 讀SJA1000 寄存器子程序Read()其過(guò)程為:Re引腳設為輸出;CS片選清零;Rd引腳設為輸出;輸出地址;置位ALE;延時(shí)20 ns ;ALE位清零;Rd 引腳設為輸入;/Read 位清零;讀入數據;延時(shí)20ns ;/Read 位置位;CS片選置位;返回。

(2) 寫(xiě)SJA1000寄存器子程序CANWrite()其過(guò)程為:Re引腳設為輸出;CS片選清零;置位ALE;Rd 引腳設為輸出;輸出地址;ALE位清零;/wr位清零;輸出數據;延時(shí)20ns;CS片選置位; 返回。

(3) SJA1000初始化子程序CANInit()選用CAN2.0A協(xié)議構建CAN控制網(wǎng)絡(luò ),對SJA1000的初始化主要完成控制寄存器CR、驗收代碼寄存器ACR、驗收屏蔽寄存器AMR、定時(shí)寄存器BTR0,1和輸出控制寄存器OCR的設置。

(4) 發(fā)送接收子程序txdsub(),rxdsub()發(fā)送子程序負責節點(diǎn)報文的發(fā)送,由CAN控制器SJA1000獨立完成。主控制器SX52只需將數據緩沖區A中已按CAN2.0A協(xié)議格式組合成的一幀報文送入SJA1000 發(fā)送緩沖區中,然后將命令寄存器里的發(fā)送請求標志置位,即可發(fā)送報文。

接收子程序負責節點(diǎn)報文的接收。SJA1000自動(dòng)接收發(fā)往該節點(diǎn)的數據并將收到的數據放到它的接收緩沖器中。SJA1000 的報文接收主要有兩種方式:中斷接收方式和查詢(xún)接收方式。該系統采用查詢(xún)接收方式??梢园l(fā)送給主控制器SX52的接收信息由狀態(tài)寄存器的接收緩沖器狀態(tài)標志RBS和接收中斷標志RI 標出。SX52將會(huì )把這一幀數據包存入數據緩沖區B中,然后釋放接收緩沖器,再通知總調度程序,由總調度程序調用以太網(wǎng)控制器協(xié)議轉換模塊轉發(fā)。

以太網(wǎng)控制器協(xié)議轉換模塊
以太網(wǎng)控制器協(xié)議轉換模塊主要負責從UDP數據包中解析出完整CAN協(xié)議報文,存入數據緩沖區A。同時(shí),將數據緩沖區B中的完整CAN協(xié)議報文封裝成UDP數據報后發(fā)送到以太網(wǎng)上。采用UDP協(xié)議是考慮到CAN 協(xié)議數據報為短幀形式(每個(gè)數據幀最多為8個(gè)字節),因為T(mén)CP協(xié)議要進(jìn)行3次握手建立連接,這對網(wǎng)絡(luò )來(lái)說(shuō)無(wú)疑是一種資源的浪費。而UDP是無(wú)連接的傳輸,這樣可以提高網(wǎng)絡(luò )傳輸效率,同時(shí),也減輕的處理任務(wù)。當然,UDP是不可靠的傳輸協(xié)議。為了提高通信的可靠性,在應用層建立回傳校驗機制,通過(guò)實(shí)驗
測試表明這種方式是行之有效的。以太網(wǎng)控制器協(xié)議轉換模塊主要由若干個(gè)ARP、UDP協(xié)議的API函數組成。

TCP/IP應用層程序設計
基于以太網(wǎng)的高層通信協(xié)議一般采用TCP/IP協(xié)議。這里采用流行的SOCKET套接字編程,傳輸層協(xié)議選擇UDP(用戶(hù)數據報協(xié)議),通過(guò)VisualC++編寫(xiě)應用層程序。WinSock提供了對UDP的支持,通過(guò)UDP協(xié)議可以向指定IP 地址的發(fā)送CAN 協(xié)議數據,同時(shí)也可以從它接收CAN協(xié)議數據,發(fā)送和接收方處于相同的地位沒(méi)有主次之分。利用CAsyncSocket類(lèi)操縱無(wú)連接的數據發(fā)送較簡(jiǎn)單,首先生成一個(gè)本地套接口,然后利用int CAsyncSocket : : SendTo ( constvoid 3 1pBuf , int nBufLen , UINT nHostPort , LPCTSTR1pszHostAddress = NULL ,int nFlags = 0) 發(fā)送數據,intCAsyncSocket : : ReceiveFrom ( void 3 1pBuf , int nBufLen ,CString rSocketAddess ,UINT rSocketPort , intnFlags = 0) 接收數據。利用UDP 協(xié)議發(fā)送和接收都可以是雙向的,即管理主機和SX52都可以發(fā)送和接收數據。在程序設計中,創(chuàng )建了一個(gè)CAsyncSocket 派生類(lèi)CCanSocket ,該派生類(lèi)CCanSocket 有若干成員函數,通過(guò)這些類(lèi)成員函數,可以很方便地CAN到Internet 的通信。

結 論

  隨著(zhù)Internet技術(shù)的日益成熟測控系統網(wǎng)絡(luò )和以太網(wǎng)將漸漸融合。CAN總線(xiàn)到Internet的互聯(lián)網(wǎng)關(guān)的設計是一項具有重要意義的工作,它有非常廣闊的應用前景。

tcp/ip相關(guān)文章:tcp/ip是什么



上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>