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.

[参考译文] TM4C1294KCPDT:禁用 USB0模拟 VBUS/ID 引脚

Guru**** 2482225 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/723043/tm4c1294kcpdt-disabled-usb0-analog-vbus-id-pins

器件型号:TM4C1294KCPDT

当    USBLIB 项目(usbdenum.c)中配置了8个端点时、为什么 USB0端点中断处理程序只被写入来处理端点0状态?

似乎无法保证 INT 控制状态始终 在 端点0上发生。  已验证多个批量 或 HID 客户端端点 可以 通过 CDC 类驱动程序的多个启动实例进行连接。  Windows 即插即用管理器通过  多个实例使用相同的供应商 UUID 处理 USB 客户端请求。 端点枚举过程只是将 CDC 地址提升到 下一个可用地址(lmusbdll.dll / lib)。

现有 的 Tivaware usblib INT 函数似乎没有被写入来处理每个枚举的(8)端点返回状态。 添加的处理程序(如下) 对于   端点 0以上连接的任何其他端点的返回状态是否不是必需的?  

void
USBDeviceEnumerHandler (tDCDInstance * pDevInstance)
{
uint32_t ui32EPStatus、ui32DataSize;

//
//获取端点0状态。
//
ui32EPStatus = MAP_USBEndpointStatus (USB0_BASE、USB_EP_0);

//其它枚举端点返回 USB 状态可能需要以下条件???? //ui32EPStatus |= MAP_USBEndpointStatus (USB0_BASE、USB_EP_1); //ui32EPStatus |= MAP_USBEndpointStatus (USB0_BASE、USB_EP_2); //ui32EPStatus |= MAP_USBEndpointStatus (USB0_BASE、USB_EP_3); //ui32EPStatus |= MAP_USBEndpointStatus (USB0_BASE、USB_EP_4); //ui32EPStatus |= MAP_USBEndpointStatus (USB0_BASE、USB_EP_5); //ui32EPStatus |= MAP_USBEndpointStatus (USB0_BASE、USB_EP_6); //ui32EPStatus |= MAP_USBEndpointStatus (USB0_BASE、USB_EP_7);

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

    这是因为所有控制状态都应该通过 EP0传递。

    "端点描述符用于描述端点0以外的端点。 端点0始终假定为控制端点、并且在请求任何描述符之前进行配置。"

    出发地: www.beyondlogic.org/.../usb5.shtml

    为了跟进此情况、该函数描述它处理 EP0上的所有中断、以确保控制状态始终是最新的。

    "这个函数处理端点0上的所有中断、以保持端点0上控制端点所需的状态。 为了成功枚举和处理所有 USB 标准请求、端点0上的所有请求都必须通过此函数。"

    由于 USBDeviceEnumerHandler 仅用于处理仅通过 EP0进行的控制状态更改、因此它已正确设置。

    其他端点中断在 USBDeviceIntHandlerInternal 的底部进行处理。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这很有趣、因为 Windows 枚举设备地址的第一个批量客户端地址是端点0x0。

    因此、您说0x0以上的所有其他枚举端点都通过第一个客户端连接发送状态、没问题。

    也许 Windows 批量端点客户端项目不应该将其配置为使用控制端点地址0x0? 启动的第一个批量客户端枚举到地址0x0、其他客户端在第0x1、0x2、0x3行中相邻、以此类推。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因此 CCS 调试 USB0仅显示第一个枚举的客户端连接到 FIFO 0状态结果、所有其他 FIFO 状态寄存器保持安静。 似乎奇怪的是、目标正在使用控制端点(FIFO 0)向枚举的批量设备客户端地址0x0发送数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    bNumEndpoints 表示接口使用的端点数量。 该值应排除端点0、并用于指示要遵循的端点描述符数量。

    接口配置函数可能不会将端点0排除为指定描述符? 第一个描述符可能被错误地分配到端点0x0、最后到达控制端点? 用户可能希望 FIFO 1在 Windows 枚举的第一个批量客户端连接中具有某种状态。