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.

[参考译文] LP-AM261:USB can‘t 运行稳定!

Guru**** 2422790 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1531344/lp-am261-usb-can-t-operate-stable

器件型号:LP-AM261


工具/软件:

测试环境:   mcu_plus_sdk_am261x_10_02_00_15 中的 LP AM261X + cc_echo_am261x-lp_r5fss0-0_nortos_ti-arm-clang  。

在将.out 文件下载到 LP AM261X 板并运行程序后、我使用 bat 文件循环执行 Python 脚本 200 次。 但是、当它运行到 100 次以上时、无法再找到 USB 设备。  

USB_test.py  为:

import serial
import serial.tools.list_ports

# List all serial port devices
ports = serial.tools.list_ports.comports()
usb_port = None

# Enumerate all serial port devices
for port in sorted(ports):
    if "USB" in port.description:
        print(f"Found USB device on port: {port.device}")
        usb_port = port.device
        break  # Exit the loop after finding the first USB device

# Exit directly if no USB device is found
if usb_port is None:
    print("Error: No USB device found. Exiting...")
    exit()

baudrate = 19200  # Baud rate, modify according to actual requirements
timeout = 2  # Timeout period (seconds)

# Define the data to be sent
data_to_send = [0xF8, 0x03, 0x01, 0x02, 0x00, 0x02, 0x70, 0x5E]
data_to_send_hex = ' '.join(f'{byte:02X}' for byte in data_to_send)
print(f"USB Sent data: {data_to_send_hex}")

try:
     # Open the serial port
    ser = serial.Serial(usb_port, baudrate, timeout=timeout)
    
    # Send data
    ser.write(data_to_send)

    # Read the received data
    received_data = ser.read(20)
    
    # Close the serial port
    ser.close()

    # Print the received data
    received_data_hex = ' '.join(f'{byte:02X}' for byte in received_data)
    print(f"USB Received data: {received_data_hex}")

except serial.SerialException as e:
    print(f"Serial communication error: {e}")
except Exception as e:
    print(f"Unexpected error: {e}")

bat 文件为:μ s

@echo off

set /a count=0

:loop
set /a count+=1
echo The test times: %count%

python USB_test.py
timeout /t 2 /nobreak >nul

if %count% lss 200 goto loop

