[原创] 【VisionFive 2 单板计算机试用】+CAN总线测试及问题

我爱下载   2023-7-11 10:19 楼主

Visionfive 2系统CAN总线测试

  visionFive2 系统集成了两个CAN2.0B总线控制器,本次测试一下系统的CAN总线。测试从系统配置,必要软件安装,外围物理层扩展和实际通讯测试几个方面。

  1. 系统配置
    1)首先下载官方推荐5.15.0的linux内核系统。下载地址参考官方文档
    https://doc.rvspace.org/VisionFive2/SW_TRM/VisionFive2_SW_TRM/swtrm_compiling_linux_kernel%20-%20vf2.html
    2)设备树源文件存放于linux/arch/riscv/boot/dts/starfive中,我们需要修改该文件,增加CAN总线对应的硬件引脚,并开启CAN总线设备。
    3)打开jh7100-visionfive-v2.dts文件
    101133q8l84lelq4gkhif4.png
    4)增加CAN总线引脚定义
    找到设备树源文件中gpio项,
    101133rzp58z22kvs6c5ab.png
    在gpio项下面,增加can总线的引脚定义项,如下所示:
    can0_pins: can0-pins {
    can0-pins0 {
    starfive,pins = <PAD_GPIO61>;
    starfive,pinmux = <PAD_GPIO61_FUNC_SEL 0>;
    starfive,pin-ioconfig = <IO(GPIO_IE(1))>;
    starfive,pin-gpio-dout = <GPO_CAN0_CTRL_TXD>;
    starfive,pin-gpio-doen = <OEN_LOW>;
    };
    can0-pins1 {
    starfive,pins = <PAD_GPIO44>;
    starfive,pinmux = <PAD_GPIO44_FUNC_SEL 0>;
    starfive,pin-ioconfig = <IO(GPIO_IE(1))>;
    starfive,pin-gpio-doen = <OEN_HIGH>;
    starfive,pin-gpio-din = <GPI_CAN0_CTRL_RXD>;
    };
    /*
    can0-pins2 {
    starfive,pins = <PAD_GPIO32>;
    starfive,pinmux = <PAD_GPIO32_FUNC_SEL 0>;
    starfive,pin-ioconfig = <IO(GPIO_IE(1))>;
    starfive,pin-gpio-dout = <GPO_CAN0_CTRL_STBY>;
    starfive,pin-gpio-doen = <OEN_LOW>;
    };
    */
    };
    can1_pins: can1-pins {
    can1-pins0 {
    starfive,pins = <PAD_GPIO63>;
    starfive,pinmux = <PAD_GPIO63_FUNC_SEL 0>;
    starfive,pin-ioconfig = <IO(GPIO_IE(1)| GPIO_DS(3))>;
    starfive,pin-gpio-dout = <GPO_CAN1_CTRL_TXD>;
    starfive,pin-gpio-doen = <OEN_LOW>;
    };
    can1-pins1 {
    starfive,pins = <PAD_GPIO60>;
    starfive,pinmux = <PAD_GPIO60_FUNC_SEL 0>;
    starfive,pin-ioconfig = <IO(GPIO_IE(1)| GPIO_DS(3))>;
    starfive,pin-gpio-doen = <OEN_HIGH>;
    starfive,pin-gpio-din = <GPI_CAN1_CTRL_RXD>;
    };
    /*
    can1-pins2 {
    starfive,pins = <PAD_GPIO45>;
    starfive,pinmux = <PAD_GPIO45_FUNC_SEL 0>;
    starfive,pin-ioconfig = <IO(GPIO_IE(1))>;
    starfive,pin-gpio-dout = <GPO_CAN1_CTRL_STBY>;
    starfive,pin-gpio-doen = <OEN_LOW>;
    };
    */
    };
    根据官方文件描述,visionfive2的所有gpio引脚都可以复用支持的所有外设功能,所以我们可以将CAN总线引脚映射到40-pin的端子上没有用到的位置。
    101133t3vngd8zjo3q3ndc.png
    我这里将他们分别映射到GPIO61,GPIO44,GPIO63和GPIO60.
    序号 外设功能 40Pin端子位置 GPIO分配 备注
    1 CAN0-TX 38 GPIO61  
    2 CAN0-RX 40 GPIO44  
    3 CAN1-TX 35 GPIO63  
    4 CAN1-RX 37 GPIO60  

    5)使能CAN总线设备
    在文件的末尾增加
    &can0 {
    pinctrl-names = "default";
    pinctrl-0 = <&can0_pins>;
    status = "okay";
    };
    &can1 {
    pinctrl-names = "default";
    pinctrl-0 = <&can1_pins>;
    status = "okay";
    };
    使能CAN0和CAN1设备。
    6)编译dts文件生成dtb文件
    在linux目录下,执行
    make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu-
    当编译结束后,dtb文件也同时编译完成了。
    101133h38vkrrvrlzrzccb.png
    7)复制新的dtb文件到烧录好的TF卡并应用
    将TF卡放入读卡器,并连接到ubuntu系统中,使用如下命令挂载boot分区。执行命令完成分区挂载,官方提供的boot分区在sdb3.
    sudo mount –t vfat /dev/sdb3 /media/boot
    101133hs71b26xpap5z51l.png
    挂载后,将之前编译好的jh7110-visionfive-v2.dtb文件复制到boot/dtbs/starfive/ 下面。如果想简单点,直接覆盖下面的同名文件。
    我们还可以将这个文件重新命名为其它文件名,不过需要修改uEnv.txt文件。
    fdt_high=0xffffffffffffffff
    initrd_high=0xffffffffffffffff
    kernel_addr_r=0x44000000
    kernel_comp_addr_r=0x90000000
    kernel_comp_size=0x10000000
    fdt_addr_r=0x48000000
    ramdisk_addr_r=0x48100000
    # Move distro to first boot to speed up booting
    boot_targets=distro mmc0 dhcp
    # Fix wrong fdtfile name
    fdtfile=starfive/jh7110-visionfive-v2.dtb (调整这个文件名为刚才命名的文件即可)
    # Fix missing bootcmd
    bootcmd=run load_distro_uenv;run bootcmd_distro
    调整后,将TF卡重新插回板卡,重新启动系统。
    8)检查CAN设备加载情况
    检查方法有两种,第一种,在终端执行如下命令
    101133oatgia5ajaxzasxm.png
    第二种,在终端执行
    101133dvjad711l4n479da.png
    我们可以看到系统中的Can0和Can1设备都已经出现了。
  2. 安装测试软件
    为了完成后面的测试工作,我们安装candump软件。在终端中执行
    sudo apt update
    sudo apt install can-utils
  3. 扩展物理接口
    利用MXDock中扩展的CAN总线接口,一端连接VisionFive2 的40Pin连接器,提供TTL电平信号,一端连接CAN总线和其它CAN总线设备互联。

    can接线原理图.jpg                                                     CAN总线接线原理图 101133dqj9rcs6ssb6cbj9.png 101133ny49h6y2xswhm4sl.png
  4. 通讯测试及遇到的问题

