您好!
我们最近在项目中升级到了 SDK 6.40.00.13。 我们现在看到了 UART2驱动程序的相关问题。 在某些情况下、可能会丢失几个字节、并且在发生这种情况时还会返回错误的数据顺序。 我可以看到 UART2驱动程序中关于 SDK 6.40中的 RX 数据发生了重大变化。
在本例中、我们已将 UART 设置为
- Ringbuffer 大小32字节
- .rxIntFifoThr = UART2CC26X2_FIFO_THRESHOLD_4_8
- uartParams.readMode = UART2_Mode_Blocking;
- uartParams.readReturnMode = UART2_ReadReturnMode_partial;
- 波特率115200
- 使用 RTS 和 CTS
我们使用 UART2_readTimeout 读取到大小为1024字节的缓冲区、我们实际执行的总传输约为330 KB (即我们调用 UART2_readTimeout、每次请求1024个字节都调用它例如330次。 这个用例是通过蜂窝式调制解调器下载文件)。
我们看到的是、有时在请求1024个字节时、我们仅返回16个字节、然后对 UART2_readTimeout 的调用将以一些不同的块返回请求的其余数据、 大部分时间是36个字节、后跟972个字节、例如、第三次调用 UART2_readTimeout。
问题在于返回的16个字节。 它将始终以00 00 00 00开头、这是不正确的数据。 然后16个字节和以下36个字节块中的其余数据的顺序错误。
例如(我对对应的器件进行了颜色编码、这样您就会发现收到的顺序有误)
接收到错误的数据(16个字节后32个字节)
00 00 00 00 20 25 64 0D 0A 00 5B 25 73 3A 25 64 73 3A 25 64 5D 20 30 78 25 30 38 78 0D 0A 00 5B 25 73 3A 25 64 5D 20 49 6E 76 61 6C 69 64 20 65
应为(16个字节、然后32个字节)
73 3A 25 64 5D 20 30 78 25 30 38 78 0D 0A 00 5B 25 73 3A 25 64 5D 20 49 6E 76 61 6C 69 64 20 65 76 65 6E 74 20 25 64 0D 0A 00 5B 25 73 3A 25 64
我找到了使其正常工作的一些权变措施
- 将缓冲区大小从1024更改为961字节或更低。 更高字节似乎也可以正常工作、例如2048字节
- 将 RX FIFO 阈值更改为 UART2CC26X2_FIFO_THRESHOLD_1_8 (这很奇怪、因为 UART API 中规定"@注意、应避免将 UART2CC26X2_FIFO_THRESHOLD_1_8作为 RX FIFO 阈值、因为使用 UART2_ReadReturnMode_Partial 时、这可能导致读取操作不可靠")
您能介绍一下吗?
Br、
Johannes Kjällquist ć