ZHCU963A June 2021 – March 2022 TLV320AIC3101 , TLV320AIC3104 , TLV320AIC3104-Q1 , TLV320AIC3105 , TLV320AIC3106 , TLV320AIC3106-Q1 , TLV320AIC3107 , TLV320AIC3109-Q1 , TLV320AIC34
USB-MODEVM 定義為供應(yīng)商特有類,并在 PC 系統(tǒng)中被識(shí)別為 NI-VISA 器件。由于 TAS1020 在其 ROM 中具有多個(gè)旨在與 HID 類器件配合使用的例程,因此使用的是類似 HID 的結(jié)構(gòu),盡管 USB-MODEVM 不是 HID 類器件。使用控制端點(diǎn)將數(shù)據(jù)從 PC 傳遞到 TAS1020。
如表 3-3 中所述,數(shù)據(jù)以 HIDSETREPORT 形式發(fā)送。
器件 | 值 | 說(shuō)明 |
---|---|---|
bmRequestType | 0x21 | 00100001 |
bRequest | 0x09 | SET_REPORT |
wValue | 0x00 | 無(wú)關(guān) |
wIndex | 0x03 | HID 接口為索引 3 |
wLength | 由主機(jī)計(jì)算 | |
數(shù)據(jù) | 數(shù)據(jù)包如下所述 |
表 3-4 列出了組成數(shù)據(jù)包的字節(jié)。
字節(jié)編號(hào) | 類型 | 說(shuō)明 | ||
---|---|---|---|---|
0 | 接口 | 指定串行接口和工作。這兩個(gè)值進(jìn)行邏輯或運(yùn)算。 | ||
運(yùn)行: | ||||
讀取 | 0x00 | |||
WRITE | 0x10 | |||
接口: | ||||
GPIO | 0x08 | |||
SPI_16 | 0x04 | |||
I2C_FAST | 0x02 | |||
I2C_STD | 0x01 | |||
SPI_8 | 0x00 | |||
1 | I2C 從站地址 | I2C 器件的從器件地址或 SPI 16 位寄存器地址的 MSB | ||
2 | 長(zhǎng)度 | 要寫(xiě)入/讀取的數(shù)據(jù)長(zhǎng)度(字節(jié)數(shù)) | ||
3 | 寄存器地址 | I2C 或 8 位 SPI 的寄存器地址;SPI 16 位地址的 LSB | ||
4...64 | 數(shù)據(jù) | 一次最多可以寫(xiě)入 60 個(gè)數(shù)據(jù)字節(jié)。EP0 最大長(zhǎng)度為 64。返回?cái)?shù)據(jù)包限制為 42 個(gè)字節(jié),因此建議任何時(shí)候一次僅發(fā)送 32 個(gè)字節(jié)。 |
示例用法:
使用地址 A0 從 I2C 器件的寄存器 5 開(kāi)始將兩個(gè)字節(jié)(AA、55)寫(xiě)入器件:
[0] 0x11
[1] 0xA0
[2] 0x02
[3] 0x05
[4] 0xAA
[5] 0x55
對(duì)快速模式 I2C 器件執(zhí)行相同操作:
[0] 0x12
[1] 0xA0
[2] 0x02
[3] 0x05
[4] 0xAA
[5] 0x55
現(xiàn)在對(duì)使用 8 位寄存器地址的 SPI 器件執(zhí)行相同的操作:
[0] 0x10
[1] 0xA0
[2] 0x02
[3] 0x05
[4] 0xAA
[5] 0x55
針對(duì) 16 位寄存器地址完成相同的過(guò)程,例如在 TSC2101 等器件中。假設(shè)寄存器地址(命令字)為 0x10E0:
[0] 0x14
[1] 0x10
I2C 地址現(xiàn)在用作寄存器地址的 MSB。
[2] 0x02
[3] 0xE0
[4] 0xAA
[5] 0x55
在每種情況下,TAS1020 都會(huì)以 HID 中斷包形式返回以下數(shù)據(jù):
[0] | 接口字節(jié) | 狀態(tài) | |||
狀態(tài): | ||||
REQ_ERROR 0x80 |
||||
INTF_ERROR 0x40 |
||||
REQ_DONE 0x20 |
||||
[1] | 對(duì)于 I2C 接口,I2C 地址就是發(fā)送的地址 | |||
對(duì)于 SPI 接口,從用于傳輸相應(yīng)字節(jié)的 SPI 線路讀回的數(shù)據(jù)就是發(fā)送的數(shù)據(jù) | ||||
[2] | 長(zhǎng)度就是發(fā)送的長(zhǎng)度 | |||
[3] | 對(duì)于 I2C 接口,寄存器地址就是發(fā)送的地址 | |||
對(duì)于 SPI 接口,從用于傳輸相應(yīng)字節(jié)的 SPI 線路讀回的數(shù)據(jù)就是發(fā)送的數(shù)據(jù) | ||||
[4..60] | 發(fā)送數(shù)據(jù)包的回顯。 |
如果命令成功發(fā)送而沒(méi)有出現(xiàn)問(wèn)題,則返回字節(jié) [0] 必須與所發(fā)送字節(jié)和 0x20 的邏輯或運(yùn)算結(jié)果相同。在第一個(gè)示例用法中,返回?cái)?shù)據(jù)包為:
[0] 0x31
[1] 0xA0
[2] 0x02
[3] 0x05
[4] 0xAA
[5] 0x55
如果接口因任何原因而出現(xiàn)故障(例如 I2C 器件未確認(rèn)),返回字節(jié)會(huì)以如下形式返回:
[0] 0x51
→ 接口 | INTF_ERROR
[1] 0xA0
[2] 0x02
[3] 0x05
[4] 0xAA
[5] 0x55
如果請(qǐng)求格式錯(cuò)誤,即接口字節(jié)(字節(jié) [0]) 采用的值并不是上文所述的值,則返回?cái)?shù)據(jù)包為:
[0] 0x93
→ 用戶發(fā)送了 0x13=,該值無(wú)效,因此返回了 0x93
[1] 0xA0
[2] 0x02
[3] 0x05
[4] 0xAA
[5] 0x55
以上示例使用寫(xiě)入操作。讀取操作與此相似:
使用地址 A0 從 I2C 器件的寄存器 5 開(kāi)始從器件讀取兩個(gè)字節(jié):
[0] 0x01
[1] 0xA0
[2] 0x02
[3] 0x05
返回?cái)?shù)據(jù)包為:
[0] 0x21
[1] 0xA0
[2] 0x02
[3] 0x05
[4] 0xAA
[5] 0x55
此結(jié)果假定上述從寄存器 5 開(kāi)始的已寫(xiě)入值之前已實(shí)際寫(xiě)入器件中。