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的驱动有关。
试一下同时用两路 UART 会不会有问题 Liuth 发表于 2022-5-28 10:12
试一下同时用两路 UART 会不会有问题
是的,使用那两路uart也会出现问题,使用RS232就完全没有问题。RS232是MCU直出的,485和uart是转接的。我怀疑是WK2124的问题。
还有个问题请教,有时候会遇到,在开机状态下输入命令reboot和在图形界面点击重启,设备只是关机了,后面没有启动,有上面可能的原因嘛
spi 转的 uart 性能是不如原生的,如果一定要用 485 的话,可以降低波特率试试 Liuth 发表于 2022-5-30 09:52
spi 转的 uart 性能是不如原生的,如果一定要用 485 的话,可以降低波特率试试
现在使用的是9600,按理说波特率不高呢,单个包长也只有几十字节。这个现象比较奇怪,感觉像wk2124驱动的问题 在设备树 arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtsi 中把DMA关掉试一下
&spi1 {
status = "okay";
+ dma-names = "!tx", "!rx";
}; Liuth 发表于 2022-5-31 10:44
在设备树 arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtsi 中把DMA关掉试一下
&spi1 {
...
还是不行哎,情况一样的 那没有办法了,可以尝试添加软件流控,或者改用RS232 还发现一个很奇怪的问题,使用RS485发送数据时,0d这个数据,在传输后变成了0a,而其他数据不受影响,验证了很多次,就只有0d会变。 我们这边测试,发送0d,接收正常,能否提供下你那边的复现方法,这边再测试下
页:
[1]