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.

[参考译文] Linux/processor-SDK-AM335X:USB 问题

Guru**** 2539500 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/819662/linux-processor-sdk-am335x-usb-questions

器件型号:PROCESSOR-SDK-AM335X

工具/软件:Linux

你(们)好

我对 USB 子系统有几个疑问、希望得到一点澄清。 我的 Linux 内核为4.9.31。

1.在我的内核配置中启用 USB DMA (USB_TI_CPPI_DMA)。 那么、我的问题是使用的 FIFO 缓冲区大小是多少? 缓冲器大小是否足以满足 HS 接口数据传输需求?

2.检测 USB 闪存驱动器的最短时间是多少(默认 MUSB 控制器模式在 DTB 文件中设置为 OTG)

3.在 USB 主机和设备模式之间切换所需的最长时间是多少? 例如、如果我需要插入 USB 线缆(用于 RNDIS 连接)并快速将其插入 USB 闪存驱动器、那么... 我需要在两种模式之间留出多少时间才能切换(从器件模式切换到主机模式、反之亦然)

4.考虑到可以使用 DTB 更改 USB 速度(全速/高速)。 如果我使用 DTB 覆盖文件,然后配置此... 首先、我将 USB 配置为高速、在我的测试过程中、我使用 DTB 覆盖层将其更改为全速。 这是否起作用、或者我是否需要重置 USB 子系统(使用命令)或重新加载驱动程序?

5.如果未检测到 USB 设备,并且我需要一些信息.. 我是否可以通过 sysfs/profs 等从 Linux 内核(打印件除外)获取任何信息

最后、在硬件中检测 ID 引脚状态、并通过一个中断将闪存设备插入的信息/USB 电缆(RNDIS)提供给 USB 驱动程序。 请确认。

此致、

法里亚  

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

    您好 Fariya、

    [引用 user="Fariya Fatima]1. 在我的内核配置中启用了 USB DMA (USB_TI_CPPI_DMA)。 那么、我的问题是使用的 FIFO 缓冲区大小是多少? 缓冲器大小是否足以满足 HS 接口数据传输需求?[/quot]

    不确定您打算使用哪种 FIFO -您提到了 USB DMA、但通常我们不会在 DMA 上下文中使用术语 FIFO。 USB 端点 FIFO 大小通常为512字节、适合高速批量传输、但某些端点具有用于等时传输的1K 和4K FIFO。 CPPI DMA 日期缓冲器由 USB 类或小工具函数在 DDR 中分配、根据每个 USB 函数中的用例、大小通常要大得多。

    [引用 user="Fariya Fatima]2. 检测 USB 闪存驱动器的最短时间是多少(默认 MUSB 控制器模式在 DTB 文件中设置为 OTG)[/quot]

    这不是一个简单的问题:)

    首先、让我们了解 MUSB 驱动程序的工作原理。 如果控制器设置为 OTG 模式、则默认情况下、控制器在外设模式下工作、等待连接到 USB 主机。 如果现在插入了 USB 设备、则不会有中断事件通知控制器进入主机模式。 因此、MUSB 驱动程序中有一个2秒间隔计时器、用于定期将控制器置于主机模式、以便它能够检测 USB 器件插入情况。 因此、这将增加 USB 器件检测中的0~2秒延迟。

    现在、让我们看一下 USB 器件。 器件插入 USB 主机端口后、它会检测到 VBUS 存在、然后启用其 D+/D-上拉电阻以通知主机。 我不记得 USB 规范中定义的时序、但一些 USB 器件支持其 D+/D-上拉非常快、以毫秒为单位、而其他器件非常慢。 我想我看到一个 USB 器件在大约7秒内启用了它的 D+。

    [引用 user="Fariya Fatima]3. 在 USB 主机和设备模式之间切换所需的最长时间是多少? 例如、如果我需要插入 USB 线缆(用于 RNDIS 连接)并快速将其插入 USB 闪存驱动器、那么... 我需要在两种模式切换之间留出多少时间(从器件模式切换到主机模式、反之亦然)[/quot]

    除了上面提到的 Q2时序外、时间还取决于 VBUS 放电时间、由于 VBUS 放电路径的电路板设计而异。 一旦 VBUS 放电至低于 VBUS_VALID 阈值、控制器就可以从一种模式切换到另一种模式。

    [引用 user="Fariya Fatima]4. 考虑到可以使用 DTB 更改 USB 速度(全速/高速)。 如果我使用 DTB 覆盖文件,然后配置此... 首先、我将 USB 配置为高速、在我的测试过程中、我使用 DTB 覆盖层将其更改为全速。 这是否起作用、或者我是否需要重置 USB 子系统(使用命令)或重新加载驱动程序?

    我还没有遇到 dt 覆盖。 但是、如果 dt 最大速度属性发生更改、则必须重新加载 musb_dsp 驱动程序以更改速度。 您可以使用 modprobe 重新加载驱动程序,也可以只使用 sysfs unbine/bind 命令。

    [引用 user="Fariya Fatima]5. 如果未检测到 USB 设备、并且我需要一些信息... 是否有我可以通过 sysfs/profs 等从 Linux 内核(打印件除外)获取的任何信息?

    首先、我将检查一些 MUSB 寄存器、这些寄存器指示控制器的状态。 'Cat /sys/kernel/debug/musb-hdrc.X/regdump。 DevCtl 和功率寄存器最为重要。

    [引用用户="Fariya Fatima]6. 最后、在硬件中检测 ID 引脚状态、并通过一个中断将插入闪存设备的信息/USB 电缆(RNDIS)提供给 USB 驱动程序。 请确认。[/报价]

    是的。 当控制器处于主机模式且检测到 USB 器件时、接收到的第一个中断事件是 MUSB_INTR_CONNECT。 当控制器处于外设模式并插入到 USB 主机中时、主机将启动 USB 枚举、MUSB 控制器将在端点0上接收许多用于这些 Setup 传输的中断。

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

    感谢刘斌的回答。 真的很感谢!

    此致、

    法里亚