ZHCU963A June 2021 – March 2022 TLV320AIC3101 , TLV320AIC3104 , TLV320AIC3104-Q1 , TLV320AIC3105 , TLV320AIC3106 , TLV320AIC3106-Q1 , TLV320AIC3107 , TLV320AIC3109-Q1 , TLV320AIC34
USB-MODEVM 定义为供应商特有类,并在 PC 系统中被识别为 NI-VISA 器件。由于 TAS1020 在其 ROM 中具有多个旨在与 HID 类器件配合使用的例程,因此使用的是类似 HID 的结构,尽管 USB-MODEVM 不是 HID 类器件。使用控制端点将数据从 PC 传递到 TAS1020。
如表 3-3 中所述,数据以 HIDSETREPORT 形式发送。
器件 | 值 | 说明 |
---|---|---|
bmRequestType | 0x21 | 00100001 |
bRequest | 0x09 | SET_REPORT |
wValue | 0x00 | 无关 |
wIndex | 0x03 | HID 接口为索引 3 |
wLength | 由主机计算 | |
数据 | 数据包如下所述 |
表 3-4 列出了组成数据包的字节。
字节编号 | 类型 | 说明 | ||
---|---|---|---|---|
0 | 接口 | 指定串行接口和工作。这两个值进行逻辑或运算。 | ||
运行: | ||||
读取 | 0x00 | |||
WRITE | 0x10 | |||
接口: | ||||
GPIO | 0x08 | |||
SPI_16 | 0x04 | |||
I2C_FAST | 0x02 | |||
I2C_STD | 0x01 | |||
SPI_8 | 0x00 | |||
1 | I2C 从站地址 | I2C 器件的从器件地址或 SPI 16 位寄存器地址的 MSB | ||
2 | 长度 | 要写入/读取的数据长度(字节数) | ||
3 | 寄存器地址 | I2C 或 8 位 SPI 的寄存器地址;SPI 16 位地址的 LSB | ||
4...64 | 数据 | 一次最多可以写入 60 个数据字节。EP0 最大长度为 64。返回数据包限制为 42 个字节,因此建议任何时候一次仅发送 32 个字节。 |
示例用法:
使用地址 A0 从 I2C 器件的寄存器 5 开始将两个字节(AA、55)写入器件:
[0] 0x11
[1] 0xA0
[2] 0x02
[3] 0x05
[4] 0xAA
[5] 0x55
对快速模式 I2C 器件执行相同操作:
[0] 0x12
[1] 0xA0
[2] 0x02
[3] 0x05
[4] 0xAA
[5] 0x55
现在对使用 8 位寄存器地址的 SPI 器件执行相同的操作:
[0] 0x10
[1] 0xA0
[2] 0x02
[3] 0x05
[4] 0xAA
[5] 0x55
针对 16 位寄存器地址完成相同的过程,例如在 TSC2101 等器件中。假设寄存器地址(命令字)为 0x10E0:
[0] 0x14
[1] 0x10
I2C 地址现在用作寄存器地址的 MSB。
[2] 0x02
[3] 0xE0
[4] 0xAA
[5] 0x55
在每种情况下,TAS1020 都会以 HID 中断包形式返回以下数据:
[0] | 接口字节 | 状态 | |||
状态: | ||||
REQ_ERROR 0x80 |
||||
INTF_ERROR 0x40 |
||||
REQ_DONE 0x20 |
||||
[1] | 对于 I2C 接口,I2C 地址就是发送的地址 | |||
对于 SPI 接口,从用于传输相应字节的 SPI 线路读回的数据就是发送的数据 | ||||
[2] | 长度就是发送的长度 | |||
[3] | 对于 I2C 接口,寄存器地址就是发送的地址 | |||
对于 SPI 接口,从用于传输相应字节的 SPI 线路读回的数据就是发送的数据 | ||||
[4..60] | 发送数据包的回显。 |
如果命令成功发送而没有出现问题,则返回字节 [0] 必须与所发送字节和 0x20 的逻辑或运算结果相同。在第一个示例用法中,返回数据包为:
[0] 0x31
[1] 0xA0
[2] 0x02
[3] 0x05
[4] 0xAA
[5] 0x55
如果接口因任何原因而出现故障(例如 I2C 器件未确认),返回字节会以如下形式返回:
[0] 0x51
→ 接口 | INTF_ERROR
[1] 0xA0
[2] 0x02
[3] 0x05
[4] 0xAA
[5] 0x55
如果请求格式错误,即接口字节(字节 [0]) 采用的值并不是上文所述的值,则返回数据包为:
[0] 0x93
→ 用户发送了 0x13=,该值无效,因此返回了 0x93
[1] 0xA0
[2] 0x02
[3] 0x05
[4] 0xAA
[5] 0x55
以上示例使用写入操作。读取操作与此相似:
使用地址 A0 从 I2C 器件的寄存器 5 开始从器件读取两个字节:
[0] 0x01
[1] 0xA0
[2] 0x02
[3] 0x05
返回数据包为:
[0] 0x21
[1] 0xA0
[2] 0x02
[3] 0x05
[4] 0xAA
[5] 0x55
此结果假定上述从寄存器 5 开始的已写入值之前已实际写入器件中。