2011年5月22日 星期日

USB DIY-- 自學計畫(七)

想瞭解之前的...可以點選以下連結:

USB DIY-- 自學計畫(六)

USB DIY-- 自學計畫(五)

-----

在真正利用一般標準USB Controller 之前,一定得要先對於USB Controller 的

基本架構與規格要有一定的瞭解,否則當您碰到一些系統應用時,您自己

心裡會因為有點心虛(對於USB Controller不瞭解而產生疑慮),這是不好的。

尤其是對於我們專注於應用系統開發工作時,而且現在有很多單晶片微控器,

都已經不是像傳統一般的標準單晶片MCU,各家MCU 都會有點些許差異,

如果您不好好看一下這些原廠的技術文件的話,您就有一些資訊流失,當然啊,

您會覺得因為原廠的資料都是英文的,閱讀上可能會有所辛苦,然後想偷懶的找

有沒有中文翻譯版本,不好意思,市面上有很多這一種類似的中文書,大多是學校老師

或一些想兼職賺外快的人士隨手寫一寫或翻譯的...也都未必真正把這些技術文件的內容

真正的落實在實驗或實際應用上,所以,常常根據中文的描述自己作一遍時,

總覺得怪怪的?但又不願意懷疑書上所提的。您看我們在探討這一系列的USB 原廠範例時,

我們就發現了許多錯誤與奇怪之處,那更何況只是拿這些原廠資料翻譯的技術文件呢?

我說過了:原廠技師也是人也會出問題的,只要您懂得一些基本原理或作法,其實,

都還是可以開發出不錯的系統產品的。畢竟,人家也是真真實實的把一些該提供給客人

的相關產品資訊公開給客人參考的。但在這也不得不提醒一下各位,

這些都是國外公司的作法,有些國內的相關類似的公司或相關產品,

他們所提供的資料或內容,您就要小心了。

因為以我個人的使用經驗,國內或是大陸的相關原廠資料都會避重就輕的把一些很關鍵資料

一筆輕輕帶過,那一種似有似無的工程數據您就要特別小心,舉個簡單的例子來說:

國內有許多單晶片MCU 廠也都會跟上國外公司潮流的標榜自己家的MCU 內部也有提供

震盪迴路,說什麼免掛外部震盪器...也可以工作。好了,就說到這裡點到為止。

甚至還給您美化數據...以下是國外的原廠資料:

其中國內MCU IC 針對這兩項,第一:什麼是  1T 的8051?或是什麼1T 的MCU,語焉不詳,

結果仔細一查,什麼一下子什麼Long Jump 還是 2T 、查TABLE也不能 1T或是一個乘除法

還是要4 T...8T 的。

再跟您說:如果您真的要跑到規格書上說的24MHz 的話,您的工作電壓最好高一點....等等,

不在規格書上的但書說明...好像誰沒留意誰就跟著倒楣。人家的就很坦白跟您說:

只有 70% 的指令是 1T 或2T...這樣子誠實的寫,我們反而還會比較留意的處理,

反而在系統應用上會多加注意,所以人家說:國外的MCU 好像比較穩定,其實不是,

是因為人家誠實,所以我們系統應用工程師會特別留意處理,國內的那些MCU廠,

都好像生怕人家知道他的缺點,避重就輕的~然後被人家抓包之後,再來找FAE擦屁股,

難怪老是被冠上東西不好用的負面形象...反而賠了商譽而得不償失。

第二個就是我們說的:內部震盪迴路...相較於人家坦白從寬的指令效能說法外,

人家倒是明確的指出就是 0.25% 誤差,這一點反而國內就更沒有明確的表態數據了。

其實這種東西工程上就是怕兩種因素:一是溫度漂移,二是工作電壓漂移。大家也知道。

我們也知道人家一開始作MCU 時,這一家國外MCU都有附所謂的內部TEMP Sensor。

您以為人家吃飽太閒幹嘛附Temp sensor 給您用?當然就是他自己內部要做震盪迴路的

