RXD X5 can异常

使用RDX X5板子can做测试过程中,设置波特率为1M,
ip link set can0 type can bitrate 1000000
ip link set up can0
使用测试指令:cangen can0 -I 601 -L 8 -D 40F9601900000000 -g 5
另一个终端监听can数据:candunp can0
一段时间后就会出现监听不到can数据的情况,发包的持续间隔时间越短越容易出现,此时必须卸载can0后再加载才能恢复使用
甚至降低到10ms都会出现:
sunrise@ubuntu:~$ cangen can0 -I 601 -L 8 -D 40F9601900000000 -g 10
write: No buffer space available
该板子的can发包速度最快支持多大????

您还,我也在解决这样的问题 :joy: 排查了很久 感觉是”can收发器“的问题

实测只在双向通讯的时候会出现,一个设备发一个设备收会(测试环境是板子连接电机,每间隔10ms获取一次电机的转速会出现,如果单纯的电机自主上报can包,间隔10ms,板子单纯的接收数据是不会出现异常),如果单纯的板子接受can包就不会出现

+1 ,我是x5 接电机,波特率2500000 发送和接收是20ms。没有连接120欧终端电阻跳帽(貌似连接的情况下更不稳定,不能确定)。

sudo dmesg 发现有can0: msg lost in rxf0,不确定是不是相关问题log,还请参考
[ 168.530371] tcp_ack_handle_new before ack: 116761299, 116756979
[ 168.530543] tcp_ack_handle_new before ack: 116765619, 116762739
[ 168.939212] tcp_ack_handle_new before ack: 116784339, 116781459
[ 169.349879] tcp_ack_handle_new before ack: 116828460, 116825580
[ 169.758562] tcp_ack_handle_new before ack: 116842860, 116841420
[ 169.758666] tcp_ack_handle_new before ack: 116850060, 116848620
[ 189.291673] tcp_ack_handle_new before ack: 2099938829, 2099937389
[ 190.241726] tcp_ack_handle_new before ack: 233378806, 233378650
[ 194.629616] tcp_ack_handle_new before ack: 164352336, 164352118
[ 195.027545] tcp_ack_handle_new before ack: 164355764, 164355458
[ 195.028090] tcp_ack_handle_new before ack: 164359245, 164359049
[ 197.838962] tcp_ack_handle_new before ack: 1987043454, 1987033374
[ 197.839004] tcp_ack_handle_new before ack: 1987043454, 1987036254
[ 197.839027] tcp_ack_handle_new before ack: 1987043454, 1987040574
[ 197.839048] tcp_ack_handle_new before ack: 1987043454, 1987042014
[ 202.120312] tcp_ack_handle_new before ack: -634335296, -634336909
[ 208.466725] tcp_ack_handle_new before ack: -1749612528, -1749613362
[ 211.542160] tcp_ack_handle_new before ack: -1749536222, -1749539102
[ 227.311701] tcp_ack_handle_new before ack: -406280364, -406282168
[ 227.935557] tcp_ack_handle_new before ack: -191004854, -191006168
[ 231.212504] tcp_ack_handle_new before ack: -190978134, -190979976
[ 248.013811] tcp_ack_handle_new before ack: -1056529966, -1056531412
[ 274.649772] usb 1-1.3: new full-speed USB device number 3 using xhci-hcd
[ 274.801688] usb 1-1.3: New USB device found, idVendor=045e, idProduct=028e, bcdDevice= 1.10
[ 274.801712] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 274.801719] usb 1-1.3: Product: TGZ Controller
[ 274.801724] usb 1-1.3: Manufacturer: D
[ 274.801730] usb 1-1.3: SerialNumber: 3E529620
[ 274.910267] input: Microsoft X-Box 360 pad as /devices/platform/soc/35000000.hsio_apb/35100000.usb3/35100000.usb/xhci-hcd.2.auto/usb1/1-1/1-1.3/1-1.3:1.0/input/input1
[ 274.910568] usbcore: registered new interface driver xpad
[ 312.942573] using random self ethernet address
[ 312.942590] using random host ethernet address
[ 313.273646] usb0: HOST MAC 9a:07:01:78:1e:5d
[ 313.273670] usb0: MAC 3a:ac:fc:c5:4d:c2
[ 456.515134] tcp_ack_handle_new before ack: 698469561, 698468432
[ 483.966654] can: controller area network core
[ 483.966794] NET: Registered PF_CAN protocol family
[ 483.975281] can: raw protocol
[ 490.611832] IPv6: ADDRCONF(NETDEV_CHANGE): can0: link becomes ready
[ 804.437705] tcp_ack_handle_new before ack: -2144939601, -2144942481
[ 946.465251] tcp_ack_handle_new before ack: 1117673088, 1117671157
[ 947.898901] tcp_ack_handle_new before ack: 1117703560, 1117702120
[ 948.103149] tcp_ack_handle_new before ack: 1117749640, 1117746760
[ 948.306933] tcp_ack_handle_new before ack: 1117762600, 1117759720
[ 948.307101] tcp_ack_handle_new before ack: 1117768360, 1117765480
[ 959.267784] tcp_ack_handle_new before ack: 1117875709, 1117873816
[ 1025.873600] tcp_ack_handle_new before ack: -1144494463, -1144495923
[ 1051.074107] tcp_ack_handle_new before ack: -1144488489, -1144489949
[ 1072.740362] tcp_ack_handle_new before ack: 1041395620, 1041393792
[ 1203.201412] tcp_ack_handle_new before ack: -115508510, -115508602
[ 1269.560903] tcp_ack_handle_new before ack: 1318858536, 1318858512
[ 1285.123380] tcp_ack_handle_new before ack: 202943548, 202943177
[ 1285.333121] tcp_ack_handle_new before ack: 202944239, 202944135
[ 1412.914181] tcp_ack_handle_new before ack: 1099269558, 1099269397
[ 1412.916882] tcp_ack_handle_new before ack: 22354538, 22354377
[ 1412.919983] tcp_ack_handle_new before ack: 1393323014, 1393322853
[ 1413.732314] tcp_ack_handle_new before ack: 1149668260, 1149668099
[ 1477.430757] tcp_ack_handle_new before ack: -144631411, -144631940
[ 1477.430798] tcp_ack_handle_new before ack: -144631411, -144632032
[ 1501.376512] tcp_ack_handle_new before ack: 1399023621, 1399022161
[ 1733.255323] tcp_ack_handle_new before ack: -2055642575, -2055642649
[ 1799.976319] tcp_ack_handle_new before ack: 1527503003, 1527501543
[ 2048.482630] tcp_ack_handle_new before ack: 1399076589, 1399075149
[ 2111.067946] tcp_ack_handle_new before ack: 1054278361, 1054276460
[ 2186.837141] dw-apb-uart 34070000.serial: failed to request DMA
[ 2437.023516] tcp_ack_handle_new before ack: 239524386, 239523765
[ 2507.169300] tcp_ack_handle_new before ack: 668178641, 668178621
[ 2684.140151] tcan4x5x spi5.0 can0: msg lost in rxf0
[ 2684.146395] tcan4x5x spi5.0 can0: msg lost in rxf0
[ 2811.330858] tcan4x5x spi5.0 can0: msg lost in rxf0
[ 2811.337147] tcan4x5x spi5.0 can0: msg lost in rxf0
[ 2942.047218] tcp_ack_handle_new before ack: 98667354, 98665894
[ 3023.581248] tcp_ack_handle_new before ack: -1205589993, -1205591545
[ 3039.532702] tcp_ack_handle_new before ack: -1205583579, -1205585039
[ 3088.279407] tcp_ack_handle_new before ack: 1599685639, 1599681319
[ 3223.360453] tcp_ack_handle_new before ack: -1340876626, -1340878086
[ 3223.360566] tcp_ack_handle_new before ack: -1340872246, -1340873706
[ 3223.360589] tcp_ack_handle_new before ack: -1340872246, -1340873706
[ 3227.076025] tcp_ack_handle_new before ack: -1340865943, -1340867403
[ 3397.043875] tcp_ack_handle_new before ack: -435888878, -435889407
rdkos_info.txt (23.2 KB)

