Firefly开源社区

标题: IPC-M10R800-A3568J RS485使用时丢包、卡死 [打印本页]

作者: 南宫尘雪    时间: 2022-5-27 16:34
标题: 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
试一下同时用两路 UART 会不会有问题
作者: 南宫尘雪    时间: 2022-5-29 19:05
Liuth 发表于 2022-5-28 10:12
试一下同时用两路 UART 会不会有问题

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

作者: Liuth    时间: 2022-5-30 09:52
spi 转的 uart 性能是不如原生的,如果一定要用 485 的话,可以降低波特率试试
作者: 南宫尘雪    时间: 2022-5-30 12:29
Liuth 发表于 2022-5-30 09:52
spi 转的 uart 性能是不如原生的,如果一定要用 485 的话,可以降低波特率试试

现在使用的是9600,按理说波特率不高呢,单个包长也只有几十字节。这个现象比较奇怪,感觉像wk2124驱动的问题
作者: Liuth    时间: 2022-5-31 10:44
在设备树 arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtsi 中把DMA关掉试一下
&spi1 {
        status = "okay";
+       dma-names = "!tx", "!rx";
};
作者: 南宫尘雪    时间: 2022-6-6 10:12
Liuth 发表于 2022-5-31 10:44
在设备树 arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtsi 中把DMA关掉试一下
&spi1 {
         ...

还是不行哎,情况一样的
作者: Liuth    时间: 2022-6-6 14:08
那没有办法了,可以尝试添加软件流控,或者改用RS232
作者: 南宫尘雪    时间: 2022-7-1 15:45
还发现一个很奇怪的问题,使用RS485发送数据时,0d这个数据,在传输后变成了0a,而其他数据不受影响,验证了很多次,就只有0d会变。

d319925d32bc2bc7551c71deb871ea1.png (24.43 KB, 下载次数: 738)

d319925d32bc2bc7551c71deb871ea1.png

作者: luwy    时间: 2022-7-14 19:20
我们这边测试,发送0d,接收正常,能否提供下你那边的复现方法,这边再测试下




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1