您好!
我们能否使用 Python 来控制 TI 的 USB 接口适配器?
我需要切换 GPIO 引脚以控制 LED。
请就此向我提出建议。
谢谢、此致、
Vishal
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.
您好!
我们能否使用 Python 来控制 TI 的 USB 接口适配器?
我需要切换 GPIO 引脚以控制 LED。
请就此向我提出建议。
谢谢、此致、
Vishal
您好、Vishal、
我将添加一些其他信息、以阐明如何使用 Python 控制 USB-TO-GPIO 适配器。
它使用 TUSB3210 USB MCU、并被编程为显示为 HID 器件。 该架构非常简单、本质上是一个大状态机、等待来自 PC 的 USB 数据包传入、该数据包由64字节数据有效载荷组成。 数据有效载荷的字节0是状态机的命令字节或操作码。 当 USB 数据包被接收到 MCU 的输入缓冲器中时、MCU 读取字节0并在状态机中执行与该字节相关的代码。 然后、MCU 将一个响应数据包放置到输出缓冲器中、以便在 PC 下次从 USB HID 器件请求数据时进行传输。
USB-TO-GPIO 数据表 包含编程到 MCU 中的各种功能的数据包字节信息以及响应数据包。 64字节数据包中的后续数据字节是特定于函数的信息
例如、I2C 写入操作、数据包的命令代码或字节0为0x14。 I2C 读取操作命令字节或字节0为0x15。 如果您希望通过 I2C 向 TCA6424A 器件寄存器写入数据、则可能会有一个 USB 数据包、例如{0x14、0x22、0x04、0x01、0x55、 0x00...0x00>}。
0x14是 I2C 写入函数、0x22是器件从地址、0x04是寄存器地址、0x01是要写入的字节数、在本例中为1、0x55是要写入寄存器的值。 其余的64字节数据包无关、因为您已告诉 MCU 只写入1个字节。 我通常用0填充它、但它可以是你想要的任何东西。
写入此 USB 数据包后、应使用 USB 数据有效载荷字节0 0x94检查 MCU 的响应数据包。 这是 I2C 写入响应所特有的。 然后字节1将为0x00或0x01、以指示成功(0)或失败(1)。
我从未使用过 GPIO 引脚、但我相信用于将这些引脚设置为0x16的命令代码(字节0)的响应数据包命令字节为0x96。 有关详细信息、请参阅数据表。
我在 Python 2.7中使用了 pywinusb 模块、其中包含大量在线文档和示例、您可以参考这些文档和示例。
您应该通过 PC 的硬件管理器验证供应商 ID (VID)和产品 ID (PID)值、但我认为 VID = 0x0451、PID = 0x5F00。 在 Python 中、您需要初始化器件句柄。 然后创建一个输出报告、以存储来自 PC 的有关 USB 数据包成功/失败的状态信息。 然后为数据包创建缓冲区、您将根据 USB-TO-GPIO 数据表中的状态机函数信息加载数据包。 发送数据缓冲区时、需要将报告 ID 缓冲区附加到数据缓冲区的前面。 但是、MCU 看不到它、MCU 输入缓冲器的字节0将是您的命令字节、正如我在下面的一些旧示例代码中所示。 I2C 写入命令的示例缓冲区如下所示。
缓冲区=[0x00]*65 #65 =报告大小+ 1字节(报告 ID)
Buffer[0]= 0x00 #report id
缓冲区[1]= 0x14 I2C 写入命令操作代码
Buffer[2]= devAddress * 2 #Slave Address 移位1位+写入位0
Buffer[3]= regAddress #寄存器地址字节(命令字节)
Buffer[4]= 0x01 #Number of bytes to write
Buffer[5]= regData 写入的字节(寄存器值)
如果您仍在尝试设置和运行您的通信、我希望此额外信息能有所帮助。 我建议查看用于 USB HID 通信的 Python 模块、例如 pywinusb 模块。 然后、按照可用的文档和示例代码来设置您的独特函数、这些函数将根据需要创建您的数据缓冲区。
此致、
Jonathan