USB音訊類描述符及其說明

2021-08-20 20:08:18 字數 3512 閱讀 6841

usb描述符供參考:

0x01,

0x01

0x04

0x24

0x00

//configuration:wtotallength =0x00be,numinte***ces = 0x03,

0x00

0x01

0x00

0x02

0x00

0x01

0x01

0x00

0x03

0x00

0x7d

,0x00

0x00

0x00

0x00

0x7d

,0x00

0x00

0x00

0x04

,0x03

,0x09

,0x04

0x26

'r''e'

0x1c

'r'0x1c

'r'這裡就不針對整個描述符去作具體的分析,其實注釋已經寫的很詳細了。這裡只是對一些細節性的進行說明

根據usb

描述符可以得到其拓撲圖

:拓撲圖

描述符的分層組織結構

描述符層次結構

裝置描述符裡採用的

vendor

和product id

號是隨便寫的乙個用於測試。

裝置描述符下包含乙個配置描述符,配置描述符下包含了

3組介面,

if0作為音訊控制介面,

if1作為

microphone

介面,if2

作為speaker介面。

在if0

的定義中沒有包含任何端點,所以

與音訊相關的控制資訊將通過預設的控制端點

0來進行資訊的交付

。也就是說端點

0除了響應預設的控制事務

(setinte***nce等等)

以外還需要

響應音訊類相關控制事務

(set cur

,get max等等)

0來完成的。中的

feature unit

定義了音量調節方式,

mute

和volume

,其中id號為2

的unit

控制microphone

,id 5

控制speaker

。具體關係常見其拓撲圖。

中兩個it(input terminal)

定義了音訊流邏輯通道數及其具體組成形式

,在該示例中包含了

2個邏輯通道,分別是

left&right

,如果需要更多的通道可以通過修改相應描述符單元得到(同時

注意修改相應的

streaming

描述符中物理通道數,相應

usb endpoint

支援的包位元組大小)。

和if2

中都定義了2個

setting

,其中setting 0

都不包含傳輸

endpoint

,setting 1

都包含乙個同步傳輸

endpoint

。這裡要說明的是,之所以都要定義乙個不含有任何傳輸

endpoint(

除了預設端點0)的

setting

,是由usb audio

裝置特性決定的,該

setting

不可省略,

該setting

用於在裝置沒有被使用時作為

usb裝置的設定

。如果沒有利用該

usb裝置進行放音和錄音則主機使用的介面是

if(1,0)(介面1

的設定0)

和if(2,0)(介面2

的設定0)

,如果開始放音則使用的介面是

if(1,0)

和if(2,1)

,如果即用於

放音又用於錄音則使用

if(1,1)

和if(2,1)

。這裡敘述的有些累贅,其實大家可以利用

usb協議相關分析軟體得到其具體互動過程。

在if1

和if2

中定義了音訊流格式為

pcm格式

(更多關於格式的資訊參考

usb audio

相關文件)。

32k,如果需要更多的取樣頻點的支援,可以通過修改相應字段得到

(注意修改相應同步端點支援的包大小)。

if1(microphone)

定義了endpoint 1 

作為其同步傳輸輸入端點

。端點支援的最大傳輸位元組為

0x84(132byte)

,這裡的

0x44

是由32*2*2=128=0x80(

取樣率*

通道數*

每個樣點的位元組數

)得到的

(0x80byte/ms)

,之所以會多出

4位元組是因為在之前的應用中如果支援

44.1k

時的乙個考慮,當然這裡可以將其定義為

0x80。在

if1和

if2的

as endpoint descriptor

中的字段

attributes

可以用來定義

是否支援取樣率相關事務處理

。也就是說如果在

同乙個if

的同一setting

中支援多個取樣率

,那麼在進行同步傳輸前,主機可以發起乙個告知裝置即將使用的取樣率的事務處理,而這裡的

attributes

用來定義裝置是否支援這類事務處理。

支援多個取樣率不僅可以通過在第

9點所敘述的方式來實現(同一

setting

下支援多個取樣率

),也可以通過

增加新的

setting

來支援(

每個setting

支援乙個單獨的取樣率

)。兩種方式各有優缺點,

第一種方式比較簡潔不過需要由主機告知裝置即將使用的取樣率

。第二種方式會較大幅度的增加整個描述符長度,但是不需要主機告知裝置使用的取樣率。也就是說在第一種方式下主機先告訴即將使用的介面

setting

,然後再發起乙個取樣率的

set cur

事務處理。而第二種方式只需要告訴即將使用的介面就可以了

(因為乙個

setting

只支援乙個取樣率,不同取樣率將採用不同

setting)

。同步問題,因為

usb傳輸都是主機發起的,而裝置只是被動的響應來進行資料傳輸。對於同步傳輸,

usb在每乙個

frame

中啟動一次同步傳輸,該同步傳輸的啟動是基於主機

usb主控制器所使用的時鐘來進行的,而裝置得到資料是依據自己的時鐘源,所以這裡就存在兩個時鐘源差異的問題。我採用的方式是

利用裝置響應主機的

sof中斷來調整自身時鐘來與主機同步。

USB 五 USB HID類描述符

前面的幾個章節,詳細介紹了usb必要的描述符配置,接下來我們介紹usb中的hid類。通過檢視usb hid類的官方文件,hid類的裝置在配置描述符中還需要乙個hid描述符。它是乙個類描述符,應該跟在介面描述符後面。hid的描述符包括hid類描述符 報表 report 和實體 physical 描述符...

關於usb描述符

usb 的描述符主要有裝置描述符,裝置限定描述符,介面描述符,端點描述符,字串描述符等等,usb的描述符之間的關係是一層一層的,首先最上層的是裝置描述符,然後是配置描述符,在下面的是介面描述符,最後是端點描述符.描述符在乙個usb的裝置中所起的作用是十分重要的,在裝置連線到usb主機以後,主機首先是...

USB 描述符詳解

usb描述符的分類與介紹 usb的符述符分為幾類?有人可能會答 裝置描述符 配置描述符 介面描述符 端點描述符 字串描述符等。但這裡說的不是這樣的。上面的幾類描述符屬於usb標準描述符。另外還有hid描述符和hub描述符。所以分類是這樣的 1.標準描述符 1 裝置描述符 2 配置描述符 3 字串描述...