溫度補償啊...(想您也應該猜得到吧!)好了,國內的MCU IC 廠就想省這個東西,

(或許也不知道該如何處理吧!),結果就想偷,心存僥倖看看客人會不會留意到這一點。

結果,東西量產之後,真正碰到惡劣環境後,才知道事情大條了...相較於當初業務

拍胸脯的品質保證時,這時候就想低調處理或是逼著FAE 工程師去客人那邊做作樣子

看看可不可以打混戰蒙混過關?最後再叫FAE 工程師排排站的夾卵蛋賠不是...

所以,您不要以為人家日本大地震造成 瑞薩或日系MCU 大缺貨您就高興?市場缺口

還不一定輪得到您來接手的啦。您以為您們家的MCU 跟人家的MCU 是同一個檔次的?!

這一種MCU 就跟搞玩具MCU 一樣嗎?!...

------
所以,大家還是要真正的養成習慣察看原廠原文的技術文件資料的。

首先我們看一下一些所謂USB 專用的MCU 控制器他們的標準架構:

就是包含了 USB Tranceiver ,這個東西是類比的東西...就像我們在用UART轉成 RS232 用

的那一個什麼 MAX232或是類似的轉換IC 啦...第二個部分就是USB 專用的數位邏輯的SIE

(Serieal Interface Engine) ,在USB 匯流排上的那些PID 或是SETUP、IN、OUT 或是什麼

NAK 或 ACK 這些訊號都是屬於他要負責的...還有資料的進進出出還有與標準MCU 之間的

介面也都屬於他,所以,我們就可以看到真正的MCU 就在最右邊,跟這些USB 就沒有多大

的關係,這就是我們常看到一般MCU IC與專用USB MCU IC 不同之處。這樣的架構是比較

容易模組化,我們也就常看到市面上一些USB MCU IC 的基本架構都差不多的啦。

原因也在此。

所以,您就也可以看到USB 專用的記憶體FIFO 也不一定要長在MCU 這一邊...

這樣子的IC 架構也比較單純容易套用到不同MCU 需求上。不一定您的MCU 要 8051 或是

MicrpChip 或是AVR 甚至32 Bits的ARM...都可以容易整合的。

這一家的USB  MCU 在USB Transicever 還有一個好處:就是他不用在外掛D+/D- 匹配

電阻,早期我們在作USB時,這兩線上都還要串接  27 歐姆的...他就不用了。

另外,我在早期寫過一個USB DIY 文章中有提到D+ 上一個提升電阻的使用技巧,這一個

USB MCU 他在IC 本身的USB Transceiver 上就有提供這樣子的功能,就可以讓您在

系統上很方便的使用硬體的重複插拔功能。

接下來的這一張圖所要表達的是:我上述那一個模組化的IC 設計概念,您會發現在一般

標準的MCU 上只要兩個Registers (USB0DAT 與USB0ADR) 您可以完全處理與控制

USB 功能方塊。因為您不知道您原來標準MCU 上面有多少Registers 空間可以塞進

因為增加USB 功能之後,所需要增加的Registers 空間...

這樣子的架構就很簡單只要增加兩個Registers 位置就可以了。

(像8051 的 特別暫存器空間是在80~FF 之間,而且還要負責周邊電路的存取暫存器,

譬如還有ADC 、SPI或是PWM等等 ...其實空間使用是非常受限的!這樣子只佔兩個是比較

好一點的!當然有些公司會直接把這些暫存器移到xDATA 上...但我們知道8051 對於外部

記憶體的存取效能沒有比較好,而且您也不一定保證外部記憶體空間會不會被其他應用佔用

...甚至像PIC Like MCU 就沒有這一塊記憶體定址位置...那就更不用說了!)

所以同樣的道理:一個USB 控制介面到底要提供多少個 Endpoint 才夠用?

而且在實際應用上,每一個 Endpoint 在硬體上都是直接指到一個固定的FIFO上...

所以,我們也就可以理解到在USB 控制暫存器為何在處理Endpoint 或FIFO時,