我感觉也是,我们更奇怪,CAN的H和L两条线,接示波器都没有任何反应。但Ubuntu内部的loopback是可以的,根本发不到总线上

示波器是可以测到信号的,只是有点抖动,can纯接收或纯发送测试的是没问题,一旦发送出的数据别的设备有应答或总线上有多个设备一起发送,速度快了就会出现问题,报错write: No buffer space available,我测试两块板子通过跳线将can连接在一起,波特率都设置1M,一个板子执行cangen can0 -I 601 -L 8 -D 40F9601900000000 -g 5,另一个板子执行cangen can0 -I 603 -L 8 -D 40F9601900000000 -g 8,没多久就出现问题

论坛地址: RDX X5 CAN接口总是10几秒后出现发送失败,速率500K,每秒发送20条。 - 板卡使用 / 新手上路 - 地瓜机器人论坛

我试了以下,系统和miniboot都是最新的,波特率是1000kbps,发送间隔1ms的时候还是会出现接收中断,导致后续收发失败问题;波特率改为500kbps后,会有所改善,但是问题无法完全解决

你好,请问可以加下联系方式吗?你们的CAN通讯是如何打通的


我使用的是这个版本的固件,并且也更新了sudo rdk-miniboot-update,发送间隔20ms都会出现问题,只是要比较长一点的时间,时间越短越容易出现

我今天安装的最新系统也是这个,我之前的是2025-6-26的

我这边最新的miniboot版本是:

两个X5的板子对发,1M的速度很容易出现问题,500K的波特率会稍微好点


你好,可以试一下图中的指令 ,测试环境是1M 每秒1700帧

实测没有改善,只是出现问题的时间变久了而已,不管使用命令测试(cangen can0 -I 604 -L 8 -D 40F9601900000000 -g 4)还是编写代码测试都是一样的



这是刚测试的,一段时间后就发不出数据了,持续测试大概20分钟左右
重新卸载can(ip link set can0 down)再加载会恢复正常

要双向的通讯才会出现,一个设备发另一个设备接受到数据后应答,如果是单纯的板子往外发或者单纯的板子接收总线的can包实测没出现过问题

双向通信接收和发送大概是每秒多少帧

CAN 硬件层可解决总线仲裁,但在双向通信应用中仍然需要应用层做主动避让设计,否则可能出现逻辑混乱、带宽拥堵、或偶发死锁。

can双向通信,节点A和B要用不同的id;
相同id不符合协议规范;

1 个赞


2ms一帧数据,板子只接了一个电机,电机的CAN-ID为601,进行压力测试,出现20min到2小时不等的can死机发不出数据