RK3588 csm400b调试记录

最近有个项目需要使用到csm400b,这里做一个记录。

设备树

以我的为例子,在设备树中添加csm400b的节点

其中gid就是用于区分不同的模组,若有多个的话需要区分开来。

spi能配置模块,需要配置gpios(需要按顺序填写,先RST,后CFG),还需要配置一个gpio引脚为中断引脚。

spi-max-frequency要设置适当的值,如果过高会导致数据无法收发成功。

驱动文件

将CSM400B的驱动csm400b.c、csm400b_spi.c、csm400b.h拷贝到kernel/drivers/net/can目录。

修改kernel/drivers/net/can/Makefile(不要使用obj-y的写法,会影响到驱动)

修改kernel/drivers/net/can/Kconfig

修改linux内核配置make menuconfig,可以在./build.sh kernel-config进行更改

bash 复制代码
CONFIG_SERIAL_DEV_BUS=y
CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
CONFIG_CAN_CSM400B=y

至此驱动这边已经设置完成,只需要重新编译即可。

测试

首先先输入命令查看内核信息,csm400b驱动加载时会检查模块是否可以正常,如果正常内核log中会出现"spi check ok"相关信息

bash 复制代码
dmesg | grep "csm400b"

显示如下则为初始化成功:
csm400b-spi spi0.0 can3: GID = 0, spi check ok.

进入设备目录

bash 复制代码
cd /sys/bus/spi/drivers/csm400b-spi/spi0.1

然后cat一下寄存器

bash 复制代码
cat registers

01寄存器必须是05,若不是的话,需要配置成05才行,然后在cat一下,查询是否01正确被修改

bash 复制代码
echo 0x1 0x5 > registers

然后设置仲裁域波特率和数据位域波特率,我将这两个波特率都设置为500K

bash 复制代码
echo 0x5 0x1a0108 > registers
echo 0x6 0x1a0108 > registers

然后再设置,但是这几个配置的波特率是不会生效的,如果需要修改的话,还是需要在寄存器修改,但是为了保险起见,还是都设置为500K

bash 复制代码
ip link set can1 down
ip link set can1 type can bitrate 500000 dbitrate 500000 fd on
ip link set can1 up

调试软件也需要设置仲裁域波特率和数据位域波特率,必须要一样

读取can1接收的数据

bash 复制代码
candump can1

从can1发送数据,注意每次发送之前都要echo一下通道

bash 复制代码
echo 1 > channel
cansend can1 123##1AABBCCDD
echo 2 > channel
cansend can1 123##1DDCCBBAA

注意事项

  1. 在设置驱动文件的时候,所使用的rst,cfg,interrupt必须设置正确或者是正确被驱动,否则在设备会初始化失败
  2. 我目前拿到的这个版本的驱动,是无法使用ip命令来配置仲裁域波特率和数据位域波特率,也就是说在ip那里设置的参数是无法真正生效的,必须修改寄存器才可以配置。(若后续调试可咨询相关厂家,好像后面的驱动是支持了的)
  3. 目前我也仅测试了500K
相关推荐
MATLAB代码顾问9 分钟前
多种群协同进化算法(MPCE)求解大规模作业车间调度问题——附MATLAB代码
开发语言·算法·matlab
代码小书生39 分钟前
statistics,一个统计的 Python 库!
开发语言·python
摇滚侠43 分钟前
整洁的桌面和任务栏 Java 开发工程师提效方法
java·开发语言
知识分享小能手1 小时前
R语言入门学习教程,从入门到精通,R语言数据计算与分组统计(9)
开发语言·学习·r语言
山居秋暝LS1 小时前
安装C++版opencv和opencv_contrib
开发语言·c++·opencv
老陈说编程2 小时前
12. LangChain 6大核心调用方法:invoke/stream/batch同步异步全解析,新手也能轻松学会
开发语言·人工智能·python·深度学习·机器学习·ai·langchain
014-code2 小时前
Java 并发中的原子类
java·开发语言·并发
alphageek82 小时前
Matlab linspace函数完全指南:从基础用法到进阶技巧
开发语言·其他·matlab
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题】【Java基础篇】第29题:静态代理和动态代理的区别是什么
java·开发语言·后端·面试·代理模式
善恶怪客2 小时前
Java-数组和可变参数
java·开发语言