测试结果:

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

    您好、

    这是使用 2 个 COM 端口的开箱即用应用还是仅使用 1 个 COM 端口的自定义应用?

    此致、
    Shaunak

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

    此测试结果使用 2 个 COM 端口。  无论是  1 个 还是 2 个 COM 端口、问题都是一样的。   在我们的伺服应用中、USB 测试结果甚至更差。

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

    尊敬的 Xiaoshuu:  

    此测试结果使用 2 个 COM 端口。  无论是  1 个 还是 2 个 COM 端口、问题都是一样的。

    我将尝试在我这边重现此问题并进一步调试。

    USB 测试结果更糟。

    您是否介意分享一些关于这一点的更多细节?

    此致、
    Shaunak

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

    1.   在我们的伺服控制板上未进行任何修改的情况下、运行 MCU_PLUS_SDK_am261x_10_02_00_15 中的 cc_echo_am261x-lp_r5fss0-0_nortos_ti-arm-clang、它只能运行 USB_test.py 20 多次以上。  我们的电路板似乎的性能比 LP AM261X 差。

    2.如果我运行整个伺服程序,  USB_test.py 的运行时间可能不到 10 次。  伺服程序规模较大,优化速度快。 主 PWM 中断是专门设计的、请参阅 https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1348817/am2634-does-am263-support-self-interrupt-nesting/5158659#5158659。 此外、主中断的负载可能有点 高。

    一般而言、我认为 USB 驱动程序、伺服电路板硬件和伺服应用程序可能存在问题。 我认为 USB 驱动器并不稳健。 我已经向印度派遣了一个伺服控制板、您可以在该板上测试 USB。

    期待您的答复。

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

    您好、

    我可以重现此问题、在本地进行一些更改后、我可能已准备好修复程序(在共享前进行正确测试)。 我们对内存分配和事件处理队列进行了一些更改。  

    我将在一段时间内分享更新后的驱动程序代码、我正在尝试在不同的操作系统 (Windows、Linux) 上进行测试、以确保修复功能正常。

    此致、
    Shaunak

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

    您好、

    我附加了我的“synp"文件夹“文件夹、您可以将其放置并解压缩到 mcu_plus_sdk/source/usb/文件夹中。 这是 USB 驱动程序文件夹的副本、其中包含在 v10.02 SDK 版本之后完成的一些修复。 您能否使用更新的驱动程序文件、使用以下命令重新构建 USB 驱动程序并尝试?

    在 SDK 中清理和重新构建 USB 库的命令:

    gmake -sj -f makefile.am261x usbd_synp_nortos_r5f.ti-arm-clang_clean
    gmake -sj -f makefile.am261x usbd_tusb_cdc_nortos_r5f.ti-arm-clang_clean
    
    gmake -sj -f makefile.am261x usbd_synp_nortos_r5f.ti-arm-clang
    gmake -sj -f makefile.am261x usbd_tusb_cdc_nortos_r5f

    e2e.ti.com/.../synp.zip

    此致、
    Shaunak

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

      我试过,但它不起作用。 您是否通过了测试? 如果您通过了测试、就可以向我发送.out 文件、我将对其进行测试。

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

    您好、

    请查找附件我的.out 文件以及 1500 次迭代测试的结果日志(我也测试了单个 COM 端口,因为我记得一个类似的问题在几个月前提出,文章,我们已经修复了驱动程序中的几件事情,这已经在我的前一个答复中提供)。 我们在 Windows 和 Linux 上进行了测试

    e2e.ti.com/.../usb_5F00_1000_5F00_iteration_5F00_cdc_5F00_test.txt

    e2e.ti.com/.../cdc_5F00_echo.release.out

    此致、
    Shaunak

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

    我将.out 文件加载到 LP AM261X 板、测试只能迭代 150 次以上。 和 CCS 表明“Cortex_R5_0:Error:(error –1170 @ 0x0) 无法访问 DAP……“ :μ s

    我尝试了两次,并得到了同样的结果,如上。

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

    尊敬的 Xiaoshuu:

    似乎电路板或电源、时钟或复位信号甚至 XDS 固件问题存在一些硬件问题。

    DAP 访问错误表明我们断开与 AM261x 的连接、并不是 USB 的确切问题。 我发现这里报告了一些类似的问题: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/275907/unable-to-access-the-dap

    此致、
    Shaunak

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

    但当我运行另一个.out 文件时、它没有问题。 您能给我一个.appimage 文件吗? 我将让程序从闪存加载。

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

    您好、

    请查看随附的 appimage。

    此外、您是否发现 AM261x-LP 和您的定制电路板上都有 DAP 访问错误? (我知道,根据您的观察,定制电路板上的 USB 可靠性问题比 am261x 更严重、想知道有关 DAP 误差的问题)。

    e2e.ti.com/.../cdc_5F00_echo.release.appimage

    此致、
    Shaunak

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

    您好、

    此外、对于 CCS 中的 CS DAP 错误、请在 OSPI 引导模式下使用 AM261x。  请在 AM261x 上使用 OSPI 引导模式和闪存 SBL Null、而不是使用 DEV 引导模式。

    由于我们有 E1 Launchpad、因此从 AM261x v10.00.01.10 MCU-PLUS-SDK (https://www.ti.com/tool/download/AM261X/10.00.01.10) 刷写 SBL Null

    如果您具有 E2 LaunchPad、请使用最新的 SDK (v10.02)

    请使用 SDK 刷写工具 (software-dl.ti.com/.../TOOLS_FLASH.html) 将 sbl_null tiimage 刷写到电路板中、然后切换到 OSPI 引导模式、以便您可以运行长测试。

    此致、
    Shaunak

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

    我测试了两个控制板、仅此部分的代码不同(一个是“#if 0“、另一个是“#if 1“)。

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

    您好、

    Shaunak 将在下周前休假、请预计下周中旬前做出回复。

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

    尊敬的 

    看起来这里的 USB 任务阻止了 CPU 资源、而不让您运行 PWM 任务。 您进一步确认了这一点、因为您能够在独立 USB 应用程序上运行长时间测试。 这里的一个可能的解决方案是切换到基于操作系统的调度方法。 这样 USB 是正在运行的默认任务、但当出现高优先级 PWM 中断时、我们会处理该中断并返回到 USB 任务。  

    此致、
    Shaunak

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

    此 USB 问题是否可以在不使用操作系统的情况下解决? 我们的伺服应用不适合操作系统。

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

    尊敬的 Xiaoshuu:

    我尝试了以下实验:在 AM261x 上、我使周期性计时器中断每 100us 触发一次、并使 ISR 运行大约 40us、同时运行 USB CDC 回波测试。

    通过更新的更改(以 zip 格式共享)、我能够成功测试而不会出现任何故障。

    e2e.ti.com/.../7411.synp.zip

    在查看上面共享的源代码时、我尝试启用 PWM、但我遇到了 PWM 的一些问题、因此我启用了并使用了更高优先级的计时器中断进行了测试。

    此致、
    Shaunak

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

    我尝试过、USB 可以运行 1000 次迭代。 我认为这解决了我的问题。

    我有疑问。 该解决方案会影响我的中断结构吗?  

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

    尊敬的 

    很高兴知道 USB 问题现在已得到解决。

    上面共享的更新驱动程序不会更改任何中断架构。 它修复了大量运行时动态内存分配、这种分配由于内存有限而导致问题发生。 我们更改了驱动程序的许多内存架构和处理方式、使其在运行时更可靠、可用于断开事件等事件处理。

    此致、
    Shaunak