基于CAN總線與以太網(wǎng)的嵌入式網(wǎng)關(guān)設(shè)計(jì)
(1)晶振電路的問(wèn)題。89C55和SJA1000都應(yīng)該有各自獨(dú)立的晶振電路,不能夠用SJA1000的時(shí)鐘輸出信號(hào)CLKOUT來(lái)驅(qū)動(dòng)單片機(jī)。
(2)復(fù)位引腳的問(wèn)題。雖然SJA1000的復(fù)位是低電平,但不能通過(guò)一個(gè)非門(mén)直接連接單片機(jī)的復(fù)位引腳。一般對(duì)解決復(fù)位引腳問(wèn)題有兩種方式:第一種是使用單片機(jī)的I/O引腳控制SJA的復(fù)位引腳,其好處是單片機(jī)可以完全控制SJA的復(fù)位過(guò)程;第二種是采用適當(dāng)?shù)膹?fù)位芯片,為了降低成本,該設(shè)計(jì)采取的是第一種方法。
(3)RX1引腳的電位必須維持在約0.5 VCC上,否則將不能形成CAN協(xié)議所要求的邏輯電平。
(4)一定要注意電纜的終端阻抗匹配,它直接影響CAN總線是否能正常工作和網(wǎng)絡(luò)性能。CAN接口模塊的硬件電路圖見(jiàn)圖3,在PCA82C250的RS腳上接有一個(gè)斜率電阻R,可根據(jù)總線通信速度適當(dāng)調(diào)整電阻的大小。本文引用地址:http://m.butianyuan.cn/article/152371.htm
2 通信模塊軟件設(shè)計(jì)
2.1 SJA1000驅(qū)動(dòng)程序的實(shí)現(xiàn)
SJA1000驅(qū)動(dòng)程序是由SJA的初始化函數(shù)、發(fā)送函數(shù)、接收函數(shù)組成的,圖4所示為其流程圖。
(1)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)。
(2)數(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ū)即可。
評(píng)論