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.

[参考译文] RTOS/PROCESSOR-SDK-AM335X:RTOS/PROCESSOR-SDK-AM335X:USB 对 SD 卡的访问有问题

Guru**** 2539500 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/778958/rtos-processor-sdk-am335x-rtos-processor-sdk-am335x-usb-access-to-sd-card-has-something-wrong

器件型号:PROCESSOR-SDK-AM335X

工具/软件:TI-RTOS

各位专家:

基于  

我们发现、有时主机(Android)无法通过 USB 安装 MSC 设备(AM335x)。

我们已经使用由 FAE Luke 提供的 SKAM335x 电路板和示例代码重现了此问题。

请帮助我们解决此问题。 谢谢!!  

注:以下文件是 USB 分析器捕获的 USB 记录。

e2e.ti.com/.../USB_5F00_TI_5F00_NG_5F00_01.usb

e2e.ti.com/.../USB_5F00_TI_5F00_NG_5F00_02.usb

e2e.ti.com/.../USB_5F00_TI_5F00_NG_5F00_02_5F00_USB_5F00_Plug_5F00_Out.usb

此致、
等等

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

    我在这里添加了有关  此问题的更多详细说明。

     

    [器件]

    硬件:AM335x 入门套件

    软件:PROCESSOR-SDK-RTOS-AM335X 05_02_00_10

    运行以下示例:USB_DevMsc_mmcsd_evmAM335x_armExampleProject

    使用以下补丁(本 帖子中提到 ):

    C:\ti\pdk_am335x_1_0_13\packages/ti\drv\mmcsd\src\v1\mMCSD_v1.c @第721行
    
    原始值:
    mMCSD_osalDeleteBlockingLock (object->transferComplete);
    memset (object、0、sizeof (mMCSD_v1_Object));mMCSD_osdelingLockingLocking (object->transferComplete);修改
    
    
    后的 momesteLockingLockingLock_deliveLocking (对象):
    #ifdef MMCSD_EDMA_ENABLED
    MMCSD_osalDeleteBlockingLock (object->writeSem);
    MMCSD_osalDeleteBlockingLock (object->readSem);
    #endif
    memset (object、0、sizeof (MMCSD_v1_Object))); 

     

    [主机]

     运行 Android 4.4.4的 ARM Cortex A7 IVI (车载信息娱乐系统)

     

    [步骤]

    使用 CCS 将 USB_DevMsc_mmcsd_evmAM335x_armExampleProject.out 加载到 AM335x SK。

    2.连接 AM335x SK 和 Android 主机之间的 USB 电缆、然后插拔。

    3.每次插入电缆后,检查 Android 主机是否成功将 AM335x 的 SD 枚举为 MSC (海量存储类)。

      

    [结果]

     有时 Android 主机无法成功枚举 MSC。 可能性约为7%(在30次测试中观察到2次故障)。

     本帖子开头提供了(由 LeCroy Advisor T3)故障案例的 USB 捕获。 通常情况下、一个事务是数据中 ACK。 在接收主机的数据时,AM335x 显示了奇怪的数据(512字节),主机无法识别数据,因此主机在事务中不发送 ACK。

    为了便于比较、以下是成功案例。

    e2e.ti.com/.../USB_5F00_TI_5F00_OK.7z
     

    [ps]

    、以前曾报告过类似的问题,但这一问题不同。 先前的问题不可恢复、一旦发生、AM335x 需要重启电源才能恢复。 此问题是可恢复的。 一旦发生这种情况、再次拔下/插入 USB 电缆可以使 Android 主机重新枚举 MSC 成功。

    2.如果将 Windows PC 用作主机,则无法重现此问题(在60次测试中未发现问题)

    3.  如果主机是 Android 5.1.1或6.0.1,则可能会再次出现此问题。 如果主机在 Android 8.x 中、则无法复制

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

    我们找到了该文件的源代码。

    pdk_am335x_1_0_6\packages/ti\drv\usb\src\USB_func\device\usbdmsc.c

    静态空
    HandleDisconnect (void *pvInstance)
    {
    const tUSBDMSCDevice *psDevice;
    
    memset (&g_sSCSICSW、0、sizeof (g_sSCSICSW));
    
    /*
    *创建实例指针。
    *
    psDevice =(const tUSBDMSCDevice *) pvInstance;
    psDevice->psPrivateData->ucSCSIState = State_SCSI_IDLE;
    
    debug_pf ("USBdmsc disconnect。 TX 大小:%d\n"、psDevice->psPrivateData->ulBytesToTransfer);
    psDevice->psPrivateData->ulBytesToTransfer = 0;
    psDevice->psPrivateDat->ulCurrentLBA = 0;
    

    在正常情况下,psDevice->psPrivateData->ulBytesToTransfer 的值 为零(拔下 USB 电缆并重新插上 USB 电缆的时间)

    但在异常情况下、该值不是零。

    此致、
    等等

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

    大家好、Luke

    我们希望告诉您、我们正在以高优先级开展这方面的工作、并会让您随时了解进展情况。

    状态  

    1.我们尝试了旧版 Android 手机(OS 5.0.1)、无法重现问题

    2. 我们分析了 USB 正常和故障情况跟踪:在中接收到数据后、在工作情况下、器件会在数据准备后(~8ms)向主机发送36个字节、然后从主机获取 ACK。 在故障情况下、器件会立即向主机发送512个字节的00、主机无法识别它。 TX 数据包就绪位似乎未被正确清除、并且垃圾数据立即发出。

    我们目前正在进行以下工作:  

    -查找更多 Android 手机/主机(首选5.1.1、6.0.1 OS)以重现问题

    -与驱动程序开发人员(已参与调试)一起查看 USB 驱动程序代码在 USB 断开连接时、CPPI DMA 清理了部分代码。

    此致

    Mukul  

     

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

    我们已经能够重现问题并正在进行调试。 我们将向您更新进度。

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

    客户要求我们在3/6之前解决此问题。 现在、修复日期已晚。
    我们需要在 TI 可以解决问题时向客户提供反馈。
    您能否提供修复和验证计划?
    谢谢!

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

    Benson、

    我们的工程师在这方面努力工作并解决了问题! 我们在本地进行了测试并与本地 FAE 共享了代码、他还构建并验证了修复程序。 FAE 将与您联系、了解您验证所需的代码更改。

    此致、Eric

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

    Benson、

     

    已附加此修复程序。 它位于 PDK 1.0.13之上(processor_sdk_rtos_AM335x_5_02_00_10)。 请尝试一下、并向我们提供反馈。

    e2e.ti.com/.../pdk_5F00_am335x_5F00_1_5F00_0_5F00_13.mod.with_5F00_orig.7z

    此致、

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

    到目前为止、我们已成功测试了100多次修复程序。

    感谢您的支持。

    此致、
    等等