第五章 實現
5.1 USB 介面
5.1.3 USB 實作
可以將工作分為二部分,USB 描述元–讓 PC 的作業系統能使用此 USB 裝置,8051 I/O 控制程式–與 FPGA 協定傳送資料。
1.USB 描述元
由於要將 44.1KHz、16bit 的音樂資料即時地傳出來,因此這個 USB 裝置應 屬於 audio 類型,而且其傳輸模式應為等時傳輸。而等時傳輸,時間的最小單位 是 1ms,即最快每 1ms 將資料送出一次,因此,每一次的資料應該為 44 或 45 筆 16bit 的資料。
將控制單板宣告為 USB audio 裝置,要寫 USB 描述元。USB 描述元是記錄 關於裝置的各種訊息與相關設定。宣告一個 USB audio 描述元,其架構圖如[圖 5.1.5]。其每個 Descriptor 都是填寫一份表格,以下大致介紹每個 Descriptor 的內 容[17]:
Device Descriptor:Descriptor 的大小、產品碼、製造商碼等
Configuration Descriptor:本身 Descriptor 的大小、Interface 數目、功率等 Audio Control Interface Descriptors 包含以下 4 個 Descriptors
Standard AC Interface Descriptor:屬 AUIDO Class、Endpoint 數目 Class-specific AC Interface Descriptor:指 Streaming Interface 與數目 Input Terminal Descriptor:Terminal type、this input Terminal ID、聲道
Output Terminal Descriptor:Output Terminal ID、Source Terminal ID、Terminal type Audio Streaming Interface Descriptors 包含以下 6 個 Descriptors
Standard AS Interface Descriptor(Alternate Setting 0):屬於 AUDIO Class、Endpoint Standard AS Interface Descriptor(Alternate Setting 1):屬於 AUDIO Class、Endpoint Class-specific AS General Interface Descriptor:Format Tag、Terminal Link
Format Type Descriptor:Format Type、Channel Number、Sampling Freq.、Frame Size Standard Endpoint Descriptor:bytes per packet、packets per frame、Endpoint Address Class-specific Isochronous Audio Data Endpoint Descriptor:Descriptor Type
圖 5.1.5 USB Audio Descriptor 架構圖 Device Descriptor
Configuration Descriptor
Audio Streaming Interface Descriptors
String Descriptors
Manufacturer String Descriptor Product String Descrip tor Audio Control Interface Descriptors
Standard AC Interface Descriptor Class-specific AC Interface Descriptor Input Terminal Descriptor
Output Terminal Descriptor
Standard AS Interface Descriptor (Alternate Setting 0) Standard AS Interface Descriptor (Alternate Setting 1) Class-specific AS General Interface Descriptor
Format Type Descriptor Standard Endpoint Descriptor
Class-specific Isochronous Audio Data Endpoint Descriptor
String Descriptors 包含以下 2 個 Descriptors Manufacturer String Descriptor:company name Product String Descriptor:product name
USB audio 描述元完成後,接上 PC,會辨示新連接的 USB 描述元,新增加 一個可用硬體–USB audio 音效裝置。此時,啟動應用程式,音樂訊號就會從 PC 送到 USB 的端點暫存區。只要是符合 USB Class 規定的裝置,其驅動程式已包 含在作業系統,而不用另外再寫其驅動程式,應用程式就可以直接使用裝置。
圖 5.1.6 USB 單板以 USB audio Class 描述元裝置列舉
2.8051 I/O 控制程式
最快以每 1ms 送一次資料的等時傳輸,資料傳完後,會發出一次等時中斷。
利用等時中斷機制,來知道端點暫存區是否有資料可以輸出到 I/O PORT。端點 暫存區有個 count 機制,記錄目前暫存區內有多少 Byte 資料,每當暫存區被讀出 1Byte 資料,count 會減 1。利用 count 機制,來知道端點暫存區是否已經空了,
即可結束搬運。
Cypress USB 專用晶片與 8051 Core 相容,是 Enhanced 8051。寫 C code 指定 端點暫存區,利用等時中斷與暫存區的 count 機制,將資料搬移到指定 I/O PORT。
8051 是八位元單晶片,利用二個 OUTPUT PORT 送出 16bit 音樂資料,分別輸出 high byte 與 low byte。規畫第三個 PORT 的二個腳位,當作單版與 FPGA 的控制 訊號(ch1/ch2 write enable)。這樣就能夠在單版上的 I/O PORT 得到 44.1KHz、16bit 的 PCM 音樂訊號[18]。
圖 5.1.7 主程式流程圖 設定 USB 在一般工作模式
初始化副程式:
1.設定 PORTA、B、C 為 OUTPUT PORT 2.Enable PORTA、B、C
3.reset PORTA、B、C 腳位到初始值 4.設定端點 8 暫存區大小
5.指定端點 8 發出 Sof(等時)中斷 6.Enable Sof(等時)中斷
load USB Descriptors
Enable 必要的其他中斷:
SUDAV 中斷
SUTOK(執照封包)中斷 SUSP(中止)中斷
URES(重置)中斷
Enable USB 中斷
while(1) 真
圖 5.1.8 中斷服務程式流程圖 讀端點 8 暫存區,輸出
1 個 Byte 到 PORT A
讀端點 8 暫存區,輸出 1 個 Byte 到 PORT B
輸出 0x02 到 PORT C
讀端點 8 暫存區,輸出 1 個 Byte 到 PORT A
讀端點 8 暫存區,輸出 1 個 Byte 到 PORT B
輸出 0x01 到 PORT C 真
否
讀端點 8 的 ByteCount 暫 存器判斷端點 8 暫存區是 否為空
Sof(等時)中斷是否發生 假
真
設 PORTA、B、C 腳位到初始值
清除 Sof 中斷
Enable Sof 中斷
表 5.1.2 USB 音效裝置輸出資料的時間關係
等時傳輸 第 1∼9ms 第 10ms
USB device 收到資料
USB device 傳送資料 (1 Channel)
圖 5.1.9 USB 傳送資料速度與 SDM 消秏資料速度
表 5.1.2、圖 5.1.9 可知,等時傳輸時間的最小單位是 1ms,大約用 0.8ms 將 資料傳送完畢,與 FPGA 需要的 44.1KHz 數位訊號,資料速率不相配。因此,FPGA 需要一個 FIFO 的機制。
*45
*45
*44=0.805ms
17.9us
*44=0.786ms
17.9us
*44
*44
PORTA PORTB
0.786ms 17.9us
22.6us 1ms
… USB device …
傳送資料速度
44.1KHz 消秏資料速度
左聲道 low byte, 左聲道 high byte, 右聲道 low byte, 右聲道 high byte