Linux can匯流排除錯學習記錄

2021-08-17 10:11:26 字數 2752 閱讀 3284

由於最近工作需要,需要用到can匯流排,自己以前又沒有用到過can匯流排,所以記錄下來自己的學習過程。

由於我是在linux下操作can匯流排的,所以一下內容主要是linux下的can操作過程。

首先,配置linux下can驅動,我所用的平台是am335x,am335x有兩個can介面,can0和can1,以下為can0的配置過程,can1類似

1:進入mach_omap2目錄修改mux33xx.c檔案,修改後:

_am33xx_muxentry(uart1_ctsn,0,

"uart1_ctsn",null, "d_can0_tx", "i2c2_sda",

"spi1_cs0", null, null,"gpio0_12"),

_am33xx_muxentry(uart1_rtsn,0,

"uart1_rtsn",null, "d_can0_rx", "i2c2_scl",

"spi1_cs1", null,null, "gpio0_13"),

2:修改board-am335xevm.c:

static structpinmux_config d_can_wxudong_pin_mux = ,,,

};static voidd_can_init(int evm_id, int profile)

}static struct evm_dev_cfg beaglebone_dev_cfg= ,,};

新增d_can_init函式

修改完之後重新編譯核心,燒錄核心到am335x平台上,在命令列中輸入ifconfig -a會發現can0裝置。

第二部,編寫can應用層demo,這裡要注意,can單裝置可以用示波器測量tx引腳,但是只能用回環模式,

在命令列輸入canconfig can0 ctrlmode loopback on,回環模式測試

測試程式:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include"ioctl.h"

#include"can.h"

int signalquit;

void sighandler(intsig)

}static voidprint_usage(char *prg)

can_baudrate_tstring_to_baudrate(char *str)

int main(int argc,char *argv),,

,,};while((opt = getopt_long(argc, argv, "hb:b:",long_options, null)) != -1)

break;

case 'b':

ptr = optarg;

while (1)

if (bittime_count!= 6)

break;

default:

fprintf(stderr,"unknown option %c\n", opt);

break;}}

/* get can inte***ce name */

if (optind != argc - 1 &&optind != argc - 2)

strncpy(ifname,argv[optind], ifnamsiz);

strncpy(ifr.ifr_name,ifname, ifnamsiz);

can_fd= socket(pf_can, sock_raw, can_raw);

if(can_fd < 0)

ret= ioctl(can_fd, siocgifindex, &ifr);

if(ret)

addr.can_family = pf_can;

addr.can_ifindex = ifr.ifr_ifindex;

if(new_baudrate != -1)

}if(bittime_count)

}if(bind(can_fd,(struct sockaddr*)&addr,sizeof(addr)))

memset(&frame,0x0,sizeof(frame));

frame.can_id = 0x123;

frame.can_dlc =8;

strncpy(frame.data,"12345678",8);

while(!signalquit)

if(nbytes < sizeof(structcan_frame))

printf("write a canframe:can_id=0x%x,can_dlc=%d,data=%s\n",frame.can_id,frame.can_dlc,frame.data);

for(i=0;i<10000;i++);

}close(can_fd);

return0;

abort:

close(can_fd);

returnret;

}然後再用candump can0 或者示波器測量tx腳即可看到輸出波形。

參考文獻

以上就是linux can匯流排除錯學習記錄的全文介紹,希望對您學習和使用linux系統開發有所幫助.

from:

RS485匯流排除錯總結

原文 rs485匯流排除錯總結 這裡把這三天來除錯rs485匯流排所遇到的問題和經驗教訓總結一下,備忘。這兩天主要做的是把keller 30x系列工業用壓力變送器的rs485介面和stm32微控制器聯通,並將資料通過usb口 到pc上。我首先直接使用keller 30x連線電腦的rs485介面,這自...

FPGA Vtech 匯流排效能,FPGA除錯

今天我可以向你介紹verification technology,簡稱vtech。如果你搜尋它,可能會找到一家銷售嬰兒監視器和兒童玩具的公司。這不是那個公司。因此,請確保您具有正確的 是以或開頭的 大多數的eda公司都是通過以下三種方式之一建立起來的。目前最常見的第一種方式是被三大公司之一收購現有的...

汽車匯流排學習

馬上要換工作了 要去一家做汽車電子的公司,所以就馬上惡補汽車電子相關的知識。呵呵 因為實在是不了解這個行業,所以去圖書館借本低階的書 汽車匯流排 系統原理與檢修 先了解一下.說實在的書剛看了幾頁就後悔了,這本書是汽修中專生的教材,內容實在太差了,不過還可以簡單的了解相關知識。呵呵 言歸正傳說點知識性...