applededipan 发表于 2021-7-8 22:21:53

UBUNTU系统通过spi扩展can接口,实时性如何?会不会丢数据?

用英伟达的tx2通过spi接口外加MCP2518芯片扩展can接口,发现数据量大时会有丢包现象,且很明显,是不是ubuntu实时性的问题?

jufr12315 发表于 2021-7-8 23:04:17

之前公司用了人家的工控机,安卓系统,在底层接收数据得做队列接收

LM5017 发表于 2021-7-8 23:33:45

SPI转CAN的这种芯片,客户反馈说同时收发时候会卡死,我自己没用过。

modbus 发表于 2021-7-9 00:19:48

LM5017 发表于 2021-7-8 23:33
SPI转CAN的这种芯片,客户反馈说同时收发时候会卡死,我自己没用过。

MCP2515用了很多,没有遇见过这种情况,不过是用单片机做的

knight_sh 发表于 2021-7-9 06:30:37

mcp2515,自己写了can字符设备驱动,用着挺稳定

tdatd 发表于 2021-7-9 08:04:48

看驱动吧,很多工控机都是ubuntu 带can接口。x86工控机一般是pcie扩展,包括树莓派也是类似你这样的架构,应该不是ubuntu的问题。

applededipan 发表于 2021-7-9 08:27:33

tdatd 发表于 2021-7-9 08:04
看驱动吧,很多工控机都是ubuntu 带can接口。x86工控机一般是pcie扩展,包括树莓派也是类似你这样的架构, ...

我实际使用时是接毫米波雷达,当雷达检测到障碍物个数比较少时(如5。6个)数据不会丢失,但当检测到障碍物个数比较多时,几十个以上,最多100个,这时候丢包就很严重了。现在考虑两个方面:1是不是ubuntu这端应该有个数据缓存区或fifo,这个是不是设置的太小了;2是mcp通过can读取到数据后暂存在fifo中,这个fifo是不是太小,导致spi那边还没读取就已经满了?

applededipan 发表于 2021-7-9 08:29:37

knight_sh 发表于 2021-7-9 06:30
mcp2515,自己写了can字符设备驱动,用着挺稳定

我实际使用时是接毫米波雷达,当雷达检测到障碍物个数比较少时(如5。6个)数据不会丢失,但当检测到障碍物个数比较多时,几十个以上,最多100个,这时候丢包就很严重了。现在考虑两个方面:1是不是ubuntu这端应该有个数据缓存区或fifo,这个是不是设置的太小了;2是mcp通过can读取到数据后暂存在fifo中,这个fifo是不是太小,导致spi那边还没读取就已经满了?

applededipan 发表于 2021-7-9 08:34:36

knight_sh 发表于 2021-7-9 06:30
mcp2515,自己写了can字符设备驱动,用着挺稳定

我实际使用时是接毫米波雷达,当雷达检测到障碍物个数比较少时(如5。6个)数据不会丢失,但当检测到障碍物个数比较多时,几十个以上,最多100个,这时候丢包就很严重了。现在考虑两个方面:1是不是ubuntu这端应该有个数据缓存区或fifo,这个是不是设置的太小了;2是mcp通过can读取到数据后暂存在fifo中,这个fifo是不是太小,导致spi那边还没读取就已经满了?

applededipan 发表于 2021-7-9 08:35:54

jufr12315 发表于 2021-7-8 23:04
之前公司用了人家的工控机,安卓系统,在底层接收数据得做队列接收

底层具体是指那一部分,驱动这一层吗?

G.ai 发表于 2021-7-9 08:57:06

MCP2515用过,控制好数据量还是没有问题的

shiva_shiva 发表于 2021-7-9 09:01:23

如果can控制器丢了数据应该可以从寄存器读到状态。

knight_sh 发表于 2021-7-9 09:08:11

applededipan 发表于 2021-7-9 08:34
我实际使用时是接毫米波雷达,当雷达检测到障碍物个数比较少时(如5。6个)数据不会丢失,但当检测到障碍 ...

从描述上看:1,fifo有可能过小,驱动里最好还是要实现一层fifo; 2, 最多达100个障碍物,是不是可以将can报文协议压缩,8字节的报文尽可能多的表达检测的状态,而不是一个障碍物一条can报文

applededipan 发表于 2021-7-9 09:25:27

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,则基本都会丢包了。。。

knight_sh 发表于 2021-7-9 09:35:17

applededipan 发表于 2021-7-9 09:25
这个是传感器定死了的,不能修改。它的规则是如果有N个障碍物,会先发一条ID为A的消息,该消息包含障碍物 ...

那驱动的中断要响应非常快,中断上半部从寄存器读到本地fifo,下半部读fifo发往用户空间,fifo空间要大一点

Mecono 发表于 2021-7-9 09:39:25

我们之前在TX2下面调2515也遇到过丢包的问题,应该是TX2的2515驱动问题。
回来自己做的can卡走的utp。

applededipan 发表于 2021-7-9 09:48:11

knight_sh 发表于 2021-7-9 09:35
那驱动的中断要响应非常快,中断上半部从寄存器读到本地fifo,下半部读fifo发往用户空间,fifo空间要大一 ...

现在初步感觉也是这个地方有点问题

applededipan 发表于 2021-7-9 09:48:55

Mecono 发表于 2021-7-9 09:39
我们之前在TX2下面调2515也遇到过丢包的问题,应该是TX2的2515驱动问题。
回来自己做的can卡走的utp。 ...

两点之间 曲线最短{:cry:}

Mecono 发表于 2021-7-9 10:14:58

applededipan 发表于 2021-7-9 09:48
两点之间 曲线最短

用tx2的原生CAN就没有丢包的问题。

applededipan 发表于 2021-7-9 10:31:48

Mecono 发表于 2021-7-9 10:14
用tx2的原生CAN就没有丢包的问题。

是的 但是如果在用原生can时,读取can数据的线程中sleep几个ms 是不是也会丢数据?

xjavr 发表于 2021-7-9 11:32:02

applededipan 发表于 2021-7-9 10:31
是的 但是如果在用原生can时,读取can数据的线程中sleep几个ms 是不是也会丢数据? ...

canfd掉是正常的,你可以算下波特率,和芯片缓冲区的接收能力,就可以得出来系统最晚取数据的时间,如果系统不能保证,就会掉。

Mecono 发表于 2021-7-9 11:52:27

applededipan 发表于 2021-7-9 10:31
是的 但是如果在用原生can时,读取can数据的线程中sleep几个ms 是不是也会丢数据? ...

本身ubuntu的系统调度就有不确定性,跑can的话,帧间隔不是很稳定。
我们后期换成了mcu做的can 网关。

jufr12315 发表于 2021-7-9 12:02:24

applededipan 发表于 2021-7-9 08:35
底层具体是指那一部分,驱动这一层吗?

对的,我记得之前用的工控机也是这个CAN芯片,这个芯片应该是可以的,看看驱动有没有问题

wurst 发表于 2021-7-10 22:15:26

估计中断太频繁了,内核忙不过来
页: [1]
查看完整版本: UBUNTU系统通过spi扩展can接口,实时性如何?会不会丢数据?