天天看點

TX2/Linux下can總線的接收與發送詳解!收發實際測試

Canbus on TX2/Linux

後續dbc載入并實作收發源代碼及測試可看這篇文章:https://blog.csdn.net/hhlenergystory/article/details/81976696

TX2具有兩個can裝置,分别為can0和can1。這兩個can裝置自帶can控制器和收發器,其原理圖如下。

TX2/Linux下can總線的接收與發送詳解!收發實際測試

每個can裝置都有rx和tx,其發送和接收都是ttl電平,即數字信号,而不是can_h和can_l的模拟信号。想将這兩個裝置相連進行收發,必須分别外接兩個can收發器,轉換成差分信号後進行傳輸,如圖

TX2/Linux下can總線的接收與發送詳解!收發實際測試

如果将rx接tx這樣相連并不能成功傳送,會導緻can裝置由于錯誤過多而進入can-off狀态

TX2/Linux下can總線的接收與發送詳解!收發實際測試

為了對can裝置進行軟體上的測試,可以将其設定成回環模式,進入回環模式的殘裝置會将發送的資料直接放入接收的buffer中,直接對軟體進行測試。

  1. 加載can裝置驅動

modprobe can

modprobe can_raw

modprobe mttcan

  1. 設定can裝置屬性

設定波特率

ip link set can0 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on

ip link set can1 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on

設定成回環模式

ip link set can0 type can loopback on

ip link set can1 type can loopback on

開啟can裝置

ip link set up can0

ip link set up can1

安裝第三方開源app can-utils測試canbus

sudo apt-get install can-utils

使用應用程式進行測試

發送程式:

cansend <can_interface> <can_frame>

e.g. cansend can0 123#abcdabcd

接收程式:

candump can_interface

e.g. candump can1

檢測canbus的狀态:

ip -details -statistics link show can0

ip -details -statistics link show can1

收發實際測試

  1. 載入can裝置驅動,設定can裝置并啟用

modprobe can

modprobe can_raw

modprobe mttcan

ip link set can0 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on

ip link set can1 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on

ip link set up can0

ip link set up can1

可以在指令行中手動輸入,也可以将這些代碼寫成腳本一鍵運作,或是在Linux開機啟動腳本中加入以上代碼使其開機載入驅動子產品。

TX2/Linux下can總線的接收與發送詳解!收發實際測試

完成後指令行輸入ifconfig,可以看到can0和can1裝置,說明裝置已經啟用

TX2/Linux下can總線的接收與發送詳解!收發實際測試
  1. 對TX2平台的can裝置進行連線,将can0和can1組成網絡,進行收發測試

Tx2的can裝置與網絡連線如下圖所示,TX2的兩個can裝置引出的引腳為rx和tx為數字信号,需要外接can收發器之後才能将其接入網絡

TX2/Linux下can總線的接收與發送詳解!收發實際測試

TX2can外設原理圖如圖下所示,将這兩個裝置加入網絡隻需連接配接rx和tx口,CAN_WAKE、CAN0_STBY和CAN1_STBY暫時不需要連接配接。同時TX2自帶5伏VDD輸出,可以給CAN收發器進行供電。

TX2/Linux下can總線的接收與發送詳解!收發實際測試

具體連線圖如下所示,至此兩個CAN裝置已組成網絡,系統中的can裝置驅動也已載入并啟用,接下來使用開源軟體can-utils對其進行測試。

TX2/Linux下can總線的接收與發送詳解!收發實際測試
  1. 下載下傳開源程式can-utils以對後續can總線進行測試(Linux必須聯網)

指令行輸入:

sudo apt-get install can-utils

輸入後系統會自動進行下載下傳和安裝。

  1. 使用can-utils指令對can裝置進行測試

首先先打開兩個終端,一個進行can0裝置的發送,一個進行can1裝置的接收。

TX2/Linux下can總線的接收與發送詳解!收發實際測試

在一個終端中指令行輸入candump can1,意義是can1裝置開始進行接收,程序為阻塞型,can1裝置将一直會接收發來的can消息直到使用者終止。

TX2/Linux下can總線的接收與發送詳解!收發實際測試

在另一個終端中進行資料發送,使用cansend指令,其格式為

cansend <裝置号> <要發送的消息>

    對于發送的消息can-utils對其進行了格式定義,隻能以16進制發送,一次發送的内容為8位元組,如下:

   123#1122334455667788    

發送一個标準資料幀,辨別ID為123内容為0x1122334455667788

12345678#aabbccdd

發送一個擴充幀,辨別ID為12345678,内容為0xaabbccdd

123#R7

發送一個遠端幀,長度為7

在另一個終端中指令行輸入cansend can0 123#1122334455667788

意義為:使用can0外設進行發送一個标準資料幀,辨別符為123,内容為0x1122334455667788,在另一個終端中可以看到收到的的消息:

TX2/Linux下can總線的接收與發送詳解!收發實際測試

後續通過can總線的程式設計模型實作dbc載入,和收發,canoe測試的具體實作以及源代碼文章:

繼續閱讀