近日在某狐家的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)
离线
性能着实一般,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)
离线
国产的跑linux的芯片是不是外设都不太靠谱呀,我看常用的外设还是跑在mcu上比较可靠,mpu就跑跑网络
离线
国产的跑linux的芯片是不是外设都不太靠谱呀,我看常用的外设还是跑在mcu上比较可靠,mpu就跑跑网络
没有不靠谱的外设,只有不靠谱的价格
3506也带个M0核200M,或者单独划个A7核心在xenomai抛开协议栈单独跑会好不少
至少绕过socketcan,单独驱动里写个ioctl发送接口也应该会有提升
其实除了上FPGA,还真没见过谁家can外设能跑满线速的
rk资料藏着掖着太难找,目前调试到至少是比一般usb can盒性能要强
已经给领导交差就没再优化
离线
后续,打的板子到手 跑到了26100帧/s
可能是开始canphy+隔离是飞线的验证环境里错误帧太多,导致canbusload报告的帧率不理想
看来开发阶段有个正经的can分析仪是有必要的
当时是要求1000Hz*8个设备(8字节)收发的通信频率,用RT内核是希望延迟更稳定,方便运控算补偿
从github上找到的3506G参考设计:
RK3506G_REF_V11_20241114.pdf
RK3506G_PinOut_V1.0_20240904.xlsx
最近编辑记录 4610 (昨天 10:53:36)
离线