也會採用類似的兩個Registers (USB0DAT 與USB0ADR)的作法...

這樣子在未來設計與系統擴充時,系統應用工程師

的設計變更是比較輕鬆一點的!----這一點可以體會瞭解嗎?! 這是您在瞭解系統應用之後,

您也會慢慢懂得如何在IC 架構上開規格的系統能力。這是非常重要的。

好了,我們也稍微整理一下這一棵USB  MCU IC 的一些控制暫存器,其實已經算很少的啦,

如果您有機會看過類似MP3 外帶USB 或是隨身碟專用IC 的USB 控制暫存器的話,

這樣子的暫存器數量算很少很少的啦...所以,您真的不要以為要看、要瞭解這暫存器是很難

很辛苦的。當然,我們也可以瞭解這樣子USB MCU IC 的USB 效能也不會比那些專用USB IC

好的啦...因為他們畢竟都是一般通俗常用的USB 控制IC...從這一點的應用市場來看,

我們也知道USB 3.0 在硬體上已經有一點不是很相容USB 2.0 了,像這一類的USB MCU IC

也都只做到USB 2.0 的 『Full Speed』...(其實還是USB 1.1而非USB 2.0 的High Speed)。

所以,在主機板上要真正淘汰掉USB 2.0 也沒那麼容易的...這也是USB 3.0 的市場思維問題。

(其實,USB  3.0 出來有點『生不逢時』,因為搭著iPhone/iPad 潮流,

人家產品講的是軟體附加價值,不再盲目的追求硬體極限...所以,過於強調硬體效能的

USB 3.0 就比較受不到市場的關愛眼神...他可能只是要拿來跟SATA 比較而已!)

從以上的說明,我們就知道他的 Endpoint 這一個 INDEX 暫存器的設計用意了,

也知道這樣子USB  MCU IC 未來擴充也可以達到 16 Endpoint...

好像Cypress USB 就是這樣子。

但在系統應用上,真的會用到麼多 Endpoint 嗎?!如果沒有用到,只是增加IC 本身面積,

增加晶圓代工與減少IC 晶圓量產數量...對於銷售競爭力是有負面效果的,這就見仁見智了。

至於0x20-0x23 那個 Endpoint FIFO 的定義,道理也是一樣的,我們就不說明了。

-------------------------
好了這一個章節我們從很基本的USB MCU IC 的基本架構來看USB 控制暫存器(registers)的

基本定義精神,我們就可以好好的進一步聊解USB MCU IC 該如何透過這些registers 來完成

USB 傳輸控制與USB 韌體程式設計了。

(待續)

 

 

3 則留言:

  1. SIE : Serial Interface Engine

    回覆刪除
  2. 之前在別處看過閣下寫的8051寫FAT檔案及長檔名那篇,

    我想請問, 如果要開發一個裝置可以讓內部的8051或ARM寫記錄檔, 而USB接到PC時則可以像一般隨身碟一樣存取前述的記錄檔, 這樣的IC方案或是合作廠商該要如何著手去找?

    我猜想可以用 錄音筆 或 行車記錄器 之類的 IC方案 來高規低代, 但如果真的不要影音功能, 有沒有其他可能的選項呢?

    回覆刪除
    回覆
    1. 兩種IC 可以考慮:就直接找一個32 bits 的ARM 吧,,,現在您去買這一種
      32 bits ARM MCU 他都附了這一些參考應用系統(韌體或電路)給您參考。
      您就自行直接套用...8051就免了吧,當您要處理那一種FAT32時,
      您就知道 8 bits 8051是很可憐的。
      另一種就是您說的:用人家那一種多媒體的專用IC...他們當然大致上也都
      已經把基本功能都寫得差不多了。...不過缺點是:因為是專用IC,
      一來萬一您的使用量不大,人家是不會鳥您,也不會支持您的。
      二來,這一種專用IC 改朝換代的速度很快,不要等您辛苦調教系統之後,
      人家就通知您說:IC 停產了,您再來哭也沒用的啦。
      其他選項?應該沒有了。

      刪除