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.

[参考译文] AM625:同时运行多个串行端口并切换有线 NIC 以引入干扰。

Guru**** 2589245 points
Other Parts Discussed in Thread: AM625

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1504677/am625-run-multiple-serial-ports-simultaneously-and-toggle-the-wired-nic-to-introduce-interference

器件型号:AM625


工具/软件:

SDK10.00.07.04 内核版本 6.6.32

1.主测试项 :同时操作 4 个串行端口(460800 波特)和 1 个串行端口(115200 波特)

serialcheck -b 115200 -d /dev/ttyS3 -f ./binary_1W_ttyS3 -l 696729 -m d &
serialcheck -b 460800 -d /dev/ttyS4 -f ./binary_1W_ttyS4 -l 2786918 -m d &
serialcheck -b 460800 -d /dev/ttyS6 -f ./binary_1W_ttyS6 -l 2786918 -m d &
serialcheck -b 460800 -d /dev/ttyS7 -f ./binary_1W_ttyS7 -l 2786918 -m d &
serialcheck -b 460800 -d /dev/ttyS8 -f ./binary_1W_ttyS8 -l 2786918 -m d &

2.干扰测试项目 :切换有线网络接口卡 (NIC)

./ eth_up_down.sh &

#!/bin/sh

用于 (;;))
应该做
ifconfig eth0 down
睡眠 1

ifconfig eth0 up
睡眠 1
已完成

