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.

[参考译文] Starterware/AM3352:Mentor USB 控制器文档

Guru**** 2587365 points
Other Parts Discussed in Thread: AM3352

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/632796/starterware-am3352-mentor-usb-controller-documentation

器件型号:AM3352

工具/软件:Starterware

您好!

我需要获取 Mentor USB OTG 控制器的完整文档以查找所有寄存器。  

有人可以让我走上获取此文档的道路吗?  

谢谢你。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对本文档的访问受到高度限制。 您能否概述一下您的需求?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在进行一个项目、该项目将旧的嵌入式 Linux 系统/应用程序传输到具有不同硬件框架的最新 Linux。 我们希望至少尽可能更改系统。
    旧系统从用户空间仿真3个外设、即键盘、鼠标和大容量存储、构建为模块、并在 Linux 内核启动后模拟模块。 控制和读取/写入数据的方法是直接通过寄存器和 PHY 地址、而无需使用任何库 API。 外设 USB 端点上的中断、例如 Setup、datain 和 DATAOUT、也与一些其它应用操作绑定。 我阅读了小工具驱动程序示例。 但我还没有弄清楚如何创建小工具驱动程序并使其与应用程序配合使用。
    因此、如果我可以访问寄存器并知道如何对端点进行读/写操作、我可以最大限度地保持结构。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在您的帖子顶部、它显示"Tool/software:Starterware"、但您后来提到您正在从旧的 Linux 系统迁移到最新的 Linux。 您使用的操作系统是什么? 如果是 Linux、那么旧版内核的版本是什么? 更新版本是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我正在研究 am3352、使用入门套件进行测试、使用 SDK 3.3.0.4进行开发、我发布了一些有关如何访问某些寄存器的问题。 因此、我再次选择工具/软件 Starterware。
    旧版本为2.4.25、新版本为4.4.4.41。

    旧拱形为 PowerPC。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我强烈建议您不要执行该路径-实施您自己的 USB 驱动程序以直接访问 Linux 内核中的 USB 控制器。 您在以前的 PowerPC 平台上拥有的源代码对于在 AM3352上实现类似功能没有太大帮助、因为它们使用不同的 USB 控制器。 与利用 Linux 内核中提供的现有小工具驱动程序相比、让它正常工作所需的时间要长得多。

    Linux 内核已经提供了一些 USB 小工具驱动程序、包括 HID 和 MUS_STORAGE。 mass 存储小工具已准备就绪、您只需通过模块参数提供后端存储。 对于 HID 小工具、您必须实现一个简单的用户空间应用程序来馈入输入数据。 内核文档中有一个示例、展示了如何执行该操作。

    然后、您只需启用内核 USB configfs、即可将两者组合在一起、从而创建一个复合小工具驱动程序、包括 HID 和 MUST_STORAGE 函数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、Bin。
    但我几乎不了解内核驱动程序、包括如何将仿真器件与小工具驱动程序绑定、如何配置参数等 我很难研究它。 与内核驱动程序跃入海而受到项目最后期限的限制相比、在新的 USB 控制器中寻找寄存器并遵循旧的结构和逻辑似乎对我来说更容易。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我知道您对 Linux 内核不是很熟悉、但我也看不出您如何使用 AM335x USB 控制器 Mentor 文档和您之前的 PowerPC 系统完成项目。 不同 USB 控制器之间没有一对一的寄存器映射、不能将 MUSB 中的寄存器偏移替换到 PowerPC 平台中、USB 控制器将不会简单工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bin、

    我可以使用小工具来实现我的目标吗? gadgetfs 比子 gadget 驱动程序更简单。

    是否可以在小工具中添加控制函数来处理从其他应用程序发送的消息? 我在 usb.c 中找到了说明

    首先,在配置/dev/gadget $chip 时调用 DEV_CONFIG()

    +* (通过写入配置和器件描述符)。  然后进行操作

    +* 可用作设备事件的来源、用于处理所有控制

    +* 除基本枚举之外的请求。

    因此、在配置/dev/gadget /$chip 之后、其他应用程序可以向/dev/gadget /$chip 的文件描述符发送控制消息。  正确吗?

    另外、您能否告诉我在使用小工具 getfs 时如何设置 FIFO 和 DMA?

    谢谢你。

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

    [引用用户="营 杰 gi">我是否可以使用小工具来实现我的目标? gadgetfs 比子 gadget 驱动程序更简单。

    我不确定什么是"子小工具驱动程序"、但 USB 小工具应能满足您的目标。 但我相信 USB configfs 对您来说甚至更简单、除非您的 HID 和 MUS_STORAGE 函数是自定义的、这样 Linux 内核中提供的 HID 和 MUS_STORAGE 小工具驱动程序就不符合您的要求。

    [引用用户="pingjie ga)]是否可以在小工具中添加控制函数来处理从其他应用程序发送的消息? 我在 usb.c[/quot]中找到了说明

    内核中有许多 usb.c 文件、我不确定您查看的是哪一个、但您应该能够在 gadgetfs 中添加控制函数、因为您必须使用 gadgetfs 来实现整个 gadget 驱动程序。

    [引述 USER="Yingjie ga"]另外,您能告诉我在使用小工具时如何设置 FIFO 和 DMA 吗?

    无论您使用 gadgetfs 或 configfs、都不必担心 USB FIFO 和 DMA、这些都已经由 USB 控制器驱动程序处理。  

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

    您好、Bin、

    我已经在我的入门套件上尝试了小工具 getfs 和 configfs。 板上只有一个 USB Micro B 连接、我也将其用作引导的 UART 连接。 我使用的 configfs 在/dev/hidg0上创建 hid 设备。  当我尝试写入/dev/hidg0时,有时我从 write(FD、BUG、len)得到的返回值为0。  但在大多数情况下、系统会在那里挂起。 小工具发生了类似的情况。  以下是我的 configfs 命令、并随附写入 USB 文件。  select()始终返回1,并且/dev/hidg0文件描述符已准备就绪。 我知道我应该向这个 EP 写入一个真实的 kbd 报告。 但为简单起见、我只向其写入一个小 buf。   

    您能帮您找出问题所在吗? 它是否与唯一的 Micro B 通过集线器转换为 UART 有关?

    root@AM335x-evm:/sys/kernel/config/usb_gadget/g1 echo "0x1234">idVendor

    root@AM335x-EVM:/sys/kernel/config/usb_gadget/g1 echo "0x5678">idProduct

    root@AM335x-EVM:/sys/kernel/config/usb_gadget/g1 mkdir 字符串/0x409

    root@m335x-evm:/sys/kernel/config/usb_gadget/g1 echo "foo1"> strings/0x409/maufacactuer

    root@AM335x-EVM:/sys/kernel/config/usb_gadget/g1 echo "foo2"> strings/0x409/product

    root@AM335x-evm:/sys/kernel/config/usb_gadget/g1 echo "foo3"> strings/0x409/seiinumber

    root@AM335x-EVM:/sys/kernel/config/usb_gadget/g1 mkdir configs/C.1

    root@AM335x-EVM:/sys/kernel/config/usb_gadget/g1 mkdir configs/c.1/strings/0x409

    root@AM335x-EVM:/sys/kernel/config/usb_gadget/g1 mkdir 函数/hid.kbd

    root@AM335x-EVM:/sys/kernel/config/usb_gadget/g1 ln -s functions/hid.kbd/ configs/c.1

    root@AM335x-EVM:/sys/kernel/config/usb_gadget/g1 echo "musb-hdrc.0.auto"> UDC

    e2e.ti.com/.../tempwrite.c

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

    您是否已按照内核文档 Documentation/usB/gadget_hid.txt 来修补内核驱动程序、然后使用 hid_gadget_test 应用程序对其进行测试?

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

    是的、我按照/Documentation/usb/gadget_hid.txt 来实现 configfs。 我没有找到 hid_gadget_test 应用程序、因此我从该文件复制了 hid_gadget_test 的示例代码、并创建了我自己的 tempwrite.c   

    在我的入门套件上、我可以看到/dev/hidgX 已创建。 但是在启动 PC 上,启动套件通过 USB 电缆连接到, 除了 ttyUSB0和 ttyUSB1外,不枚举任何 USB 设备。 我在启用/配置 配置后检查了之前和之后/重新插入了 USB 电缆。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    gadget_hid.txt 不讨论 configfs。 最重要的部分是、您必须像文档中那样对内核小工具 hid 驱动程序进行补丁、以判断它是什么 hid 设备。 gadget_hid.txt 中都对此进行了说明。

    HID_GADGET_TEST 源代码位于 gadget_hid.txt 中、您已正确完成该操作。 但请勿一开始对其进行修改、请按原样使用它、以确保在开始自己的开发之前有正确的基础。

    要仅使用 hid 小工具、首先不能使用 configfs、只需使用命令'modprobe g_hid'加载 hid 小工具驱动程序即可。 然后在电路板上运行 hid_gadget_test、连接到主机 PC、它应将其枚举为输入设备-键盘。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bin、

    我发现它不起作用的原因。  在 UDC 链接到 musb-hdrc.0.auto 之前、必须设置 functions/hid.kbd/中的属性。

    现在、我可以在 SK 上键入它、并显示在我的主机 PC 上。

    我还有一个问题、希望您能给我一些想法。  

    如果我需要通过设置 USB 寄存器进行 USB 软复位、是否必须在设置 configfs 小工具之前将其删除、然后在设置后重新创建 configfs 小工具? 换句话说、USB 软复位是否会影响已经生效的 configfs 小工具功能?  

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

    [引用用户="ingjie gu">我发现它不起作用的原因。  在 UDC 链接到 musb-hdrc.0.auto.之前、必须设置 functions/hid.kbd/中的属性

    很高兴您解决了这个问题。 是的、链接到 UDC 必须是最后一步。

    [引用用户="ingjie gu"]或者换句话说,USB 软复位是否会影响已经生效的 configfs 小工具功能?  [/报价]

    我从未尝试过 configfs、但使用传统的 USB 小工具驱动程序、我发现每个 USB 控制器都有不同的行为(我猜是由不同的控制器驱动程序设计引起的)-有些需要重新加载小工具驱动程序、有些则不需要。

    但我不记得 AM335x 上的 MUSB 控制器是如何工作的。 请给它一个测试、让我知道它是如何运行的。 但我相信您不必"重新创建"configfs 小工具"、"从 UDC 取消链接、执行软复位、然后再次链接到 UDC "就足够了。

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

    我还没有运行我自己的定制板、我将在完成后测试 USB 软复位。  

    我正在尝试通过 configfs 来模拟 HID 和大容量存储。 HID 正在工作。 但是、大容量存储在模拟时存在问题。  

    我在入门套件上插入了 USB 磁盘、它列为/dev/sdb /dev/sdb1

    直接使用以下属性运行 g_mass 存储时

     modprobe g_mass 存储 idVendor=0x1234 idProduct=0x5678 iManufacturer=gyjm iProduct=gyjp iSerialNumber=gyjs file=/dev/sdb1 stal=0 removable=1

    入门套件上的"dmesg"显示:

    root@AM335x-EVM:/sys/kernel/config/usb_gadget dmesg -T  

    [2017年10月27日星期五19:37:20 ]大容量存储功能、版本:2009/09/11

    [2017年10月27日星期五19:37:20 ] LUN:可移动文件:(无介质)

    [2017年10月27日星期五19:37:20 ] LUN:可移动文件:/dev/sdb1

    [2017年10月27日星期五19:37:20 ] LUN 数量=1

    [2017年10月27日星期五19:37:20 ] g_mass 存储小工具:海量存储小工具、版本:2009/09/11

    [2017年10月27日、星期五、19:37:20 ] g_mass 存储小工具:g_mass 存储就绪

    [2017年10月27日星期五19:37:21 ] g_mass 存储小工具:高速配置#1:Linux 文件支持存储

    我的 PC 报告:您插入的磁盘不可被此计算机读取。  但无论如何、它都是枚举的。

    然后、我使用我认为正确的步骤来配置大容量存储。 已枚举 HID、但未枚举大容量存储。 以下是与大容量存储相关的配置。  

    mkdir 函数/mass 存储。1.

    #echo 0 > functions/mass 存储.1/stall

    #echo /dev/sdb1 > functions/mass 存储.1/lun.0/file

    #echo 1>功能/mass 存储.1/lun.0/可移动

    #ln -s functions/mass 存储。1 configs/c.1

    #echo musb-hdrc.0.auto > UDC

    我得到了以下 dmesg:

    [2017年10月27日星期五19:08:25 ]大容量存储功能、版本:2009/09/11

    [2017年10月27日星期五19:08:25 ] LUN:可移动文件:(无介质)

    文件为"无媒体"。 我不确定这是否是枚举失败的原因。  在 PC 上、dmesg 显示没有大容量存储。

    您对此问题有什么看法吗?

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

    [引用用户="营 杰 gu"]

    [2017年10月27日星期五19:37:20 ] LUN:可移动文件:(无介质)

    [2017年10月27日星期五19:37:20 ] LUN:可移动文件:/dev/sdb1

    [/报价]

    此消息是正常的、只是驱动程序在两个阶段中的工作方式。

    [引用用户="营 杰 gu"]

    [2017年10月27日星期五19:37:20 ] LUN:可移动文件:/dev/sdb1

    (笑声)

    我的 PC 报告:您插入的磁盘不可被此计算机读取。

    [/报价]

    PC 无法读取它、因为 PC 期望 USB 磁盘应该具有 MBR、但/dev/sdb1没有 MBR、它只是一个分区。 我认为如果您改为使用'file=/dev/sdb、PC 应该能够读取它。

    [引用用户="ingjie ga">然后我用我认为是正确的步骤配置大容量存储。 已枚举 HID、但未枚举大容量存储。 以下是与大容量存储相关的配置。  [/报价]

    PC 是 Windows 还是 Linux? 如果您使用的是 Windows PC、这不会让我感到意外。

    但是、如果您使用 Linux PC、并且您认为自己正确使用了 configfs、则必须查看 PC 上的枚举日志以找出问题所在。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在使用 OSX。 更改到/dev/sdb 后,OSX 可以枚举存储,尽管它会使我的 VirtualBox 崩溃。

    当我尝试绕过 OSX 并使 configfs 小工具直接由 VirtualBox Linux 枚举时,kbd/ms 是可以的,但仍不枚举存储。 但这并不是一个紧迫的问题。

    还有一个问题。 请帮助您了解一下。
    我使用 USB0作为 USB 外设、在内核模式下、需要从 USBSS 上断开 USB0、并在特定时间后根据应用要求重新连接。 TRM 显示了用于 USB0软复位的寄存器、但它不符合我的需要、因为我无法控制何时重新连接 USB0。

    在用户空间中、我调用系统("echo ""> UDC")来断开 USB0。 但在内核模块中、不建议这样做。

    在使用 configfs 的同时、如何在内核模式下按我的意愿断开并重新连接 USB0?
    非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在内核模式下、这意味着什么?
    应用程序都以用户空间为中心、所有要求都可以满足。 为何无法断开与用户空间的连接? 内核如何接收应用程序中的断开/重新连接事件。 如果您不想通过 configfs 或 sysfs 实现、内核 USB 驱动程序不提供断开连接的接口。