您尚未登录。

楼主 # 2025-10-31 11:45:48

4610
会员
注册时间: 2022-10-09
已发帖子: 135
积分: 117

踩坑之rk3506 can波特率不准

近日在某狐家的3506g板子上调试CAN FD,开BRS波特率切换后无法收发数据
dmesg日志指出bitrate error 1.6%,远超brs后的重同步能力(<±0.3% ?)

ip -details link show can0
提示外设基础clock为196608000Hz,4096*48000的音频时钟,
DTS与内核config中去除所有音视频相关无果
改用hclk_can则又变成115200基的串口时钟

devmem对照TRM发现当前can用的v0pll,
在clk-rk3506.c中clk_can_patents_p去除相关选项,只保留到
{ "xin24m", "gpll" };
强制使用gpll终于得到了0误差的整数时钟

虽然不够优雅但解决了
我想问下有其他人也遇到过这个问题吗,这个神奇的v0pll=1179648000Hz是被谁初始化的呢

最近编辑记录 4610 (2025-10-31 13:52:22)

离线

楼主 #1 2025-10-31 15:58:57

4610
会员
注册时间: 2022-10-09
已发帖子: 135
积分: 117

Re: 踩坑之rk3506 can波特率不准

性能着实一般,pvtpll=1433MHz,当前CPU频率比规格书上1.2G要高

打上了rt补丁,手动分配了中断和进程的CPU亲和性
1M仲裁5M数据0字节data下,只有21000帧/秒左右
猜测是socketcan这套框架太重? 因为CANTX没有DMA和FIFO,tx完成中断到送入下一帧的时间较长

某家核心板的宣传页上写的24307/s也不知道是如何达到的

Mem: 19096K used, 104172K free, 64K shrd, 0K buff, 3636K cached
CPU0:  0.0% usr  0.2% sys  0.0% nic 99.8% idle  0.0% io  0.0% irq  0.0% sirq
CPU1:  0.0% usr 17.6% sys  0.0% nic 72.0% idle  0.0% io  0.0% irq 10.3% sirq
CPU2:  6.9% usr 93.0% sys  0.0% nic  0.0% idle  0.0% io  0.0% irq  0.0% sirq
Load average: 1.63 1.46 1.08 3/95 535
  PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
  533   447 root     R      708  0.5   2 33.7 cangen can1 -I 555 -L 0 -b -g0 -p1 -x
   68     2 root     RW       0  0.0   1  9.4 [irq/47-can1]
  380   378 root     S    18104 14.6   0  0.0 /usr/bin/adbd
  534   463 root     R     1512  1.2   0  0.0 top

最近编辑记录 4610 (2025-10-31 18:29:18)

离线

楼主 #3 2025-11-01 23:02:42

4610
会员
注册时间: 2022-10-09
已发帖子: 135
积分: 117

Re: 踩坑之rk3506 can波特率不准

kekemuyu 说:

国产的跑linux的芯片是不是外设都不太靠谱呀,我看常用的外设还是跑在mcu上比较可靠,mpu就跑跑网络

没有不靠谱的外设,只有不靠谱的价格

3506也带个M0核200M,或者单独划个A7核心在xenomai抛开协议栈单独跑会好不少
至少绕过socketcan,单独驱动里写个ioctl发送接口也应该会有提升

其实除了上FPGA,还真没见过谁家can外设能跑满线速的
rk资料藏着掖着太难找,目前调试到至少是比一般usb can盒性能要强
已经给领导交差就没再优化

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn