这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【PocketBeagle2】十,mcan操作

共1条 1/1 1 跳转至

【PocketBeagle2】十,mcan操作

菜鸟
2025-11-10 10:12:45     打赏


【PocketBeagle2】十,mcan操作

本次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一直没有波形的变化,有知道的朋友希望可以给我提供一下解决思路,谢谢!


一,设备树修改

image-20251110094117188image.png

image-20251110094423697image.png

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

image-20251101161413714image.png

加载设备树插件

  1. 将生成的 kone-pocketbeagle2.dtbo  copy到/boot/firmware/overlays/下

  2. 更新引导配置

    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


二,内核编译

image.png

image-20251110100318882



三,测试

下载工具

sudo apt-get updata
sudo apt install can-utils

加载can模块

sudo modprobe can
sudo modprobe can_raw
sudo modprobe can_dev

查看can接口有没有生效

image-20251110083749896image.png

设置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

image-20251110084352090image.png

image-20251110084342252image.png









共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]