基于C8051F040單片機的CAN總線測試模式研究
摘要:現場總線已成為數據總線領域中最為活躍的熱點,CAN總線被公認為最有前途的現場總線之一,CAN總線節點的設計、調試是CAN總線通訊系統設計的重點。在此介紹了C8051F040單片機內部集成的CAN控制器,并基于C8051F040單片機設計了一個CAN通信節點,并給出了CAN節點測試模式軟件設計程序,可以用于CAN總線模塊的測試,節省測試時間。
關鍵詞:C8051F040;CAN總線;測試模式;CAN控制器
現場總線能同時滿足過程控制和制造業自動化的需求,因而現場總線已成為數據總線領域中最為活躍的一個領域。現場總線的研究和應用已成為數據總線領域的熱點。CAN總線(Controller Area Network)屬于現場總線的范疇,它是一種支持分布式控制和實時控制的串行通信網絡。CAN總線是德國博士公司在20世紀80年代為解決現代汽車中眾多的控制和測試儀器之間的數據通信而開發的一種串行通信協議。由于其高性能、高可靠性、及獨特的設計,CAN總線越來越受到人們的重視,其應用領域不再局限于汽車工業,而向過程工業、機械工業、紡織工業、農用機械、傳感器以及航空航天等領域發展。被公認為最有前途的現場總線之一。
1 引言
Cygnal公司開發的51系列單片機C8051F040是完全集成的混合信號系統型微控制器,其上集成可實現全功能CAN的CAN總線控制器,完全符合CAN規范2.0A和2.0B。本文利用C8051F040單片機上集成的CAN控制器,外接一個CAN收發器(PCA82C250)設計了一個CAN通信節點的硬件電路,然后詳細介紹了CAN控制器測試模式的實現,可以應用于CAN通信節點的調試測試。
2 C8051F040單片機上集成的CAN控制器
CAN控制器包括CAN核,消息存儲器,消息處理器,控制寄存器和模塊接口等幾部分。CAN核用于協議控制和消息的串并轉換;消息存儲器用于存儲消息對象和標志符;消息處理器用于控制CAN核和消息存儲器之間的數據傳輸;控制寄存器用于控制和配置CAN控制器;模塊接口用于MCU與CAN控制器之間交換數據。C8051F040單片機上集成的CAN控制器的消息存儲器上可以存儲32個消息對象,均可以被配置為發送或接收對象。CAN總線協議處理由CAN控制器獨立完成,不用MCU干預,因此CAN通信占用的CPU帶寬很小,C8051F040集成CAN控制器原理如圖1所示。
3 CAN控制器工作模式
C8051F040單片機上集成的CAN控制器主要有2種工作模式:正常工作模式和測試模式。可以通過將CAN控制器寄存器中的Test位置1,進入測試模式。在測試模式下,測試寄存器中的Tx1,Tx0,LBack,Silent以及Basic位均是可寫的。將Test位置0后,測試寄存器的所有功能將被禁止。測試模式又可細分為沉默模式(又叫監測模式)、回送模式、基本模式以及回送和沉默模式結合等4種工作模式。通過將測試寄存器
中的Silent位置1,可將CAN核設置為沉默模式。在沉默模式下,CAN核能夠接收有效數據幀和有效遠程幀,但是只能在總線上發送隱性位而不能進行傳輸。圖2為在沉默模式下CAN_TX和CAN_RX信號同CAN核的聯系。通過將測試寄存器的LBack位置1,可以將CAN核設置為回送模式。在回送模式下,CAN核將它發送的消息當作接收到的消息對待,并存儲在接收緩存中。
圖3為在回送模式下CAN_TX和CAN_RX信號同CAN核的聯系。通過將LBack和Silent同時置1,可以將回送模式和沉默模式結合。這種模式可以應用于熱自檢,可以在不影響CAN系統運行的情況下,對CAN節點進行自檢。在這種模式下,CAN_RX引腳與CAN核斷開,CAN_TX引腳被保持為隱性位。圖4為在這種模式下CAN_TX和CAN_RX信號同CAN核的聯系。若將測試寄存器中的Basic置1,CAN核便工作于基本模式下。在這種模式下消息存儲器不工作,即不用消息隊列緩存交換數據,而把IF1寄存器用作傳輸緩存,把IF2寄存器用作接收緩存。
4 CAN通信節點硬件設計
C8051F040上集成的CAN控制器是一個協議控制器,不能提供物理層驅動,需要外接CAN收發器才能掛接在CAN網絡上與其他節點通信。本文采用PCA82C250收發器作為物理層驅動器。若在CAN控制器和PCA82C250之間加入光藕隔離器件可以提高系統的穩定性和可靠性,但這會增加系統的復雜性。本文的目的主要是調試CAN控制器的測試模式,所以沒有使用光藕隔離器件。CAN通信節點原理圖如圖5所示。
5 軟件設計
基于C8051F040的CAN通信節點的軟件設計主要包括3個部分:CAN節點初始化、報文發送和報文接收。熟悉這3部分程序的設計,就能寫出普通的CAN通信程序。
5.1 CAN初始化
初始化CAN控制器的一般步驟如下:
(1)將SFRPAGE寄存器設置為CAN0_PAGE。
(2)將CAN0CN寄存器的INIT和CCE位設置為“1”。
(3)設置時序參數。
(4)啟動CAN控制器。
由于本文要研究的是測試模式,所以最后要進入測試模式。
評論