基于C8051F040的CAN總線與RS-232通信設(shè)計(jì)
摘要:為了實(shí)現(xiàn)對CAN總線和RS-232串口雙向通信需求,提出了一種基于C8051F040單片機(jī)的數(shù)據(jù)通信方案,并完成系統(tǒng)設(shè)計(jì)。分析了CAN總線和RS-232串口的通信特點(diǎn),介紹了單片機(jī)硬件,并對軟件的設(shè)計(jì)思路與流程做了詳盡描述,完成功能檢測。實(shí)驗(yàn)結(jié)果表明,該設(shè)計(jì)達(dá)到了要求。
本文引用地址:http://www.ex-cimer.com/article/201809/388275.htm目前工業(yè)設(shè)備之間的通信很多采用RS-232接口,但由于RS-232通信距離短、接口易損,而且只能進(jìn)行點(diǎn)到點(diǎn)通信,不能直接組成多點(diǎn)通信網(wǎng)絡(luò)。而CAN通信速率高、容易實(shí)現(xiàn)、且性價(jià)比高等諸多特點(diǎn),本文介紹一種可以實(shí)現(xiàn)RS-232與CAN總線通信的方法,以更好地適應(yīng)現(xiàn)代工業(yè)發(fā)展的需要。
控制器局域網(wǎng)CAN(Controller Area Network)是德國Bosch公司為解決現(xiàn)代汽車中眾多的控制與測試儀器之間的數(shù)據(jù)交換而應(yīng)用開發(fā)的一種通信協(xié)議。在國外,尤其是歐洲,CAN網(wǎng)絡(luò)已被廣泛地應(yīng)用在汽車上,如BENZ、BMW、PORSCHE、ROLLS、ROYCE、JAGUAR等車。
它是一種串行通信網(wǎng)絡(luò),支持分布式實(shí)時(shí)控制,最大傳輸速度可達(dá)1 Mbids,最大傳輸距離為10 km。CAN規(guī)范已被ISO國際標(biāo)準(zhǔn)組織制訂為國際標(biāo)準(zhǔn),即CAN標(biāo)準(zhǔn),現(xiàn)在最常用的是2.0標(biāo)準(zhǔn),分為2.0A和2.0B。其區(qū)別僅在通信數(shù)據(jù)位數(shù),前者是11位的標(biāo)準(zhǔn)幀,后者是29位的擴(kuò)展幀。CAN協(xié)議建立在國際標(biāo)準(zhǔn)組織的開放系統(tǒng)互連參考模型基礎(chǔ)上的,主要工作在數(shù)據(jù)鏈路層和物理層,用戶可在其基礎(chǔ)上開發(fā)適合系統(tǒng)實(shí)際需要的應(yīng)用層通信協(xié)議。而串口RS-232作為標(biāo)準(zhǔn)計(jì)算機(jī)串行接口,與CAN網(wǎng)的結(jié)構(gòu)、通信協(xié)議、傳輸特性等方面都不相同,所以不同設(shè)備間無法進(jìn)行直接通信。因此實(shí)現(xiàn)二者之間的信息數(shù)據(jù)交互成為問題的關(guān)鍵。
本設(shè)計(jì)完成了CAN總線與RS-232軟件設(shè)計(jì)。本設(shè)計(jì)的創(chuàng)新點(diǎn)是:CAN總線與RS-232接口數(shù)據(jù)通信速率以及通信幀格式都不同,解決了這兩點(diǎn)不同,從而實(shí)現(xiàn)了數(shù)據(jù)在CAN總線與RS-232接口之間的交互傳輸。本文完成了基于C8051F040單片機(jī)控制的CAN與RS-232轉(zhuǎn)換的研究與設(shè)計(jì),設(shè)計(jì)了C8051F040單片機(jī)對RS-232串口和CAN總線的控制,解決了CAN總線與RS-232接口數(shù)據(jù)通信速率以及通信幀格式不同的技術(shù)問題,實(shí)現(xiàn)了RS-232接口數(shù)據(jù)與CAN總線數(shù)據(jù)的相互傳輸。
1 概述
1. 1 CAN總線
Silicon Labs CAN的工作位速率可達(dá)1M位/秒,實(shí)際速率可能受CAN總線上所選擇的傳輸數(shù)據(jù)的物理層的限制。CAN處理器有32個(gè)消息對象,可以被配置為發(fā)送或接收數(shù)據(jù)。輸入數(shù)據(jù)、消息對象及其標(biāo)識(shí)掩碼存儲(chǔ)在CAN消息RAM中。
標(biāo)準(zhǔn)CAN的標(biāo)志符長度是11位,而擴(kuò)展格式CAN的標(biāo)志符長度可達(dá)29位。CAN協(xié)議2.0A版本規(guī)定CAN控制器必須有一個(gè)11位的標(biāo)識(shí)符。而2.0B版本中規(guī)定,CAN控制器的標(biāo)志符長度可以是11位或者29位。遵循CAN2.0B協(xié)議的CAN控制器可以發(fā)送和接收11位標(biāo)識(shí)符的標(biāo)準(zhǔn)格式報(bào)
文或29位標(biāo)識(shí)符的標(biāo)準(zhǔn)格式報(bào)文。如果禁止CAN2.0B,則CAN控制器只能發(fā)送和接收11位標(biāo)識(shí)符的標(biāo)準(zhǔn)格式報(bào)文,而忽略擴(kuò)展格式的報(bào)文結(jié)構(gòu),但不會(huì)出現(xiàn)錯(cuò)誤。C8051F040所集成的CAN控制器為2.0B。
數(shù)據(jù)幀是攜帶數(shù)據(jù)由發(fā)送器至接收器的幀,是CAN的4種幀格式之一,這4種幀格式分別是數(shù)據(jù)幀、遠(yuǎn)程幀、出錯(cuò)幀和超載幀,其中數(shù)據(jù)幀結(jié)構(gòu)如圖1所示。
CAN總線數(shù)據(jù)幀由7個(gè)不同的位場組成:幀起始(stsrt of frame)、仲裁場(arbitration frame)、控制場(control frame)、數(shù)據(jù)場(data frame)、CRC場(CRC frame)、應(yīng)答場(ACK frame)和幀結(jié)尾(end of frame)。數(shù)據(jù)場的長度可以為0。
1)幀起始:標(biāo)志數(shù)據(jù)幀的起始,僅由一個(gè)“顯性”位組成,只在總線空閑時(shí)才允許節(jié)點(diǎn)開始發(fā)送信號(hào);2)仲裁場:標(biāo)準(zhǔn)格式幀與擴(kuò)展格式幀的仲裁場格式不同。標(biāo)準(zhǔn)格式里,仲裁場由11位識(shí)別符和遠(yuǎn)程發(fā)送請求位組成,識(shí)別符位為ID-28~I(xiàn)D-18。擴(kuò)展格式里,仲裁場包括29位識(shí)別符、替代遠(yuǎn)程請求位、識(shí)別符擴(kuò)展位和遠(yuǎn)程發(fā)送請求位。其識(shí)別符為ID-28~I(xiàn)D-0;3)控制場:由6個(gè)位構(gòu)成,前2位為保留位,為顯性,后4位為數(shù)據(jù)長度碼,表示數(shù)據(jù)場中數(shù)據(jù)的字節(jié)數(shù),必須在0~8范圍內(nèi)變化;4)數(shù)據(jù)場:由被發(fā)送數(shù)據(jù)組成,數(shù)目為控制場中決定的0~8個(gè)字節(jié),第一個(gè)字節(jié)的最高位首先被發(fā)送;5)CRC場:包括CRC序列和CRC界定符;6)ACK場:長度為2位,包含應(yīng)答間隙和應(yīng)答界定符;7)幀結(jié)尾:由7個(gè)位“隱形”位組成,此期間無位填充。
1. 2 RS-232
RS-232是PC機(jī)與通信工業(yè)中應(yīng)用最廣泛的一種串行接口,具有連線簡單、通訊距離長等優(yōu)點(diǎn)。同樣也有一些缺點(diǎn),接口的信號(hào)電平值較高,易損壞接口電路的芯片,傳輸速率較低,傳輸距離有限等。RS-232被定義為在低速率串行通訊中增加通訊距離的單端標(biāo)準(zhǔn)。RS-232采取不平衡傳輸方式,即所謂單端通訊。UART通信可用查詢TI和RI或通過中斷來控制通信。UART有兩種中斷源:數(shù)據(jù)發(fā)送完畢時(shí),TI置1;數(shù)據(jù)完整接受到時(shí),RI置1。TI和RI中任何一個(gè)標(biāo)志位置1,均能引發(fā)UART中斷。TI和RI中斷標(biāo)志位需軟件清0。
2 系統(tǒng)硬件描述
Cygnal公司的51系列單片機(jī)C8051F040是集成在一塊芯片上的混合信號(hào)系統(tǒng)級單片機(jī),在一個(gè)芯片內(nèi)集成了構(gòu)成一個(gè)單片機(jī)數(shù)據(jù)采集或控制的智能節(jié)點(diǎn)所需要的幾乎所有模擬和數(shù)字外設(shè)以及其他功能部件,代表了目前8位單片機(jī)控制系統(tǒng)的發(fā)展方向。芯片上有1個(gè)12位多通道ADC,2個(gè)12位DAC,2個(gè)電壓比較器,1個(gè)電壓基準(zhǔn),1個(gè)32kB的FLASH存儲(chǔ)器,與MCS-51指令集完全兼容的高速CIP-51內(nèi)核,峰值速度可達(dá)25 MIPS,并且還有硬件實(shí)現(xiàn)的UART串行接口和完全支持CAN2.0A和CAN2.0B的CAN控制器。
控制器局域網(wǎng)(CAN2.0B)控制器,具有32個(gè)消息對象,每個(gè)消息對象有其自己的標(biāo)識(shí)全速、非侵入式的在系統(tǒng)調(diào)試接口 (片內(nèi))。C8051 F040器件內(nèi)部有一個(gè)控制器局域網(wǎng)(CAN)控制器,使用CAN協(xié)議實(shí)現(xiàn)串行通信。該CAN控制器符合Bosch規(guī)范2.0A(基本CAN)和2.0B(全功能CAN),方便了CAN網(wǎng)絡(luò)通信設(shè)計(jì)。CAN控制器包含一個(gè)CAN核、消息RAM(獨(dú)立于C8051的RAM)、一個(gè)消息處理狀態(tài)機(jī)以及控制寄存器。CAN控制器可以工作在高達(dá)1M位/秒的位速率。Silicon Labs的CAN有32個(gè)消息對象,每個(gè)消息對象有其自己的標(biāo)識(shí)掩碼,該標(biāo)識(shí)掩碼用于對接收到的消息進(jìn)行過濾。輸入數(shù)據(jù)、消息對象和標(biāo)識(shí)掩碼存儲(chǔ)在CAN消息RAM中。與數(shù)據(jù)發(fā)送和接收過濾有關(guān)的所有協(xié)議處理均由CAN控制器完成,不需C8051 MCU干預(yù)。這就使得用于CAN通信的CPU帶寬最小。C8051通過特殊功能控制器(SFR)配置CAN控制器,讀取接收的數(shù)據(jù),寫入要發(fā)送的數(shù)據(jù)。
C8051F040的MCU內(nèi)部有兩個(gè)增強(qiáng)型全雙工UART、一個(gè)增強(qiáng)型SPI總線和SMBus/I2C。每種串行總線都完全用硬件實(shí)現(xiàn),都能向CIP-51產(chǎn)生中斷,因此需要很少的CPU干預(yù)。這些串行總線不“共享”定時(shí)器、中斷或端口I/O等資源,所以可以使用任何一個(gè)或同時(shí)使用多個(gè)。
CAN總線數(shù)據(jù)和RS-232串口數(shù)據(jù)的速率、數(shù)據(jù)格式都不同,為實(shí)現(xiàn)相互傳輸?shù)墓δ苄枨?,就需要RAM緩存。硬件結(jié)構(gòu)圖如圖2所示。
3 軟件設(shè)計(jì)
系統(tǒng)采用Keil uVision4軟件編程,Keil uVision4是ARM公司推出軟件開發(fā)平臺(tái),其編譯器、調(diào)試工具實(shí)現(xiàn)與ARM器件的完美匹配。程序由初始化和死循環(huán)兩部分構(gòu)成。初始化完成對器件數(shù)據(jù)設(shè)置,循環(huán)完成數(shù)據(jù)在RS-232和CAN總線之間的雙向通信。
3. 1 初始化
初始化就是通過單片機(jī)向其片內(nèi)的各個(gè)寄存器寫入控制字的過程。void RS232_INI()函數(shù)設(shè)置UART為模式1,8位可變波特率通信。void CAN_INI()函數(shù)用來初始化CAN,總線接收、發(fā)送信道,并設(shè)置波特率。
3.2 RS-232轉(zhuǎn)CAN總線
RS-232傳輸1字節(jié),而CAN總線傳輸?shù)氖?字節(jié),這要求在通信過程中實(shí)現(xiàn)數(shù)據(jù)匹陪、格式匹配。該模塊采用,在串口接收中斷中,直接把接收到的串口數(shù)據(jù)存到8字節(jié)的緩存中,計(jì)數(shù)滿八位。則標(biāo)志位置1,主函數(shù)中調(diào)用函數(shù)send_can1(),將數(shù)據(jù)發(fā)送到CAN總線。從而實(shí)現(xiàn)將數(shù)據(jù)從RS-232傳輸?shù)紺AN總線的功能。流程圖如圖3所示。
3.3 CAN總線轉(zhuǎn)RS-232
CAN總線數(shù)據(jù)發(fā)送到串口,原理相同,過程相反。CAN總線的數(shù)據(jù)接收也是在中斷中實(shí)現(xiàn),這樣實(shí)時(shí)性好。CAN總線的接收緩存中有數(shù)據(jù),則這8個(gè)字節(jié)的數(shù)據(jù)依次調(diào)用RS-232功能函數(shù)void RS232_PUTCHAR(),發(fā)送到串口。從而實(shí)現(xiàn)將數(shù)據(jù)從CAN總線傳輸?shù)絉S-232串口的功能。流程圖如圖4所示。
4 實(shí)驗(yàn)檢測
為了驗(yàn)證設(shè)計(jì)的正確性,文中使用Kvaser CanKing和SecureCRT軟件來測試。Kvaser CanKing用來接收、發(fā)送CAN總線數(shù)據(jù),SecureCRT用來接收、發(fā)送串口數(shù)據(jù),二者都有顯示功能。實(shí)驗(yàn)結(jié)果如圖5所示,其證實(shí)了設(shè)計(jì)的正確性。
5 結(jié)束語
數(shù)據(jù)通信在嵌入式系統(tǒng)的功能中占據(jù)重要地位,串口通信與CAN總線相互通信都具有各自的重要作用,而兩者的交互通信也越來越重要,本文的設(shè)計(jì)功能明確、結(jié)構(gòu)簡單、具有很強(qiáng)的通用性和實(shí)用性,并通過了測試驗(yàn)證。
評論