基于CAN總線與以太網(wǎng)的嵌入式網(wǎng)關(guān)設(shè)計(jì)
圖4 SJA1000驅(qū)動(dòng)程序流程
?。?)SJA1000的初始化。SJA1000在系統(tǒng)上電、硬件復(fù)位或主控制器發(fā)出復(fù)位命令后需要進(jìn)行初始化,以設(shè)定它的工作模式、通信速率、輸出控制方式和標(biāo)識(shí)符屏蔽格式等重要參數(shù)。CAN控制器SJA1000的初始化只能在復(fù)位模式下才能完成。程序的流程圖如圖4所示。
首先程序檢測(cè)CAN接口是否正常工作,即向SJA1000的測(cè)試寄存器寫(xiě)入并讀出,校驗(yàn)其結(jié)果是否一致,如果結(jié)果一致則進(jìn)入復(fù)位模式進(jìn)行初始化設(shè)置。在初始化的過(guò)程中,如果對(duì)某個(gè)寄存器的設(shè)置超過(guò)規(guī)定的時(shí)間還未完成,則認(rèn)為初始化失敗,初始化程序自動(dòng)發(fā)送錯(cuò)誤信號(hào)。
?。?)數(shù)據(jù)的發(fā)送與接收。SJA1000芯片有一個(gè)報(bào)文發(fā)送緩沖區(qū)和兩個(gè)報(bào)文接收緩沖區(qū),用于CAN報(bào)文傳送。數(shù)據(jù)從CAN控制器SJA1000發(fā)送到 CAN總線首先是由CAN控制器自動(dòng)完成的,發(fā)送數(shù)據(jù)程序把數(shù)據(jù)存儲(chǔ)區(qū)中待發(fā)送的數(shù)據(jù)取出,組成信息幀,并將主機(jī)的ID地址填人幀頭;然后將信息幀發(fā)送到 CAN控制器的發(fā)送緩沖區(qū);最后啟動(dòng)發(fā)送命令即可。信息從CAN總線到CAN接收緩沖區(qū)也是由CAN控制器自動(dòng)完成的。接收程序只需從接收緩沖區(qū)讀取要接收的信息,并將其存儲(chǔ)在數(shù)據(jù)存儲(chǔ)區(qū)即可。
2.2 RTL8019AS驅(qū)動(dòng)程序的實(shí)現(xiàn)
RTL8019AS的驅(qū)動(dòng)程序和SJA的驅(qū)動(dòng)程序一樣,有3種功能:芯片初始化、收包、發(fā)包。
?。?)RTL8019AS的初始化。RTL8019AS的初始化過(guò)程比較復(fù)雜,但十分重要,它決定了通信過(guò)程中的一些重要參數(shù)。如設(shè)置相關(guān)工作模式的寄存器,分配和初始化接收及發(fā)送緩沖區(qū),初始化網(wǎng)卡接收地址等,其流程圖見(jiàn)圖5所示。
圖5 RTL8019AS的初始化流程圖
?。?)數(shù)據(jù)的發(fā)送與接收。因?yàn)樵赗TL8019AS的初始化程序中已經(jīng)完成了以太網(wǎng)的物理地址設(shè)置,并指定了發(fā)送緩沖區(qū)起始頁(yè)面地址寄存器TPSR.此外,RTL8019AS的CRC校驗(yàn)自動(dòng)生成器也被使能,所以RTL8019AS的數(shù)據(jù)包發(fā)送程序相對(duì)要簡(jiǎn)單。在數(shù)據(jù)包的發(fā)送過(guò)程中,AT89C55只要通過(guò)遠(yuǎn)程DMA將待發(fā)送的數(shù)據(jù)包寫(xiě)至RTL8019AS片內(nèi)SRAM的發(fā)送緩沖區(qū),并啟動(dòng)發(fā)送過(guò)程即可。
在接收數(shù)據(jù)包時(shí),有查詢和中斷兩種方式,鑒于AT89C55的處理能力有限,在該設(shè)計(jì)中采用查詢方式,根據(jù)判斷CURB==BNRY+1,可以判斷是否收到新的數(shù)據(jù)包,如果有則通過(guò)DMA讀操作從網(wǎng)卡芯片RAM讀出數(shù)據(jù)。
2.3 網(wǎng)關(guān)協(xié)議轉(zhuǎn)換流程
嵌入式網(wǎng)絡(luò)接口實(shí)現(xiàn)兩種網(wǎng)絡(luò)的互連。當(dāng)以太網(wǎng)應(yīng)用層有數(shù)據(jù)要發(fā)送到CAN節(jié)點(diǎn)時(shí),首先將數(shù)據(jù)發(fā)送到網(wǎng)關(guān),由以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊解析完整的CAN協(xié)議數(shù)據(jù)包,通過(guò)CAN控制器發(fā)送到CAN總線。反之,當(dāng)CAN設(shè)備有數(shù)據(jù)要發(fā)送到用戶層時(shí),首先將數(shù)據(jù)發(fā)送到透明網(wǎng)關(guān),由CAN控制器協(xié)議模塊將完整的 CAN協(xié)議數(shù)據(jù)包存放在緩沖區(qū),再通知主控芯片,由它調(diào)用以太網(wǎng)控制協(xié)議轉(zhuǎn)換模塊,將完整的 CAN協(xié)議數(shù)據(jù)包作為應(yīng)用層數(shù)據(jù)封裝起來(lái),再發(fā)送到以太網(wǎng)的應(yīng)用層。
3 結(jié)語(yǔ)
這里介紹的是一種低成本、高可靠性、快捷的CAN以太網(wǎng)網(wǎng)關(guān)的硬件、軟件設(shè)計(jì)方案,通過(guò)實(shí)際應(yīng)用證明,該設(shè)計(jì)可以作為CAN總線節(jié)點(diǎn)的一個(gè)模塊,能夠與儀器儀表等設(shè)備相結(jié)合,使其具有網(wǎng)絡(luò)通信的能力,比較同類產(chǎn)品的設(shè)計(jì),該設(shè)計(jì)能大大提高其性價(jià)比。
評(píng)論