配置Can0总线,使用命令

ip link set can0 up type can bitrate 50000

利用candum 接收can总线数据,验证总线通讯的情况。执行命令

candump can0

实际是什么信息都没有收到,通过示波器测量总线信号。没有连接mxdock的can ttl-rx信号线到visionfive2时的波形。

101133s3a2rjdff55ojacj.png

将CAN TTL信号连接到VisionFive2后,信号立刻衰减了,低电平完全低不下去。

101133jruv5174r25dn8uq.png

请大家帮忙解决一下,是什么原因导致的。

本帖最后由 我爱下载 于 2023-7-11 10:23 编辑

回复评论 (5)

大佬工具挺专业的呀,期待早点解决问题!
点赞  2023-7-11 12:03

image.png

需要CAN0,CAN1 对应GPIO上面挂接CAN收发器,参考电路如下:

image.png   2,使用CAN仿真器链接CAN0L/CAN0H接口再测试验证;

  • image.png
点赞  2023-7-18 15:34
引用: Riscv爱好者 发表于 2023-7-18 15:34 需要CAN0,CAN1 对应GPIO上面挂接CAN收发器,参考电路如下:   2,使用CAN仿真器链接CAN ...

谢谢您的回复,mxdock上面集成了CAN的物理层,并且我已经构建了仿真和检验环境,并且我用示波器也看了物理层对starfive2的输出,一旦连接can0-rx引脚,物理层输出的信号立刻衰减,明显没有低电平。

点赞  2023-7-18 16:54
引用: Riscv爱好者 发表于 2023-7-18 15:34 需要CAN0,CAN1 对应GPIO上面挂接CAN收发器,参考电路如下:   2,使用CAN仿真器链接CAN ...

我帖子里面示波器图形的描述有点问题,我测量的信号是mxdock上集成的CAN物理层输出到starfive2上CAN0-RX引脚的这条线

点赞  2023-7-18 16:56
点赞  2023-7-18 17:02
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复