2007年1月29日 星期一

USB DIY -- Q& A (01/29/2007)

請問板大USBFirmware疑問 -- TIGER99  (a081599@pchome.com.tw)

我看完USB DIY 還是有點不懂
DEVICE端:
1.housekeeping Firmware: 是怎樣的語言寫的 怎樣存 ?存在哪?

2.AN firmware:是8051的組語 *.HEX嗎? 怎樣存 ?存在哪?
煩請您 抽空回答一下
或者有哪位大大也可以回答我的 THX~!

   1. 一般所謂 USB housekeeping Firmware 主要就是拿來控制USB基本流程的韌體,據我所知,有些公司或是有些特定用途的USB控制晶片會用硬體直接作掉,而無須寫韌體。但一般通俗型的USB Controller 倒是會保留這些供使用者自行調整的韌體。哪些韌體部分是屬於USB Housekeeping 呢?就是在程式終老是去填一些USB Control 專用的Registers部分的程式就是!!譬如:當我們韌體收到Setup Token 中斷時,我們就知道我們韌體的下一個步驟該是要收資料還是回資料,這些基本的USB Control 流程部分就是了:

     像我的程式中的中斷向量位置:

USB_ISR:                               
                REG_RD  USBIntSt1A               ;; read USB INT 1 flag
                mov     B,A
                REG_RD  USBIntEn1A
                anl     A,B
                               
                jb      A.0, EP0_Tx_F           ;;表示中斷是EndPoint0 傳送In Command 完成了
                jb      A.1, EP0_Rx_F           ;;表示中斷是EndPoint0 接收Setup或Out Command 完成了
                jb      A.2, EP1_Tx_F           ;;表示中斷是EndPoint1 傳送out bulk data 完成了
                jb      A.3, EP1_Rx_F           ;;表示中斷是EndPoint1 接收in  bulk data 完成了
              
                jb      A.4, EP2_Tx_F           ;;表示中斷是EndPoint2 傳送out bulk data 完成了
                jb      A.5, EP2_Rx_F           ;;表示中斷是EndPoint2 傳送in  bulk data 完成了
...

或是Cypress 中的: ezusb.lib 所包的那一大串都算是吧!

    而他往往跟我們所要寫的一般控制韌體是寫在一起的!主要的差別是:一般USB Housekeeping 韌體會把我們一般8051 的中斷Interrput0 給全佔用了!---- 因為USB Controller 的韌體的最高指導原則:就是不能因為您的一般8051 的控制韌體來影響到USB Housekeeping 基本運作的!所以,往往我們在寫一般應用程式時(譬如控制LED或步進馬達時),會時常被USB的 Housekeeping 程式中斷給叫回來!這是一件很討厭的事情。但這也是沒辦法的事滴~因為一般USB Device 都是屬於Slave 模式,所以就必須聽命於Host的-- 這又往往又是被PC端的上層的應用程式(像是BCB 或是一般Visual C++ 所控制的)!~所以,USB 的韌體程式不好寫啊!

瞭解嗎?!

...... 

   一般USB Controller 的程式大部分是8051 base 的!為什麼?!因為當初南橋晶片廠就是Intel 先發表的,他就是利用8051為範例的,所以大家往後都以此為規臬!早期是用組語寫的!因為比較好說明USB的基本流程,但是後來大家都喜歡用高階的 C 語言了,但是大家反而比較難去理解USB這一部份的程式了!這是一定的,因為學習絕對沒有捷徑的--- 您想省略組語的痛苦,您就必須忍受USB的基本概念建立的困難度。

   ----

    至於這些韌體存在哪?!就像一般8051 一樣,您可以外掛EPROM 或是像 Cypress 那樣:他內部有個類似cache 的SRAM 用來隨時更新程式碼的。但大部分那些如作USB  隨身碟的控制晶片廠都是開所謂MASK Code ,就是一次燒死在IC內部的---成本最低,但工程師們最累:因為要把所有可能碰到的問題一次盡量解決乾淨,所以就生活沒品質了--- 早早去上班,晚晚才能下班,又怕被測到韌體有錯-- 因為一層錯誤的MASK光罩,可能就會讓公司虧好幾百萬了!要不然就要降價求售,也就是為什麼USB 隨身碟或是讀卡機控制晶片的單價值直落的原因!!!   

 

沒有留言:

張貼留言