日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IMX6 CAN接口调试

發(fā)布時間:2023/12/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IMX6 CAN接口调试 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1).?簡介

CAN(Controller Area Network)總線是嵌入式設(shè)備最為常用的接口之一,常用于汽車以及工業(yè)自動化等嵌入式領(lǐng)域,因此本文就基于嵌入式Linux演示使用CAN總線進(jìn)行通訊測試。

本文所演示的平臺來自于Toradex Colibri iMX6DL?和Apalis iMX6D ARM嵌入式平臺,這兩個平臺是都是基于NXP iMX6系列ARM處理器,支持雙核心Cortex-A9。

?

2.?準(zhǔn)備

a).?Colibri iMX6DL?ARM核心版配合Colibri Eva Board?V3.2B載板,連接調(diào)試串口到開發(fā)主機,同時配置好Ubuntu開發(fā)主機開發(fā)環(huán)境,具體操作方法可以參考這里。

b).?Apalis iMX6D?ARM核心板配合Ixora?V1.0載板,連接調(diào)試串口到開發(fā)主機,同時配置好Ubuntu開發(fā)主機開發(fā)環(huán)境,具體操作方法可以參考這里。

c). Colibri iMX6DL和Apalis iMX6D系統(tǒng)使用Toradex Linux Release V2.6.1,下載和更新方法請參考這里。

d). Colibri iMX6DL?提供了兩路來自與iMX6DL芯片的CAN總線(FlexCAN)支持,不過這個不是Colibri系列兼容定義;Colibri Eva Board上面通過SPI總線基于MCP2515芯片擴展了而一路CAN總線接口,這個是整個Colibri兼容的;因此對于本文的測試系統(tǒng),我們可以有三路CAN總線支持,具體的Pin定義請見如下,其他Colibri系列產(chǎn)品的定義情況請見這里。

./ FlexCAN定義

./ MCP2515?原理圖設(shè)計如下,在JP4&JP5跳線連接情況下X2 Top連接器連接的是MCP2515 CAN總線;當(dāng)斷開JP4&JP5跳線時候,可以使用連接線將FlexCAN RX/TX連接到X38來輸出到X2 Top.

d). Colibri產(chǎn)品系列定義中CAN不是標(biāo)準(zhǔn)定義,因此針對Colibri系列產(chǎn)品使用CAN總線要根據(jù)版本情況對kernel或者device tree進(jìn)行修改編譯,下面針對Colibri iMX6DL V2.6.1版本進(jìn)行配置,其他產(chǎn)品配置說明請參考這里。

./?下載對應(yīng)的V2.6.1 kernel源代碼,具體下載和編譯方法請參考這里。

./?檢查kernel config是否下面選項都已經(jīng)配置,在V2.6.1版本下默認(rèn)都已經(jīng)配置。

--------------------------

CONFIG_CAN = y

CONFIG_CAN_RAW = y

CONFIG_CAN_BCM = y

CONFIG_CAN_DEV = y

CAN_FLEXCAN = y

CAN_MCP251X = y

--------------------------

./?默認(rèn)device tree只支持MCP2515 SPI CAN,通過如下修改device tree文件打開FlexCAN1和FlexCAN2,請注意在Toradex V2.7以上版本image中” &flexcan1”命名修改為”&can1”。

https://github.com/simonqin09/cantest/blob/master/flexcan.patch

e). Ixora載板CAN接口通過X20輸出,Apalis iMX6D?默認(rèn)device tree已經(jīng)支持FlexCAN1和FlexCAN2,無需做改動。

3).?使用CAN Utilities對CAN接口進(jìn)行測試

a). Linux系統(tǒng)通過SocketCAN層提供CAN支持,使得可以使用類似操作socket API函數(shù)來操作CAN總線,具體關(guān)于SocketCAN說明請見這里。

b). Colibri iMX6?和Apalis iMX6默認(rèn)image已經(jīng)包含can-utils,可以直接使用;如下硬件連接將Colibri iMX6 FlexCAN1和Apalis iMX6 FlexCAN1進(jìn)行連接

