UBUNTU系统通过spi扩展can接口,实时性如何?会不会丢数据?
用英伟达的tx2通过spi接口外加MCP2518芯片扩展can接口,发现数据量大时会有丢包现象,且很明显,是不是ubuntu实时性的问题? 之前公司用了人家的工控机,安卓系统,在底层接收数据得做队列接收 SPI转CAN的这种芯片,客户反馈说同时收发时候会卡死,我自己没用过。 LM5017 发表于 2021-7-8 23:33SPI转CAN的这种芯片,客户反馈说同时收发时候会卡死,我自己没用过。
MCP2515用了很多,没有遇见过这种情况,不过是用单片机做的 mcp2515,自己写了can字符设备驱动,用着挺稳定 看驱动吧,很多工控机都是ubuntu 带can接口。x86工控机一般是pcie扩展,包括树莓派也是类似你这样的架构,应该不是ubuntu的问题。 tdatd 发表于 2021-7-9 08:04
看驱动吧,很多工控机都是ubuntu 带can接口。x86工控机一般是pcie扩展,包括树莓派也是类似你这样的架构, ...
我实际使用时是接毫米波雷达,当雷达检测到障碍物个数比较少时(如5。6个)数据不会丢失,但当检测到障碍物个数比较多时,几十个以上,最多100个,这时候丢包就很严重了。现在考虑两个方面:1是不是ubuntu这端应该有个数据缓存区或fifo,这个是不是设置的太小了;2是mcp通过can读取到数据后暂存在fifo中,这个fifo是不是太小,导致spi那边还没读取就已经满了? knight_sh 发表于 2021-7-9 06:30
mcp2515,自己写了can字符设备驱动,用着挺稳定
我实际使用时是接毫米波雷达,当雷达检测到障碍物个数比较少时(如5。6个)数据不会丢失,但当检测到障碍物个数比较多时,几十个以上,最多100个,这时候丢包就很严重了。现在考虑两个方面:1是不是ubuntu这端应该有个数据缓存区或fifo,这个是不是设置的太小了;2是mcp通过can读取到数据后暂存在fifo中,这个fifo是不是太小,导致spi那边还没读取就已经满了? knight_sh 发表于 2021-7-9 06:30
mcp2515,自己写了can字符设备驱动,用着挺稳定
我实际使用时是接毫米波雷达,当雷达检测到障碍物个数比较少时(如5。6个)数据不会丢失,但当检测到障碍物个数比较多时,几十个以上,最多100个,这时候丢包就很严重了。现在考虑两个方面:1是不是ubuntu这端应该有个数据缓存区或fifo,这个是不是设置的太小了;2是mcp通过can读取到数据后暂存在fifo中,这个fifo是不是太小,导致spi那边还没读取就已经满了? jufr12315 发表于 2021-7-8 23:04
之前公司用了人家的工控机,安卓系统,在底层接收数据得做队列接收
底层具体是指那一部分,驱动这一层吗? MCP2515用过,控制好数据量还是没有问题的 如果can控制器丢了数据应该可以从寄存器读到状态。 applededipan 发表于 2021-7-9 08:34
我实际使用时是接毫米波雷达,当雷达检测到障碍物个数比较少时(如5。6个)数据不会丢失,但当检测到障碍 ...
从描述上看:1,fifo有可能过小,驱动里最好还是要实现一层fifo; 2, 最多达100个障碍物,是不是可以将can报文协议压缩,8字节的报文尽可能多的表达检测的状态,而不是一个障碍物一条can报文 knight_sh 发表于 2021-7-9 09:08
从描述上看:1,fifo有可能过小,驱动里最好还是要实现一层fifo; 2, 最多达100个障碍物,是不是可以将ca ...
这个是传感器定死了的,不能修改。它的规则是如果有N个障碍物,会先发一条ID为A的消息,该消息包含障碍物个数,然后紧接着发送N条ID为B的消息,再发送N条ID为C的消息,再发送N条ID为D的消息,每个ID的消息内都包含了对障碍物的不同属性描述。所以如果有N个障碍物,啊那么发送的消息数是 1 + N + N + N 条can报文。如果N大于10,则基本都会丢包了。。。 applededipan 发表于 2021-7-9 09:25
这个是传感器定死了的,不能修改。它的规则是如果有N个障碍物,会先发一条ID为A的消息,该消息包含障碍物 ...
那驱动的中断要响应非常快,中断上半部从寄存器读到本地fifo,下半部读fifo发往用户空间,fifo空间要大一点 我们之前在TX2下面调2515也遇到过丢包的问题,应该是TX2的2515驱动问题。
回来自己做的can卡走的utp。 knight_sh 发表于 2021-7-9 09:35
那驱动的中断要响应非常快,中断上半部从寄存器读到本地fifo,下半部读fifo发往用户空间,fifo空间要大一 ...
现在初步感觉也是这个地方有点问题 Mecono 发表于 2021-7-9 09:39
我们之前在TX2下面调2515也遇到过丢包的问题,应该是TX2的2515驱动问题。
回来自己做的can卡走的utp。 ...
两点之间 曲线最短{:cry:} applededipan 发表于 2021-7-9 09:48
两点之间 曲线最短
用tx2的原生CAN就没有丢包的问题。
Mecono 发表于 2021-7-9 10:14
用tx2的原生CAN就没有丢包的问题。
是的 但是如果在用原生can时,读取can数据的线程中sleep几个ms 是不是也会丢数据? applededipan 发表于 2021-7-9 10:31
是的 但是如果在用原生can时,读取can数据的线程中sleep几个ms 是不是也会丢数据? ...
canfd掉是正常的,你可以算下波特率,和芯片缓冲区的接收能力,就可以得出来系统最晚取数据的时间,如果系统不能保证,就会掉。 applededipan 发表于 2021-7-9 10:31
是的 但是如果在用原生can时,读取can数据的线程中sleep几个ms 是不是也会丢数据? ...
本身ubuntu的系统调度就有不确定性,跑can的话,帧间隔不是很稳定。
我们后期换成了mcu做的can 网关。 applededipan 发表于 2021-7-9 08:35
底层具体是指那一部分,驱动这一层吗?
对的,我记得之前用的工控机也是这个CAN芯片,这个芯片应该是可以的,看看驱动有没有问题 估计中断太频繁了,内核忙不过来
页:
[1]