主题中讨论的其他器件:UNIFLASH
正如之前在 https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1087696/tmdsemu110-u-xds110-usb-uart-is-bursty-at-high-baud-rates/4035123#4035123中讨论的 、在 DMA 模式下的 XDS110 USB UART 处理中存在一种尴尬的行为、在这种情况下、频率小的数据突发导致固件在通过 USB 发送数据之前等待整个 DMA 缓冲区填满。 在高波特率下、这会为短 UART 消息突发造成数百毫秒(在极端情况下甚至超过一秒)的延迟。 我调试了 XDS110固件以确定此问题的确切原因、并在我链接的早期主题中详细描述了原因。 但是、这一点当时没有解决、因为需要一些工程时间才能设计出解决方案、并且这不是 TI 的优先考虑事项。
这种高延迟使 XDS110 USB UART 无法用于我的应用、因此我之前改用外部 USB-UART 适配器、但这样很不方便。 我稍后修补了 XDS110固件、以更改切换到基于 DMA 的 UART 操作时的波特率、从230400波特改为0x200000 (2097152)波特。 XDS110 CPU 的速度非常快、足以处理2M 波特的非 DMA UART。 回到2022年、使用 XDS110固件3.0.0.19 (随 Uniflash 7.1.0提供)在高波特率下存在单独/不相关的间歇数据丢失错误、UART 写入大小不是4的倍数、但这似乎在最新的 XDS110固件3.0.0.28 (随 Uniflash 8.6.0提供)上已修复。
我修补了 XDS110固件3.0.0.28、从而通过将 firmware_3.0.0.28.bin 中偏移0x0A14处的字节从61 3F 更改为00 1F、提高了 DMA 模式 UART 切换波特率。 通过这一改变、我获得了可靠的低延迟 USB UART、以及采用2M 波特的 XDS110、非常适合我。 但是、如果我不必在每次发布新固件版本时都重新修补 XDS110固件(并确定版本的正确补丁偏移量)、那会更好。 如果您做了这个简单的小改动、将 UART 到 DMA 操作的切换波特率提高到大约2M 波特以上、那么这将解决我的问题、并让您的所有其他客户也可以更好地体验 XDS110 UART。 或者、您也可以尝试通过频繁的小数据突发来解决基于 DMA 操作的延迟问题、但这需要更多的工程时间/精力。