本次CAN试验真的是折腾了很久,AM6254自带三个MCAN接口,分别是main_mcan0,mcu_mcan0和mcu_mcan1,其中main_mcan0 是挂载在A53核上的,其余两个挂载在mcu上。本次我们主要操作的是main_mcan0接口。最开始知道这些mcan的ip都是博世的,就直接参考了内核源码下linux/Documentation/devicetree/bindings/net/can/bosch,m_can.yaml文档,结果错的一塌糊涂,一加载mcan,系统就提示页错误,过一会就挂壁了。
最后参考正点原子家的sdk,mcan的回环模式是正常了,但是由于内核版本问题,我这里的正常模式一直不对,开发板的TX一直没有波形的变化,有知道的朋友希望可以给我提供一下解决思路,谢谢!




main_mcan是由C15和E15复用的。需要注意的地方是,我们使用的芯片封装是ALW的,所以只能看第一列。
设备树源码如下:
/dts-v1/;
/plugin/;
#include <dt-bindings/leds/common.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
&{/chosen} {
overlays {
kone-PocketBeagle2.kernel = __TIMESTAMP__;
};
};
&{/} {
transceiver1: can-phy0 {
compatible = "ti,tcan1042";
#phy-cells = <0>;
max-bitrate = <5000000>;
};
};
&main_pmx0 {
main_mcan0_pins_default: main-mcan0-pins-default {
pinctrl-single,pins = <
AM62X_IOPAD(0x01dc, PIN_INPUT, 0) /* (E15) MCAN0_RX */
AM62X_IOPAD(0x01d8, PIN_OUTPUT, 0) /* (C15) MCAN0_TX */
>;
};
};
&main_mcan0 {
/* RX pin 8 & TX pin 10 of J3 */
pinctrl-names = "default";
pinctrl-0 = <&main_mcan0_pins_default>;
phys = <&transceiver1>;
status = "okay";
};
&main_spi0 {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
st7789v: st7789v@0 {
compatible = "sitronix,st7789v";
reg = <0>;
pinctrl-names = "default";
pinctrl-0 = <&P2_30_gpio &P2_32_gpio>;
reset-gpios = <&main_gpio0 58 GPIO_ACTIVE_HIGH>;
dc-gpios = <&main_gpio0 57 GPIO_ACTIVE_HIGH>;
rotation = <180>;
spi-max-frequency = <50000000>;
spi-cpol;
spi-cpha;
};
};
&main_i2c2 {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
mpu6050@68 {
status = "okay";
compatible = "kone,i2c_mpu6050";
reg = <0x68>;
};
bmp180@77 {
status = "okay";
compatible = "kone,BMP180";
reg = <0x77>;
};
aht30@38 {
status = "okay";
compatible = "kone,AHT30";
reg = <0x38>;
};
};
设置正确的环境变量
export PATH="/home/mxz/pocketbeagle_2/sdk/gcc-11.5.0-nolibc/aarch64-linux/bin:$PATH"
# 设置架构和交叉编译前缀
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-
makefile中添加新增的设备树
nano /home/mxz/pocketbeagle_2/sdk/linux/arch/arm64/boot/dts/ti/Makefile
dtb-$(CONFIG_ARCH_K3) += kone-pocketbeagle2.dtbo
编译
# 进入内核源码目录
cd /home/mxz/pocketbeagle_2/sdk/linux
# 编译所有设备树
make dtbs


加载设备树插件
将生成的 kone-pocketbeagle2.dtbo copy到/boot/firmware/overlays/下
更新引导配置
sudo nano /boot/firmware/extlinux/extlinux.conf
label Linux
kernel /Image.gz
fdtdir /
append console=ttyS2,115200n8 earlycon=ns16550a,mmio32,0x02860000 root=/dev/mmcblk1p2 ro rootfstype=ext4 rootwait net.ifnames=0
fdtoverlays /overlays/kone-pocketbeagle2.dtbo


下载工具
sudo apt-get updata
sudo apt install can-utils
加载can模块
sudo modprobe can
sudo modprobe can_raw
sudo modprobe can_dev
查看can接口有没有生效


设置can0,波特率500k,并启动回环模式
sudo ip link set can0 type can bitrate 500000
sudo ip link set can0 type can loopback on
sudo ip link set can0 up
测试(一个终端发,一个终端收)
candump can0
cangen can0




我要赚赏金