3.测试结果 :serialcheck 串行端口测试程序已停止

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Fuyi:

    我们首先在以下主题中等待测试结果、然后评估此测试用例。

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1472428/am625-uart-with-dma-takes-longer-in-continues-sending/5780427#5780427

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1. 应用了以下补丁。

      diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
      index 0b9c47172bc8..0952f08622c9 100644
      --- a/drivers/tty/serial/8250/8250_omap.c
      +++ b/drivers/tty/serial/8250/8250_omap.c
      @@ -1042,6 +1042,10 @@ static int omap_8250_tx_dma(struct uart_8250_port *p)
              unsigned int    skip_byte = 0;
              int ret;
       
      +       /* HACK: do not use DMA for TX */
      +       ret = -EINVAL;
      +       goto err;
      +
              if (dma->tx_running)
                      return 0;
              if (uart_tx_stopped(&p->port) || uart_circ_empty(xmit)) {


    2. 已使用测试串行端口  序列检查  指定  DMA 模式

    3. 测试结果:  所有五个序列检查实例均已损毁

      类似的错误如下所示:

      timeout, RX/TX: 9856/10000
      Needed 4 reads 1 writes Oh oh, inconsistency at pos 9856 (0x2680).
      
      Original sample:
      00002650: 62 60 f6 f1 ec 97 70 fe  32 b7 a0 14 32 e1 19 57   b`....p.2...2..W
      00002660: 14 60 e0 c3 44 ea 7a 9c  ce 1c 6f 54 e4 1f ef 89   .`..D.z...oT....
      00002670: f5 27 54 35 1d 57 b3 15  a4 c2 ed 79 da 8d 8e c6   .'T5.W.....y....
      00002680: e8 96 98 ef 5f 7b b9 12  a2 87 fc 53 50 35 7b da   ...._{.....SP5{.
      00002690: e7 8c c9 46 59 15 42 84  a3 22 0f b8 19 a9 a7 60   ...FY.B..".....`
      000026a0: dc cf a0 47 e8 b1 38 78  94 b7 fe 61 4d 30 64 74   ...G..8x...aM0dt
      
      Received sample:
      00002650: 62 60 f6 f1 ec 97 70 fe  32 b7 a0 14 32 e1 19 57   b`....p.2...2..W
      00002660: 14 60 e0 c3 44 ea 7a 9c  ce 1c 6f 54 e4 1f ef 89   .`..D.z...oT....
      00002670: f5 27 54 35 1d 57 b3 1

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Fuyi:

    请附加您捕获的其他控制台日志。 我想看看消息是否有任何模式。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能提醒一下我您使用的是哪个 SDK 或内核版本吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bin:

    客户忘记更新测试结果:

    应用的上层补丁、使用 DMA 进行测试(应用的补丁可禁用 Tx DMA)、甚至不会向上/向下切换以太网、串行检查也会同时在多个实例测试时挂起。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Tony:

    感谢您的更新。

    我将看看是否可以在 EVM 上重现问题并进行研究。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bin

    第一个和第二个补丁已包含在内核 6.6.32 中、因此我只需要应用第三个补丁进行修改。 我目前正在测试它。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bin

    应用补丁后、所有序列检查测试均已停止。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Fuyi:

    您是说测试因 RX 数据不随 TX 数据补丁而过早停止吗? 请附上测试日志。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、这看起来与应用第三个补丁之前的误差相同。

    您使用哪种 AM625 器件型号? 我想知道它有多少个 A53 内核。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它是双核 AM6252。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您提供的所有详细信息。 我将尝试在 EVM 上重现问题并进行研究。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我将在接下来的几周内离任。 到目前为止、我在 EVM 上的测试中有 3 个 UART 同时运行、没有 DMA 以及以太网链路建立/断开、我看到一个 UART 存在 RX 溢出问题。 回到办公室后、我将启用 UART DMA 并继续测试。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Fuyi:

    我仍在调试我的 EVM(没有 DMA)上的问题、此时我会看到 UART 行为不一致、因此尝试了解故障的确切原因。

    但我看到您使用带有参数'-m d'的 serialcheck 程序的方式可能不正确。 以下 SDK 文档显示不支持双工模式。 我猜原因是、串行检查不是一个多线程程序、在执行 TX 时、RX 被阻止、这可能会导致 TTY RX 缓冲区溢出、从而导致数据丢失。

    https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/11_00_09_04/exports/docs/linux/Foundational_Components kilers/kernel/uart/html#basic-external-loopback-testing Kernel_Drivers

    因此、请在每个 UART 上运行两次序列检查、一个使用“-m r“、另一个使用“-m t“。 这就是我的测试方式。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    serialcheck -b 115200 -d /dev/ttyS3 -f ./binary_1W_ttyS3 -l 696729 -m d &
    serialcheck -b 460800 -d /dev/ttyS4 -f ./binary_1W_ttyS4 -l 2786918 -m d &
    serialcheck -b 460800 -d /dev/ttyS6 -f ./binary_1W_ttyS6 -l 2786918 -m d &
    serialcheck -b 460800 -d /dev/ttyS7 -f ./binary_1W_ttyS7 -l 2786918 -m d &
    serialcheck -b 460800 -d /dev/ttyS8 -f ./binary_1W_ttyS8 -l 2786918 -m d &

    以及文件大小是多少 binary_1W_ttySx 该怎么办?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    10,000 字节

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我认为 10K 字节应该可以。 我在 3 个 UART 上同时测试了一个 350KB 的文件,没有发现任何数据丢失问题(与网卡上/下)。 但是,如果数据文件太大,它可能会导致数据丢失,因为 RX 被阻止时,整个文件被接收和比较数据不匹配。 如果 RX 被阻止的时间过长、则 RX 缓冲区会溢出、然后会发生数据丢失。

    您是否在 serialcheck 参数中使用了'-m r'和'-m t'而不是'-m d'进行了测试、以查看您的电路板上是否仍然出现数据丢失?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、bin

    我将接管这个问题。 我们在 serialcheck 参数中使用'-m r'和'-m t' 来代替'-m d'、但仍会发生数据包丢失。

    ./serialcheck_comen -b 115200 -d /dev/ttyS3 -f ./binary_1w_ttyS3 -l 696729 -m r &
    ./serialcheck_comen -b 460800 -d /dev/ttyS4 -f ./binary_1w_ttyS4 -l 2786918 -m r &
    ./serialcheck_comen -b 460800 -d /dev/ttyS6 -f ./binary_1w_ttyS6 -l 2786918 -m r &
    ./serialcheck_comen -b 460800 -d /dev/ttyS7 -f ./binary_1w_ttyS7 -l 2786918 -m r &
    ./serialcheck_comen -b 460800 -d /dev/ttyS8 -f ./binary_1w_ttyS8 -l 2786918 -m r & 
    
    ./serialcheck_comen -b 115200 -d /dev/ttyS3 -f ./binary_1w_ttyS3 -l 696729 -m t &
    ./serialcheck_comen -b 460800 -d /dev/ttyS4 -f ./binary_1w_ttyS4 -l 2786918 -m t &
    ./serialcheck_comen -b 460800 -d /dev/ttyS6 -f ./binary_1w_ttyS6 -l 2786918 -m t &
    ./serialcheck_comen -b 460800 -d /dev/ttyS7 -f ./binary_1w_ttyS7 -l 2786918 -m t &
    ./serialcheck_comen -b 460800 -d /dev/ttyS8 -f ./binary_1w_ttyS8 -l 2786918 -m t &

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jie:

    您能否分享显示数据丢失的测试日志?

    您是否在 UART 上使用或不使用 DMA 进行测试? 我在没有 DMA 的情况下同时测试了 3 个 UART 端口。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我同时在没有 DMA 的情况下测试五个端口。  

    Needed 153 reads 0 writes Oh oh, inconsistency at pos 9918 (0x26be).
    
    Original sample:
    00002680: e8 96 98 ef 5f 7b b9 12  a2 87 fc 53 50 35 7b da   ...._{.....SP5{.
    00002690: e7 8c c9 46 59 15 42 84  a3 22 0f b8 19 a9 a7 60   ...FY.B..".....`
    000026a0: dc cf a0 47 e8 b1 38 78  94 b7 fe 61 4d 30 64 74   ...G..8x...aM0dt
    000026b0: 97 d4 cb 67 13 1f 83 a2  88 1f 2b b3 b8 67 90 04   ...g......+..g..
    000026c0: 5d 34 09 1b c5 fd 10 00  fc 46 51 54 3b 92 70 1b   ]4.......FQT;.p.
    000026d0: b6 a3 43 44 f3 2f df af  09 f8 33 dc c0 2e 7f 6e   ..CD./....3....n
    
    Received sample:
    00002680: e8 96 98 ef 5f 7b b9 12  a2 87 fc 53 50 35 7b da   ...._{.....SP5{.
    00002690: e7 8c c9 46 59 15 42 84  a3 22 0f b8 19 a9 a7 60   ...FY.B..".....`
    000026a0: dc cf a0 47 e8 b1 38 78  94 b7 fe 61 4d 30 64 74   ...G..8x...aM0dt
    000026b0: 97 d4 cb 67 13 1f 83 a2  88 1f 2b b3 b8 67 04 5d   ...g......+..g.]
    000026c0: 34 09 1b c5 fd 10 00 fc  46 51 54 3b 92 70 1b b6   4.......FQT;.p..
    000026d0: a3 43 44 f3 2f df af 09  f8 33 dc c0 2e 7f 6e a8   .CD./....3....n.
    loops 3991 / 2786918
    
    spend 913 s
    Needed 157 reads 0 writes loops 3994 / 2786918
    [  987.251592] am65-cpsw-nuss 8000000.ethernet eth0: PHY [8000f00.mdio:00] driver [SMSC LAN8710/LAN8720] (irq=POLL)
    Needed 155 reads 0 writes loops 4004 / 2786918
    [  989.367907] am65-cpsw-nuss 8000000.ethernet eth0: PHY [8000f00.mdio:00] driver [SMSC LAN8710/LAN8720] (irq=POLL)
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jie:

    代码块似乎不知何故弄错了、但我可以看到 RX 在日志第 4 行中丢失了一个字节。

    这是我在测试中看到的完全相同的问题,原因是 serialcheck.cc 中的设计缺陷 它使用单个线程执行 RX 和 TX(但我们的解决方法是分别在仅 Rx 和仅 TX 模式下并行运行两次)、但 RX 例程仍然会接收整个数据文件(在测试中的 binary_1W_ttySx)、并与原始文件进行数据不匹配比较。 在比较期间、RX 被阻止、可能会发生数据丢失。

    在实际情况下、不应出现这种情况。 UART 用户空间应用应设计为能够足够快地使用 RX 数据、以便内核 TTY 层中的 RX 缓冲区不会溢出。

    为避免此序列检查测试中的数据丢失、您可以执行以下操作

    -减小数据文件的大小,使 RX 数据比较花费很少的时间;

    -或者暂停 TX 一小段时间,给 RX 时间进行数据比较。 我使用以下补丁进行了测试、它还解决了数据丢失问题。 不过、您可能必须调整测试的暂停时间。

    diff --git a/serialcheck.c b/serialcheck.c
    index f3161cc26a3d..32f596d0965b 100644
    --- a/serialcheck.c
    +++ b/serialcheck.c
    @@ -389,6 +389,10 @@ static int stress_test_uart_once(struct g_opt *opts, int fd, unsigned char *data
                    print_hex_dump(cmp_data + min_pos, max_pos - min_pos, min_pos);
                    return -1;
            }
    +
    +       /* pause TX for 100ms waiting for RX to finish memcmp() */
    +       if (opts->mode & MODE_TX_ONLY)
    +               usleep(100000);
            return 0;
     }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、bin

    发送每个 TX 后是否需要暂停 100ms? 串行端口的当前测试波特率在 460800 时已经很低。
    在实际使用场景中、串行通信的实际波特率由波特率本身决定、传输后不会增加额外延迟。 为了进行测试、我将减小数据文件的大小。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jie:

    如上所述、在传输整个数据文件后添加暂停是解决 RX 路径上串行检查程序中设计缺陷的方法之一。 在您的实际场景中、由于所有 UART 都没有硬件流控制、因此 RX 例程必须确保足够快地从 TTY 缓冲区读取数据、以避免数据溢出。

    我将减小数据文件的大小以进行测试。

    是的、这应该是更好的测试方法、因为在实际情况下、TX 可能不会停止传输。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Bin、

    我将数据文件减少到 100 字节,但数据包丢失仍然发生。 此外、我在 ttybuffer.c 文件中添加了超过内核缓冲区大小时的日志记录、但在数据包丢失期间不会显示此日志。 硬件 FIFO 段中可能会发生缓冲区溢出。
    	if (atomic_read(&port->buf.mem_used) > port->buf.mem_limit) { 
    		WARN_ONCE(1, "Memory limit exceeded: used=%d, limit=%d\n",
                  atomic_read(&port->buf.mem_used), port->buf.mem_limit);
    		return NULL;
    	}
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jie:

    您能否应用以下内核补丁来减少 RX FIFO 水线、看看它是否解决了数据丢失问题?

    diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
    index 0dd68bdbfbcf..a9306c5fedf7 100644
    --- a/drivers/tty/serial/8250/8250_omap.c
    +++ b/drivers/tty/serial/8250/8250_omap.c
    @@ -87,7 +87,7 @@
     #define OMAP_UART_TX_WAKEUP_EN (1 << 7)
     
     #define TX_TRIGGER     1
    -#define RX_TRIGGER     48
    +#define RX_TRIGGER     32
     
     #define OMAP_UART_TCR_RESTORE(x)       ((x / 4) << 4)

    我将查看是否可以在 SK 上启用更多 UART 端口来进行测试。 我现在启用了 3 个 UART。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    修改 RX FIFO 阈值也可能导致数据包丢失

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jie:

    感谢您的更新。

    我将调试 EVM 上的问题以了解一个字节如何丢失。 我会让你保持发布。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jie:

    您是否仍在测试中使用 RT Linux? 之前的 e2e 线程提到 RT Linux 对该问题没有帮助、但之前的测试 在序列检查程序中使用了'-m d'。 现在、由于测试已经使用两个单独的 seriallcheck 程序(分别用于 TX 和 RX)进行了更新、因此我想检查您是否仍使用 RT Linux 进行测试。

    当使用串行检查或任何其他程序进行 UART 外部环回测试时、在同一 UART 端口上发送和接收相同数量的数据。  但在实际用例中、UART 通常仅在其中一个方向 (RX 或 TX) 上有大量数据。 您项目中的 UART 是发送和接收相似数量的数据、还是仅在一个方向上? 我想知道您在工程中看到了什么确切的 UART 问题、而不是序列检查环回测试。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jie:

    您能否回答 Bin 的查询?

    此致

    Ashwani

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid=“7730" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1504677/am625-run-multiple-serial-ports-simultaneously-and-toggle-the-wired-nic-to-introduce-interference/5974577

    尊敬的 Jie:

    您是否仍在测试中使用 RT Linux? 之前的 e2e 线程提到 RT Linux 对该问题没有帮助、但之前的测试 在序列检查程序中使用了'-m d'。 现在、由于测试已经使用两个单独的 seriallcheck 程序(分别用于 TX 和 RX)进行了更新、因此我想检查您是否仍使用 RT Linux 进行测试。

    当使用串行检查或任何其他程序进行 UART 外部环回测试时、在同一 UART 端口上发送和接收相同数量的数据。  但在实际用例中、UART 通常仅在其中一个方向 (RX 或 TX) 上有大量数据。 您项目中的 UART 是发送和接收相似数量的数据、还是仅在一个方向上? 我想知道您在工程中看到了什么确切的 UART 问题、而不是序列检查环回测试。

    [/报价]

    我已解锁此主题、因此您可以回答我的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bin:
    在不使用-m d 选项的情况下、在 RT 内核上执行 serialcheck 程序时会出现数据包丢失。  结果甚至比使用 Linux 测试更糟糕, 在更短的时间内丢失数据,并导致序列检查崩溃。


    ./serialcheck_comen -b 115200 -d /dev/ttyS3 -f ./binary_1w_ttyS3 -l 696729 -m r &
    ./serialcheck_comen -b 460800 -d /dev/ttyS4 -f ./binary_1w_ttyS4 -l 2786918 -m r &
    ./serialcheck_comen -b 460800 -d /dev/ttyS6 -f ./binary_1w_ttyS6 -l 2786918 -m r &
    ./serialcheck_comen -b 460800 -d /dev/ttyS7 -f ./binary_1w_ttyS7 -l 2786918 -m r &
    ./serialcheck_comen -b 460800 -d /dev/ttyS8 -f ./binary_1w_ttyS8 -l 2786918 -m r & 
    
    ./serialcheck_comen -b 115200 -d /dev/ttyS3 -f ./binary_1w_ttyS3 -l 696729 -m t &
    ./serialcheck_comen -b 460800 -d /dev/ttyS4 -f ./binary_1w_ttyS4 -l 2786918 -m t &
    ./serialcheck_comen -b 460800 -d /dev/ttyS6 -f ./binary_1w_ttyS6 -l 2786918 -m t &
    ./serialcheck_comen -b 460800 -d /dev/ttyS7 -f ./binary_1w_ttyS7 -l 2786918 -m t &
    ./serialcheck_comen -b 460800 -d /dev/ttyS8 -f ./binary_1w_ttyS8 -l 2786918 -m t & 


    当然、这种环回压力测试代表了串行通信的极端情况。 只有当此类测试能够保证稳定通信时、我们才能确保充分覆盖正常条件。

    我们在其他平台(例如 IMX6、7 和 8)上应用相同的测试标准、这些平台也使用 Linux 操作系统。 此外、我尝试从 AM62 上的其他平台运行串行端口应力测试程序、也会发生数据包丢失的情况。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Joe、

    在不使用-m d 选项的情况下、在 RT 内核上执行序列检查程序时、会出现数据包丢失的情况。

    您能否分享数据丢失的日志?

    此外、我还尝试从 AM62 上的其他平台运行串行端口应力测试程序、并且还会发生数据包丢失的情况。

    AM62 上的其他平台意味着什么? 不同的 AM62 板?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否分享数据丢失的日志?

    timeout, RX/TX: 9999/10000
    Needed 39 reads 1 writes Oh oh, inconsistency at pos 5759 (0x167f).
    
    Original sample:
    00001640: db f3 47 95 05 ff fc 57  0f 1f fd b6 93 a0 7f 19   ..G....W........
    00001650: 6c 9e 6a 44 cc 80 66 d7  24 5c 4e f0 05 d1 3e a1   l.jD..f.$\N...>.
    00001660: a5 f2 f8 c3 ed d4 6f 8d  64 c2 54 94 cb ca 8d c7   ......o.d.T.....
    00001670: 78 81 b3 ee ed 87 c5 78  36 3e dd 57 1f 6b 85 3f   x......x6>.W.k.?
    00001680: 12 be c9 33 de 09 dc 77  dd b8 ee 84 3e e5 93 32   ...3...w....>..2
    00001690: 9d 29 bb 1f 8e 68 aa f5  27 60 cb d4 80 b0 7a 01   .)...h..'`....z.
    
    Received sample:
    00001640: db f3 47 95 05 ff fc 57  0f 1f fd b6 93 a0 7f 19   ..G....W........
    00001650: 6c 9e 6a 44 cc 80 66 d7  24 5c 4e f0 05 d1 3e a1   l.jD..f.$\N...>.
    00001660: a5 f2 f8 c3 ed d4 6f 8d  64 c2 54 94 cb ca 8d c7   ......o.d.T.....
    00001670: 78 81 b3 ee ed 87 c5 78  36 3e dd 57 1f 6b 85 12   x......x6>.W.k..
    00001680: be c9 33 de 09 dc 77 dd  b8 ee 84 3e e5 93 32 9d   ..3...w....>..2.
    00001690: 29 bb 1f 8e 68 aa f5 27  60 cb d4 80 b0 7a 01 3f   )...h..'`....z.?
    loops 9832 / 2786918
    
    spend 2265 s
    AM62 上的其他平台意味着什么? 不同的 AM62 板?[/报价] 我们使用我们自己开发的 UART 测试工具/方法在其他供应商的平台上进行了 UART 测试、同一测试可以在其他供应商的平台上通过、但在 AM62x 上丢失数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jie:

    感谢日志。 数据丢失模式与之前相同。

    我将对此进行研究。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jie:

    在等待发货时、您能否通过以下两项更改在您的电路板上进行测试?

    1.使用下面的内核补丁将 TX 加载大小更改为 48 字节。 这是为了与 UART 驱动程序中的 48 字节 RX FIFO 水线一致、从而更好地利用 RX FIFO。

    diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
    index 6d21e99a363f..ddee1f0e7741 100644
    --- a/drivers/tty/serial/8250/8250_omap.c
    +++ b/drivers/tty/serial/8250/8250_omap.c
    @@ -1477,7 +1477,7 @@ static int omap8250_probe(struct platform_device *pdev)
     
            up.port.regshift = OMAP_UART_REGSHIFT;
            up.port.fifosize = 64;
    -       up.tx_loadsz = 64;
    +       up.tx_loadsz = 48;
            up.capabilities = UART_CAP_FIFO;

    2.使用 IRQ 亲和性将 UART IRQ 处理从 CPU0 移出。 下面是我在开始 UART 环回测试之前使用的脚本。

    # set uart irq affinity
    _cpu=1
    for _u in 2b300000 4a00000 2810000 2850000 2860000; do
            _irq=$(grep "${_u}.serial" /proc/interrupts | cut -d: -f1 | cut -d' ' -f2)
            echo $_cpu > /proc/irq/${_irq}/smp_affinity_list
            _cpu=$(((_cpu % 3) + 1))
    done

    您可以针对电路板上启用的 UART 实例调整第一行“for"循环“循环中的条目。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jie:

    我在 TTY 层中发现了一个内核补丁、这会导致我的测试中 UART 数据丢失。

    下面附加的补丁是通过这个违规补丁来恢复代码更改。 我已经测试了 5 个 UART 在 921600bps 波特下 60K 回路,这不会显示任何数据丢失问题。 (我使用了上一篇文章中所示的“up.tx_loadsz = 48“更改、但没有使用 UART IRQ 亲和性、我使用的是 SDK10.1 内核、不是 RT)。

    您能否使用此补丁再次进行测试、看看它是否解决了您的设置中的测试失败问题?

    e2e.ti.com/.../0001_2D00_tty_2D00_manual_2D00_revert_2D00_tty_2D00_Prevent_2D00_writing_2D00_chars_2D00_during_2D00_t.patch

    下面是我的测试脚本。

    PROG ='/usr/bin/serialcheck
    CNT=300000
    波特=921600

    DAT=/dev/shm/dat
    CP ~/seq_data_10k $dat

    $prog -b $baud -d /dev/ttyS0 -f $dat -l $((cnt+0))-m r -k &
    $prog -b $baud -d /dev/ttyS1 -f $dat -l $((cnt+1))-m r &
    $prog -b $baud -d /dev/ttyS3 -f $dat -l $((cnt+3))-m r &
    $prog -b $baud -d /dev/ttyS7 -f $dat -l $((cnt+7))-m r &
    $prog -b $baud -d /dev/ttyS8 -f $dat -l $((cnt+8))-m r &
    睡眠 0.1
    $prog -b $baud -d /dev/ttyS0 -f $dat -l $((cnt+0))-m t -n -k &
    $prog -b $baud -d /dev/ttyS1 -f $dat -l $((cnt+1))-m t -n &
    $prog -b $baud -d /dev/ttyS3 -f $dat -l $((cnt+3))-m t -n &
    $prog -b $baud -d /dev/ttyS7 -f $dat -l $((cnt+7))-m t -n &
    $prog -b $baud -d /dev/ttyS8 -f $dat -l $((cnt+8))-m t -n &

    while true;执行 ifconfig eth1 up && sleep 1 && ifconfig eth1 down && sleep 1;done

    脚本的一些注释:
    - ttyS0 是 EVM 上的 wkup_uart0、它直接路由到 FTDI 并且不能使用外部环回。 因此我使用了内部环回(-k 参数);
    -我在启动 RX 线程和 TX 线程之前添加了“leep 0.1“,以避免在 kerel TTY 框架 (set_termios 和 ioctl ) 中出现任何潜在的竞态条件;
    -我对每个 UART 使用了稍微不同的循环编号来区分控制台日志中的消息。

    我刚注意到您使用的是 SDK10.0、但我使用 SDK10.1 内核进行了测试。 我当前重复相同的测试、但波特率为 2Mbps。 此测试完成后、我会将测试切换到 SDK10.0 内核。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它似乎这个线程是损坏的,因为最后几个帖子,和新的帖子不能修改或“回复“...

     >我已经测试了 5 个 UART 在 921600bps 波特率下 60K 回路,这不会显示任何数据丢失问题。  

    我忘记提到这个测试是在应用了附加内核补丁的情况下完成的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jie:

    我今天测试了多个组合, 数据丢失问题的真正解决都是

    -上面发布的 TTY 驱动程序补丁 (0001-tty-manual-revert-tty-protected-writing-chars-dur-t.patch );

    -和 8250_OMAP.c 驱动程序更改 (up.TX_loadsz =48) 也张贴在上面。

    请对两项更改进行测试并告知我。