引言
在當(dāng)今智能化、網(wǎng)絡(luò)化的時(shí)代,各種電子設(shè)備間的高效通信成為了技術(shù)發(fā)展的關(guān)鍵。而控制器局域網(wǎng)絡(luò)(Controller Area Network,簡稱CAN),作為嵌入式系統(tǒng)中不可或缺的通信協(xié)議,正扮演著鏈接橋梁的重要角色。本文將帶各位小伙伴深入了解CAN接口的基本原理。
CAN總線介紹
CAN總線采用廣播通信模式,意味著網(wǎng)絡(luò)中的每一節(jié)點(diǎn)都能接收傳播于總線上的所有數(shù)據(jù)報(bào)文,并非定向傳輸至特定節(jié)點(diǎn)。這一特性確保了信息的廣泛可達(dá)性,不過,各節(jié)點(diǎn)并非被動(dòng)接受所有信息。實(shí)際上,CAN技術(shù)內(nèi)置的硬件過濾機(jī)制使得每個(gè)節(jié)點(diǎn)能智能化篩選,僅對與其相關(guān)的報(bào)文作出響應(yīng),實(shí)現(xiàn)了有效的信息過濾與處理策略。
總線采用不歸零制編碼結(jié)合線與邏輯設(shè)計(jì),確保了信號(hào)的穩(wěn)定傳輸。在此機(jī)制下,各個(gè)模塊經(jīng)由線與邏輯相連至總線,這意味著當(dāng)單一節(jié)點(diǎn)輸出邏輯0時(shí),即使其余節(jié)點(diǎn)均發(fā)出邏輯1,總線信號(hào)也會(huì)被強(qiáng)勢界定為邏輯0,體現(xiàn)了總線在信號(hào)競爭中的獨(dú)斷性。
CAN總線上的電平
CAN2.0A/B標(biāo)準(zhǔn)規(guī)定:總線空閑時(shí),CAN_H和CAN_L上的電壓為2.5V;
在數(shù)據(jù)傳輸時(shí),顯性電平(邏輯0):CAN_H 3.5V CAN_L 1.5V;
隱性電平(邏輯1):CAN_H 2.5V CAN_L 2.5V;

CAN標(biāo)準(zhǔn)定義四種不同的報(bào)文類型(數(shù)據(jù)幀、遠(yuǎn)程幀、錯(cuò)誤幀、過載幀)。報(bào)文使用逐位仲裁智能方案來控制對總線的訪問,每條報(bào)文都帶有優(yōu)先級(jí)標(biāo)記,在協(xié)議中規(guī)定ID小則優(yōu)先級(jí)高。CAN總線拓?fù)鋱D如下圖:

ElfBoard開發(fā)板 CAN接口硬件電路介紹
ELF 1開發(fā)板在其底板上集成了1路CAN接口,而ELF 1S開發(fā)板則通過擴(kuò)展板增設(shè)了額外的1路CAN接口,這一接口經(jīng)由3.81mm間距的綠色端子引出。
當(dāng)前,ELF 1開發(fā)板搭載了TJA1040T型CAN收發(fā)器。關(guān)于CAN模塊原理圖如下圖所示。考慮到TJA1040T器件的輸出端RX輸出的是5V電平信號(hào),這可能對核心板的3.3V工作電壓環(huán)境構(gòu)成兼容性挑戰(zhàn)。為保護(hù)核心板,采取了電壓匹配措施:通過電阻R51和R54實(shí)施分壓,將RX信號(hào)平滑過渡至3.3V,隨后安全送至處理器的CAN1_RX輸入端口,從而保障了系統(tǒng)間通訊的穩(wěn)定。

