引言
在當今智能化、網絡化的時代,各種電子設備間的高效通信成為了技術發展的關鍵。而控制器局域網絡(Controller Area Network,簡稱CAN),作為嵌入式系統中不可或缺的通信協議,正扮演著鏈接橋梁的重要角色。本文將帶各位小伙伴深入了解CAN接口的基本原理。
CAN總線介紹
CAN總線采用廣播通信模式,意味著網絡中的每一節點都能接收傳播于總線上的所有數據報文,并非定向傳輸至特定節點。這一特性確保了信息的廣泛可達性,不過,各節點并非被動接受所有信息。實際上,CAN技術內置的硬件過濾機制使得每個節點能智能化篩選,僅對與其相關的報文作出響應,實現了有效的信息過濾與處理策略。
總線采用不歸零制編碼結合線與邏輯設計,確保了信號的穩定傳輸。在此機制下,各個模塊經由線與邏輯相連至總線,這意味著當單一節點輸出邏輯0時,即使其余節點均發出邏輯1,總線信號也會被強勢界定為邏輯0,體現了總線在信號競爭中的獨斷性。
CAN總線上的電平
CAN2.0A/B標準規定:總線空閑時,CAN_H和CAN_L上的電壓為2.5V;
在數據傳輸時,顯性電平(邏輯0):CAN_H 3.5V CAN_L 1.5V;
隱性電平(邏輯1):CAN_H 2.5V CAN_L 2.5V;
![wKgZomYrC6SAAlq0AAtWUkw5vuE991.png](https://file1.elecfans.com/web2/M00/DA/DF/wKgZomYrC6SAAlq0AAtWUkw5vuE991.png)
CAN標準定義四種不同的報文類型(數據幀、遠程幀、錯誤幀、過載幀)。報文使用逐位仲裁智能方案來控制對總線的訪問,每條報文都帶有優先級標記,在協議中規定ID小則優先級高。CAN總線拓撲圖如下圖:
![wKgaomYrC7yAX3SAAA85Tuauu4s260.png](https://file1.elecfans.com/web2/M00/DB/BF/wKgaomYrC7yAX3SAAA85Tuauu4s260.png)
ElfBoard開發板 CAN接口硬件電路介紹
ELF 1開發板在其底板上集成了1路CAN接口,而ELF 1S開發板則通過擴展板增設了額外的1路CAN接口,這一接口經由3.81mm間距的綠色端子引出。
當前,ELF 1開發板搭載了TJA1040T型CAN收發器。關于CAN模塊原理圖如下圖所示。考慮到TJA1040T器件的輸出端RX輸出的是5V電平信號,這可能對核心板的3.3V工作電壓環境構成兼容性挑戰。為保護核心板,采取了電壓匹配措施:通過電阻R51和R54實施分壓,將RX信號平滑過渡至3.3V,隨后安全送至處理器的CAN1_RX輸入端口,從而保障了系統間通訊的穩定。
![wKgZomYrC9OAJYRRAA6ZPF53Rmo802.png](https://file1.elecfans.com/web2/M00/DA/DF/wKgZomYrC9OAJYRRAA6ZPF53Rmo802.png)
為了優化外部電路設計,各位小伙伴可以參考以下的TJA1040T芯片功能框圖和引腳詳解。這些資料將加速大家對TJA1040T芯片特性的理解進程。
![wKgaomYrD0eAFZ9BAAzmyQBVEk4802.png](https://file1.elecfans.com/web2/M00/DB/C3/wKgaomYrD0eAFZ9BAAzmyQBVEk4802.png)
![wKgZomYrD1eANerCABLSOHdZwc4972.png](https://file1.elecfans.com/web2/M00/DA/E4/wKgZomYrD1eANerCABLSOHdZwc4972.png)
關于CAN接口的設計建議
(1)核心板最多可支持2路CAN;
(2)設計CAN接口時要注意收發器和核心板之間的電平匹配;
(3)終端電阻可以預留插針通過跳線帽選擇使用;
關于CAN接口PCB的設計建議
(1)CAN使用差分布線,預留120Ω端接電阻;
(2)連接端口建議預留地信號;
CAN接口對測
ELF 1S開發板提供兩路CAN接口,CAN1 集成于底板之上,而 CAN2 則集成在擴展板上。為了實現雙向 CAN 測試,需將 CAN1 與 CAN2 兩端的信號線對應相連——即高位H線相互接通,低位L線同樣相連,以確保兩者間的直接通信鏈路暢通無阻。
![wKgZomYrD4uAAw5mABDt4sAs_rc906.png](https://file1.elecfans.com/web2/M00/DA/E4/wKgZomYrD4uAAw5mABDt4sAs_rc906.png)
開發板啟動之后,在命令行輸入以下命令,對CAN1配置波特率為125000:
root@ELF1:~# ifconfig can0 down //關閉can1 root@ELF1:~# ip link set can0 up type can bitrate 125000 triple-sampling on //設置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 //關閉can2 root@ELF1:~# ip link set can1 up type can bitrate 125000 triple-sampling on //設置can2波特率 flexcan 2094000.can can1:writing ctrl=0x0e312085 IPV6:ADDRCONF(NETDEV_CHANGE):can0:link becomes ready root@ELF1:~# ifconfig can1 up //開啟can2
設置CAN2接收數據:
root@ELF1:~# candump can1 & //can2以后臺方式接收數據 [1] 686
CAN1發送數據:
root@ELF1:~# cansend can0 123#1234567891234567 //can1發送數據 root@ELF1:~# can1 123 [8] 12 34 56 78 91 23 45 67 //can2接收到數據
CAN2接收到CAN1發送的數據。
至此就完成了對CAN接口的介紹,期待這篇文章能讓各位小伙伴對CAN接口有一個全面而深入的理解,推進各位嵌入式愛好者在學習的道路上不斷前進。
-
單片機
+關注
關注
6043文章
44621瀏覽量
638606 -
嵌入式
+關注
關注
5093文章
19178瀏覽量
307708 -
開發板
+關注
關注
25文章
5121瀏覽量
98209
發布評論請先 登錄
相關推薦
ELF 1技術貼|在NXP源碼基礎上適配開發板的按鍵功能
![<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技術</b><b class='flag-5'>貼</b>|在NXP源碼基礎上適配開發板的按鍵功能](https://file1.elecfans.com/web2/M00/C3/62/wKgZomXq0ymANr0hAABDmHpF1tQ264.png)
ElfBoard技術貼|如何在NXP源碼基礎上適配ELF 1開發板的UART功能
![ElfBoard<b class='flag-5'>技術</b><b class='flag-5'>貼</b>|如何在NXP源碼基礎上適配<b class='flag-5'>ELF</b> <b class='flag-5'>1</b>開發板的UART功能](https://file1.elecfans.com/web2/M00/08/D1/wKgaombzpf2ANbDaAABFevJym7M948.png)
ElfBoard技術貼|ELF 1開發板適配攝像頭詳解
![ElfBoard<b class='flag-5'>技術</b><b class='flag-5'>貼</b>|<b class='flag-5'>ELF</b> <b class='flag-5'>1</b>開發板適配攝像頭詳解](https://file1.elecfans.com/web3/M00/04/02/wKgZO2duDgOAAHDXAAA9ZyCKWSc079.png)
基于DSP的CAN總線接口設計
![基于DSP的<b class='flag-5'>CAN</b>總線<b class='flag-5'>接口</b>設計](https://file1.elecfans.com//web2/M00/A5/4A/wKgZomUMN8KADV8HAAA8dBWLSTg981.jpg)
關于ELF1/ELF1S開發板的音頻接口,你需要知道的都在這!
![關于<b class='flag-5'>ELF1</b>/<b class='flag-5'>ELF1</b>S開發板的音頻<b class='flag-5'>接口</b>,你需要知道的都在這!](https://file1.elecfans.com/web2/M00/AB/8D/wKgaomVAmk6ANFc_AAA4WGadmeE234.png)
ELF 1技術貼|LCD作為終端控制臺的方法
![<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技術</b><b class='flag-5'>貼</b>|LCD作為終端控制臺的方法](https://file1.elecfans.com/web2/M00/B6/FF/wKgaomWCr8CAduFMAABGVuCFI2s064.png)
ELF 1技術貼|在NXP源碼基礎上適配ELF 1開發板的LED功能
![<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技術</b><b class='flag-5'>貼</b>|在NXP源碼基礎上適配<b class='flag-5'>ELF</b> <b class='flag-5'>1</b>開發板的LED功能](https://file1.elecfans.com/web2/M00/BA/50/wKgaomWOKTKAfuWLAABArY1D4Jg940.png)
ELF 1技術貼|如何支持exFAT和NTFS格式
![<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技術</b><b class='flag-5'>貼</b>|如何支持exFAT和NTFS格式](https://file1.elecfans.com/web2/M00/C0/06/wKgaomW6BtqAYrRcAABGdfZLvpM103.png)
ELF 1技術貼|如何將Python3.6.9移植到開發板上
![<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技術</b><b class='flag-5'>貼</b>|如何將Python3.6.9移植到開發板上](https://file1.elecfans.com/web2/M00/C0/94/wKgZomXW5EiAf1EoAABBQv84DIc700.png)
ELF技術貼|如何在開發板上實現對Java的支持
![<b class='flag-5'>ELF</b><b class='flag-5'>技術</b><b class='flag-5'>貼</b>|如何在開發板上實現對Java的支持](https://file1.elecfans.com/web2/M00/C5/1A/wKgaomXxaDCADbm_AAA89wQPeVU499.png)
ElfBoard技術貼|在NXP源碼基礎上適配ELF 1開發板的按鍵功能
![ElfBoard<b class='flag-5'>技術</b><b class='flag-5'>貼</b>|在NXP源碼基礎上適配<b class='flag-5'>ELF</b> <b class='flag-5'>1</b>開發板的按鍵功能](https://file1.elecfans.com/web2/M00/FB/88/wKgaomaN6ZaAeoxXAABAhfkiKBc281.png)
評論