1、安装python-can模块
root@ok3568:~# pip3 install python-can
Collecting python-can
Downloading python_can-4.1.0-py3-none-any.whl (241 kB)
|████████████████████████████████| 241 kB 75 kB/s
Collecting msgpack~=1.0.0; platform_system != "Windows"
Downloading msgpack-1.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (313 kB)
|████████████████████████████████| 313 kB 35 kB/s
Collecting wrapt~=1.10
Downloading wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (81 kB)
|████████████████████████████████| 81 kB 28 kB/s
Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from python-can) (45.2.0)
Collecting typing-extensions>=3.10.0.0
Downloading typing_extensions-4.4.0-py3-none-any.whl (26 kB)
Collecting packaging
Downloading packaging-21.3-py3-none-any.whl (40 kB)
|████████████████████████████████| 40 kB 27 kB/s
Collecting pyparsing!=3.0.5,>=2.0.2
Downloading pyparsing-3.0.9-py3-none-any.whl (98 kB)
|████████████████████████████████| 98 kB 28 kB/s
Installing collected packages: msgpack, wrapt, typing-extensions, pyparsing, packaging, python-can
Successfully installed msgpack-1.0.4 packaging-21.3 pyparsing-3.0.9 python-can-4.1.0 typing-extensions-4.4.0 wrapt-1.14.1
2、在ubuntu下面测试can0是否可以正常工作:
forlinx@ok3568:~$ ifconfig -a
can0: flags=128<NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 67
can1: flags=128<NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 68
这里看到了有can0、can1。
3、配置can0的波特率为500K:
forlinx@ok3568:~$ sudo ip link set can0 type can bitrate 500000
4、打开can0:
forlinx@ok3568:~$ sudo ip link set can0 up
pTNETLINK answers[ :1 7I6n6v.a1l6i6d8 1a1r]g urmoecnkcthi
_canfd fe570000.can can0: incorrect/missing data bit-timing
这里出错了,然后各种找资料,终于在一篇帖子上找到了出现同一问题:
5、准备修改设备树,找到rk3568.dts文件在:/OK3568-linux-source/kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi
的2763行:
compatible = "rockchip-scr";
reg = <0x0 0xfe560000 0x0 0x10000>;
interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&scr_pins>;
clocks = <&cru PCLK_SCR>;
clock-names = "g_pclk_sim_card";
status = "disabled";
};
can0: can@fe570000 {
compatible = "rockchip,canfd-1.0";
reg = <0x0 0xfe570000 0x0 0x1000>;
interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cru CLK_CAN0>, <&cru PCLK_CAN0>;
clock-names = "baudclk", "apb_pclk";
resets = <&cru SRST_CAN0>, <&cru SRST_P_CAN0>;
reset-names = "can", "can-apb";
tx-fifo-depth = <1>;
rx-fifo-depth = <6>;
status = "disabled";
};
can1: can@fe580000 {
compatible = "rockchip,canfd-1.0";
reg = <0x0 0xfe580000 0x0 0x1000>;
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cru CLK_CAN1>, <&cru PCLK_CAN1>;
clock-names = "baudclk", "apb_pclk";
resets = <&cru SRST_CAN1>, <&cru SRST_P_CAN1>;
reset-names = "can", "can-apb";
tx-fifo-depth = <1>;
rx-fifo-depth = <6>;
status = "disabled";
};
can2: can@fe590000 {
compatible = "rockchip,canfd-1.0";
reg = <0x0 0xfe590000 0x0 0x1000>;
interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cru CLK_CAN2>, <&cru PCLK_CAN2>;
clock-names = "baudclk", "apb_pclk";
resets = <&cru SRST_CAN2>, <&cru SRST_P_CAN2>;
reset-names = "can", "can-apb";
tx-fifo-depth = <1>;
rx-fifo-depth = <6>;
status = "disabled";
};
果然配置成了canfd-1.0,这里修改为can-1.0
编译后,我把boot.img误烧到了Boot_linux下面,结果
按住recovery 键不要松开,然后按一下 reset 键系统复位。也没有检测到设备,只能试着用SD来启动了。
制作SD成功后,把SD卡插入开发板,启动
是可以启动,但是不是烧写进硬盘。重来:
终于成功了:
再次测试can启用:
[root@ok3568:/]# ip link set can0 type can bitrate 500000
[root@ok3568:/]# ip link set can0 up
[ 153.712359] IPv6: ADDRCONF(NETDEV_UP): can0: link is not ready
[ 153.7[root@ok3568:/]# 12459] IPv6: ADDRCONF(NETDEV_CHANGE): can0: link becomes ready```
发送数据:
[root@ok3568:/]# cansend can0 111#12345678
[root@ok3568:/]#
[root@ok3568:/]# cansend can0 111#0102030405060708
[root@ok3568:/]#
接收数据:
[root@ok3568:/]# candump can0
can0 121 [2] 01 01
can0 121 [2] 01 01
can0 121 [2] 01 01
can0 121 [2] 01 01
can0 121 [8] 01 02 03 04 05 06 07 08
can0 121 [8] 01 02 03 04 05 06 07 08
can0 121 [8] 01 02 03 04 05 06 07 09
到此CAN的基本调试可以了,就是可惜烧录不是很会。走了很多弯弯路呀。还好手头上的配件多。
做评测,就是折腾。
更多回帖