南宫尘雪 发表于 2022-5-27 16:34:09

IPC-M10R800-A3568J RS485使用时丢包、卡死

我现在在使用IPC-M10R800-A3568J ,使用的是Ubuntu20.04文件系统,工程需要使用两路RS485同时连续使用,在使用过程中发现RS485会丢包。以下是排除过程:
1、将需要使用的串口由两路RS485切换为两路RS232,则完全使用正常;
2、仅使用一路RS485,不使用另外一路RS485和两路RS232以及两路uart, 则通信正常;
3、将工程代码中关于RS485的代码单独拿出来,仅包含对RS485的写操作,则此进程(图中为midman)在一段时间后变为了僵尸进程,且kworker/0:1+wk2xxx-2进程会占用大量cpu资源,如下图:
4、在设备中,看到wk2124芯片,调用的compatible属性为“firefly,spi-wk2xxx”,但在kernel的drivers目录里,仅用名为“spi-wk2xxx”的二进制文件,而没有驱动源码。我怀疑可能与wk2124的驱动有关。

Liuth 发表于 2022-5-28 10:12:28

试一下同时用两路 UART 会不会有问题

南宫尘雪 发表于 2022-5-29 19:05:59

Liuth 发表于 2022-5-28 10:12
试一下同时用两路 UART 会不会有问题

是的,使用那两路uart也会出现问题,使用RS232就完全没有问题。RS232是MCU直出的,485和uart是转接的。我怀疑是WK2124的问题。
还有个问题请教,有时候会遇到,在开机状态下输入命令reboot和在图形界面点击重启,设备只是关机了,后面没有启动,有上面可能的原因嘛

Liuth 发表于 2022-5-30 09:52:42

spi 转的 uart 性能是不如原生的,如果一定要用 485 的话,可以降低波特率试试

南宫尘雪 发表于 2022-5-30 12:29:35

Liuth 发表于 2022-5-30 09:52
spi 转的 uart 性能是不如原生的,如果一定要用 485 的话,可以降低波特率试试

现在使用的是9600,按理说波特率不高呢,单个包长也只有几十字节。这个现象比较奇怪,感觉像wk2124驱动的问题

Liuth 发表于 2022-5-31 10:44:26

在设备树 arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtsi 中把DMA关掉试一下
&spi1 {
      status = "okay";
+       dma-names = "!tx", "!rx";
};

南宫尘雪 发表于 2022-6-6 10:12:35

Liuth 发表于 2022-5-31 10:44
在设备树 arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtsi 中把DMA关掉试一下
&spi1 {
         ...

还是不行哎,情况一样的

Liuth 发表于 2022-6-6 14:08:53

那没有办法了,可以尝试添加软件流控,或者改用RS232

南宫尘雪 发表于 2022-7-1 15:45:42

还发现一个很奇怪的问题,使用RS485发送数据时,0d这个数据,在传输后变成了0a,而其他数据不受影响,验证了很多次,就只有0d会变。

luwy 发表于 2022-7-14 19:20:35

我们这边测试,发送0d,接收正常,能否提供下你那边的复现方法,这边再测试下
页: [1]
查看完整版本: IPC-M10R800-A3568J RS485使用时丢包、卡死