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 開始的已寫入值之前已實際寫入器件中。