主题中讨论的其他器件:AM623、
工具与软件:
你(们)好
我们是否有 FAE 或指南来介绍如何在 RT-Linux 中实现 UART DMA?
SDK 8.6.
此致
Zekun
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
主题: AM623处理器上的 UART5数据丢失和输入溢出问题
问题描述:
我使用 AM623处理器、并且在 UART5以115200波特接收期间会遇到偶尔的数据丢失(缺少1-3个字节)。 这大约每几百次传输发生一次。 内核日志显示重复的输入溢出错误:
[ 3816.583194] ttyS ttyS5: 1 input overrun(s)
[ 3921.439083] ttyS ttyS5: 1 input overrun(s)
[ 3968.364367] ttyS ttyS5: 1 input overrun(s)
[ 4055.473693] ttyS ttyS5: 1 input overrun(s)
Current UART5 Configuration (DTS):
main_uart5: serial@2850000 {
compatible = "ti,am64-uart", "ti,am654-uart";
reg = <0x00 0x02850000 0x00 0x100>;
interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&k3_pds 156 TI_SCI_PD_EXCLUSIVE>;
clocks = <&k3_clks 156 0>;
clock-names = "fclk";
};
Request:
To resolve the overrun issue, I propose adding DMA support to UART5.Please guide me on how to configure this UART5
尊敬的 Liubin:
我在三个 SDK 版本中重复出现了相同的问题: 08_06_00_42 、 09_00_00_03 和 09_01_00_08 、但在中不会出现此问题 10_01_10_04 SDK 版本。
重现步骤
stty -F /dev/ttyS3 ispeed 115200 ospeed 115200 cs8 -echo time 1
cat /dev/ttyS3 > serial_115200_100_atk.log
发现的问题
[ 1895.708432] ttyS ttyS3: 1 input overrun(s)
[ 2280.827981] ttyS ttyS3: 1 input overrun(s)
[ 2294.383918] ttyS ttyS3: 1 input overrun(s)
申请
由于较新的 SDK (10_01_10_04)可修复此问题、因此请提供一个可应用于较旧 SDK 版本的补丁。
您好 Liubin、我找到了下面的两个链接。 它们是否解决了我所描述的问题?
通过实际测试、应用链路中提供的修复方法导致了更严重的字节丢失概率、11个数据包组中有5个组发生字节丢失。
https://lore.kernel.org/lkml/ffbe6439-9696-4abe-976b-07286b37a219@ti.com/T/
https://www.ti.com/lit/er/sprz536b/sprz536b.pdf?ts = 1742317798669
lore.kernel.org/.../quote]是的,这是修复数据丢失问题的补丁。
通过实际测试、应用链接中提供的修复方法导致更严重的字节丢失概率、11个数据包组中有5个组出现字节丢失。您是否应用了此补丁的 v3或 v4?
[报价] [/quote]
在 SDK8.6中、除了应用的补丁 v4、您是否可以尝试下面的内核补丁来查看它是否修复了数据丢失问题? 该补丁基本上会删除"UART_RX_TIMEOUT_QUIRK"标志。
diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c index 537bee8d2258..acc017baf325 100644 --- a/drivers/tty/serial/8250/8250_omap.c +++ b/drivers/tty/serial/8250/8250_omap.c @@ -1254,8 +1254,7 @@ static struct omap8250_dma_params am33xx_dma = { static struct omap8250_platdata am654_platdata = { .dma_params = &am654_dma, - .habit = UART_HAS_EFR2 | UART_HAS_RHR_IT_DIS | - UART_RX_TIMEOUT_QUIRK, + .habit = UART_HAS_EFR2 | UART_HAS_RHR_IT_DIS, }; static struct omap8250_platdata am33xx_platdata = {
您好、Bin、
我注意到、应用 TI 补丁后、当服务进程未运行时、UART 不会丢失字节。 但是、在运行服务程序时、经常会发生字节丢失。 字节丢失始终与设置的 UART_LSR_OE 一致。 芯片的 FIFO 的大小为64字节、但是在第65字节位置发生重复损耗。 由于我们使用的是带有强制线程化中断的 RT-Linux、因此我怀疑当服务运行时、线程化中断可能无法及时得到处理。 因此、我仍然希望 TI 为 UART DMA 提供一个器件树配置参考、以帮助我验证该假设。
您好、Bin、
感谢您的支持。
根本原因分析:
实时 Linux (RT-Linux)强制使所有中断服务例程(ISR)线程化、这意味着系统中断由内核线程处理、以执行服务函数(然后与用户进程和其他内核线程竞争以进行调度)。 应用 TI 的补丁(该补丁解决了 TI UART 控制器中的一个错误、并降低字节丢失的可能性、但不能完全解决该问题)后、当产品线的服务进程运行时、系统不仅会生成其他进程、还会唤醒许多其他内核线程。 在这种情况下、无法及时调度 UART 接收线程、从而导致 RX FIFO 溢出并永久丢失字节。
解决和验证:
UART 接收中断触发阈值从默认的48字节(芯片的 RX FIFO 大小为64字节)调整为16字节。 进行此调整的原因是:
验证测试:
两个 UART 通道每100ms 同时接收180字节。 在两个通道上有20,000个数据集之后、 零字节丢失 观测到的波形。
尊敬的环环先生/女士:
[报价 userid="629361" url="~/support/processors-group/processors/f/processors-forum/1488925/am625-how-to-enable-uart-dma-in-rt-linux/5743531 #5743531"] 解决和验证: 感谢您分享分辨率。
您好、Bin、
我们的产品目前正在从08_06_00_42版升级到10_01_10_04版的 SDK。 关于您提到的 UART DMA 问题、我想确认在最新的10_01_10_04版本中该问题是否仍然存在。 我对 DMA 相关的问题也很感兴趣。 您能分享一下 DMA 可能会引入哪些具体问题吗? 我们是否可以参考任何技术文档进行进一步调查?
丢失字节的根本原因与中断线程有关、其中可能无法足够及时地调度 UART 接收线程来读取接收寄存器。 为了提高 UART 接收的稳健性、我们打算在新的 SDK 中实施 DMA。 我们的问题是、即使具有16字节的中断阈值、瞬态系统过载仍可能由于调度延迟而导致 RX FIFO 溢出。 我们相信、启用 DMA 可以通过减少对实时线程调度的依赖来降低这种风险。
尊敬的环环先生/女士:
我在三个 SDK 版本中重现了同样的问题: 08_06_00_42 、 09_00_00_03 和 09_01_00_08 、但在中不会出现此问题 10_01_10_04 SDK 版本
我们的产品目前正在从08_06_00_42版升级到10_01_10_04版的 SDK。 关于您提到的 UART DMA 问题、我想确认在最新的10_01_10_04版本中该问题是否仍然存在。 [报价]大约两周前、您说 SDK 10.1.10.4不会出现此问题、但现在您询问 SDK 10.1.10.4中是否仍存在此问题。 您能解释一下视差吗? 您在谈论不同的 UART 用例/问题吗?
由于您现在正在着手升级到 sdk10.1、因此我想了解确切的 UART 测试用例和故障、以便我可以在我这边重现并研究它。