./ Colibri Eva Board JP4和JP5跳線斷開,將X9連接器?SODIMM_55和SODIMM_63管腳分別連接到X38連接器TX和RX插座。

./ Colibri Eva Board X2 Top DB9?管腳2和7通過兩端均配置120Ohm終端電阻的連線和Ixora載板X20管腳1和2連接。

?

c).?使能FlexCAN接口,下面以Colibri iMX6為例,Apalis iMX6方法一致

--------------------------

root@colibri-imx6:~# ip link set can1 type can bitrate 500000???????????????????

root@colibri-imx6:~# ip link set can1 up

/*也可以通過ifconfig up/down CAN接口*/

//root@colibri-imx6:~# ifconfig can1 up/down

/*ip –details查看CAN總線狀態(tài)*/

root@colibri-imx6:~# ip -details link show can1????????????????????????????????

3: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DE0

????link/can??promiscuity 0

????can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0

????bitrate 500000 sample-point 0.866

????tq 133 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1

????flexcan: tseg1 4..16 tseg2 2..8 sjw 1..4 brp 1..256 brp-inc 1

????clock 30000000

/* ip -details -statistics?查看工作狀態(tài)*/

root@colibri-imx6:~# ip -details -statistics link show can1

3: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DE0

????link/can??promiscuity 0

????can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0

????bitrate 500000 sample-point 0.866

????tq 133 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1

????flexcan: tseg1 4..16 tseg2 2..8 sjw 1..4 brp 1..256 brp-inc 1

????clock 30000000

????re-started bus-errors arbit-lost error-warn error-pass bus-off

????0??????????0??????????0??????????0??????????0??????????0

????RX: bytes??packets??errors??dropped overrun mcast

????0??????????0????????0???????0???????0???????0

????TX: bytes??packets??errors??dropped carrier collsns

????0??????????0????????0???????0???????0???????0

--------------------------

?

d). FlexCAN接口發(fā)送接收測試,下面以Colibri iMX6發(fā)送,Apalis iMX6接收為例,另外一個方向方法一致

--------------------------

/*Apalis iMX6*/

root@apalis-imx6:~# candump can0???????????????????????????????????????????????

interface = can0, family = 29, type = 3, proto = 1?????????????????????????????

<0x0000001f> [8] 11 22 33 44 55 66 77 88

/*Colibri iMX6*/

cansend can1 -e -i 0x1F 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88

--------------------------

4).?通過C程序操作CAN總線示例

a).?首先同樣需要使用ip link命令配置CAN接口bitrate并使能接口,這里同樣在Colibri iMX6上面使用can1接口,同時Apalis iMX6上面使用can0接口。

?

b).?測試c程序代碼請見如下:

https://github.com/simonqin09/cantest/blob/master/cantest.c

./?程序執(zhí)行包含兩個變量,第一個變量為”-r”或者”-s”來制定接收或者發(fā)送,第二個變量為所要測試的CAN bus,如”can0”。

./?具體以Colibri iMX6作為接收端,Apalis iMX6?作為發(fā)送端測試程序運行結(jié)果如下:

--------------------------

// Colibri iMX6?先運行接收命令

root@colibri-imx6:~# ./cantest -r can1?????????????????????????????????????????

can port is can1

?

// Apalis iMX6?然后運行發(fā)送命令

root@apalis-imx6:~# ./cantest -s can0??????????????????????????????????????????

can port is can0???????????????????????????????????????????????????????????????

can0 ID=0x1f data length=8?????????????????????????????????????????????????????

0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 Sent out

?

//?此時Colibri iMX6上面接收數(shù)據(jù)情況如下,證明已經(jīng)發(fā)送接收成功

root@colibri-imx6:~# ./cantest -r can1?????????????????????????????????????????

can port is can1???????????????????????????????????????????????????????????????

can1 ID=0x1f data length=8??????????????????????????????????????????????????????

0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88

--------------------------

5).?總結(jié)

利用SocketCAN可以非常方便的在Linux下使用CAN總線,另外CAN總線也支持同時發(fā)送并接收,這里就不做演示了。

總結(jié)

以上是生活随笔為你收集整理的IMX6 CAN接口调试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。