為了優(yōu)化外部電路設(shè)計(jì),各位小伙伴可以參考以下的TJA1040T芯片功能框圖和引腳詳解。這些資料將加速大家對TJA1040T芯片特性的理解進(jìn)程。
TJA1040T芯片功能框圖
TJA1040T芯片引腳說明關(guān)于CAN接口的設(shè)計(jì)建議
(1)核心板最多可支持2路CAN;
(2)設(shè)計(jì)CAN接口時(shí)要注意收發(fā)器和核心板之間的電平匹配;
(3)終端電阻可以預(yù)留插針通過跳線帽選擇使用;
關(guān)于CAN接口PCB的設(shè)計(jì)建議
(1)CAN使用差分布線,預(yù)留120Ω端接電阻;
(2)連接端口建議預(yù)留地信號(hào);
CAN接口對測
ELF 1S開發(fā)板提供兩路CAN接口,CAN1 集成于底板之上,而 CAN2 則集成在擴(kuò)展板上。為了實(shí)現(xiàn)雙向 CAN 測試,需將 CAN1 與 CAN2 兩端的信號(hào)線對應(yīng)相連——即高位H線相互接通,低位L線同樣相連,以確保兩者間的直接通信鏈路暢通無阻。

開發(fā)板啟動(dòng)之后,在命令行輸入以下命令,對CAN1配置波特率為125000:
root@ELF1:~# ifconfig can0 down //關(guān)閉can1 root@ELF1:~# ip link set can0 up type can bitrate 125000 triple-sampling on //設(shè)置can1波特率 flexcan 2090000.can can0:writing ctrl=0x0e312085 IPV6:ADDRCONF(NETDEV_CHANGE):can0:link becomes ready root@ELF1:~# ifconfig can0 up //開啟can1
對CAN2配置波特率為125000:
root@ELF1:~# ifconfig can1 down //關(guān)閉can2 root@ELF1:~# ip link set can1 up type can bitrate 125000 triple-sampling on //設(shè)置can2波特率 flexcan 2094000.can can1:writing ctrl=0x0e312085 IPV6:ADDRCONF(NETDEV_CHANGE):can0:link becomes ready root@ELF1:~# ifconfig can1 up //開啟can2
設(shè)置CAN2接收數(shù)據(jù):
root@ELF1:~# candump can1 & //can2以后臺(tái)方式接收數(shù)據(jù) [1] 686
CAN1發(fā)送數(shù)據(jù):
root@ELF1:~# cansend can0 123#1234567891234567 //can1發(fā)送數(shù)據(jù) root@ELF1:~# can1 123 [8] 12 34 56 78 91 23 45 67 //can2接收到數(shù)據(jù)
CAN2接收到CAN1發(fā)送的數(shù)據(jù)。
至此就完成了對CAN接口的介紹,期待這篇文章能讓各位小伙伴對CAN接口有一個(gè)全面而深入的理解,推進(jìn)各位嵌入式愛好者在學(xué)習(xí)的道路上不斷前進(jìn)。
-
單片機(jī)
+關(guān)注
關(guān)注
6076文章
45495瀏覽量
670300 -
嵌入式
+關(guān)注
關(guān)注
5198文章
20445瀏覽量
334003 -
開發(fā)板
+關(guān)注
關(guān)注
26文章
6290瀏覽量
118072
發(fā)布評論請先 登錄
ELF 1技術(shù)貼|在NXP源碼基礎(chǔ)上適配開發(fā)板的按鍵功能
ElfBoard技術(shù)貼|如何在NXP源碼基礎(chǔ)上適配ELF 1開發(fā)板的UART功能
ElfBoard技術(shù)貼|ELF 1開發(fā)板適配攝像頭詳解
基于DSP的CAN總線接口設(shè)計(jì)
關(guān)于ELF1/ELF1S開發(fā)板的音頻接口,你需要知道的都在這!
淺析can技術(shù)的演變過程
ELF 1技術(shù)貼|LCD作為終端控制臺(tái)的方法
ELF 1技術(shù)貼|在NXP源碼基礎(chǔ)上適配ELF 1開發(fā)板的LED功能
ELF 1技術(shù)貼|如何支持exFAT和NTFS格式
ELF 1技術(shù)貼|如何將Python3.6.9移植到開發(fā)板上
ElfBoard技術(shù)貼|在NXP源碼基礎(chǔ)上適配ELF 1開發(fā)板的按鍵功能
ElfBoard技術(shù)貼|如何在【RK3588】ELF 2開發(fā)板實(shí)現(xiàn)GPIO功能復(fù)用
ELF 1技術(shù)貼|CAN接口淺析:從原理到對測
評論