N.T.開講:設定靜態影像裝置 細說USB Still Image Capture Device

2005-06-30
「USB Still Image Capture Device Definition」這份規範的主要用意就是提供足夠的資訊,讓軟體開發人員所撰寫的靜態影像裝置驅動程式(Device Driver),可以輕鬆又容易地連接到影像應用軟體...
「USB Still Image Capture Device Definition」這份規範的主要用意就是提供足夠的資訊,讓軟體開發人員所撰寫的靜態影像裝置驅動程式(Device Driver),可以輕鬆又容易地連接到影像應用軟體。同時,也提供工程人員USB靜態影像裝置的基本知識。  

 

乍看「USB Still Image Capture Devices」,令人馬上聯想到的裝置或許是數位相機以及掃描器吧!尤其是數位相機,隨著數位海嘯的來襲,相機也跟著潮流進入了數位化的的魔域中,形成一股新興勢力。由於其方便性非傳統相機可以比擬,況且價格如同手機,產品壽命週期又極為神速,一人一台或一人多台的局面不是什麼稀奇古怪的事情,日本媒體界將它視為數位時代的另一種神器。未來手機結合相機的趨勢,銳不可擋,而將相機所拍攝的照片直接列印,更是受到消費者的歡迎與肯定,自己洗照片的暢快感覺與兼顧隱私性,也都符合當代人要求自在生活的寫照。  

至於使用者的情境,只要以同理心的思考邏輯就可以輕易體會,但偏偏又違反了USB規格中央集權式的遊戲法則,必須以USB OTG(On-The-Go)的方式來為之或是採用其他的技巧。目前,數位相機與照片印表機直接連接的傳遞方式(圖1),「PicBridge」可以說是日系眾多機種的共通支援標準(圖2)。  

數位相機的發展  

然而,若是說數位相機的發展與電視影像的紀錄或錄影習習相關、脈出同源,或許您會大吃一驚。早在1951年,從Television Camera在VTR(Video Tape Recorder)之磁帶上錄下了電視影像信號。1960年代,NASA將地球表面的影像傳回地球,並利用興起的電腦來處理影像。所謂的間諜衛星(Spy Satellite)也是捕捉數位影像(Digital Image)。在1972年,美商德州儀器(TI)取得一項沒有底片(Film-less)的電子相機專利。然而,如果要說進入商品化的市場階段,可就要延後到1981年8月,新力Sony發表了「Mavica」電子式靜態相機(圖3),該機器是將影像記錄在Mini Disc上(2.5吋的軟碟片),藉由視訊讀取機連接到電視裝置或彩色印表機來取得影像輸出。雖然是革命性的一刻,但認真嚴肅地探討,這也並不能說是真正的數位相機,僅能說它是一台視訊相機(Video Camera),但是捕捉凍結的畫像罷了。  

靜態影像裝置  

「USB Still Image Capture Device Definition」這份規範的主要用意就是提供足夠的資訊,讓軟體開發人員所撰寫的靜態影像裝置驅動程式(Device Driver),可以輕鬆又容易的連接到影像應用軟體。同時,也提供工程人員USB靜態影像裝置的基本知識。  

為了維持文章的完整性,對於一些USB規格的技術專有名詞,還是有必要去認識清楚。此乃必備之基礎常識。  

‧組態(Configuration):一個USB裝置功能介面的總合。  

‧描述器(Descriptor):一種表格式的資料結構,用來記述USB裝置機能以及特徵的方式。  

‧端點(Endpoint):無妨視為資料傳輸來處與去處的緩衝暫存器。  

‧HCD(Host Controller Driver):因為從作業系統端來俯瞰,主機端控制器依然需要驅動程式來認識它並讓它動作。  

‧HCDI(Host Controller Driver Interface):意思是指USBD以及HCD彼此之間的程式介面(Programming Interface)。  

‧OHCI(Open Host Controller Interface):是由Compaq以及Microsoft等公司所企劃的硬體暫存器規範,是USB 1.1的規範。  

‧UHCI(Universal Host Controller Interface) :是由英特爾公司獨家所定義的硬體暫存器規範,也是USB 1.1的規範。  

‧USBD(Universal Serial Bus Driver):無妨視為用來管理以及使用眾多驅動程式的系統控制軟體。  

‧USBDI(USBD Interface):也就是USBD的程式介面。  

「USB Still Image Capture Device Defini-tion」這份規範所描述的裝置乃是站在主機端的視野,使用USB介面所定義的大容量傳輸模式(Bulk Transfer)來載送靜態影像或圖像資料。至於特徵與命令,乃是依據業界PIMA 15740規範,可以完整確保所有數位照相裝置彼此之間的互通性。換句話說,此處所指的靜態影像裝置,係必須符合「PIMA 15740 Standard Photography-Electronic Still Picture Imaging」的規定。  

「USB Still Image Capture Device」也是採用大容量傳輸模式(Bulk Transfer)來調整裝置的控制。比如說,GetDevicePropertyDescriptor、GetDevicePropertyValue、SetDevicePropertyValue等命令就是用來管理裝置模式的設定。  

若是裝置端發生了一些非同步的事件,比如電池用量不足(Low Battery)、記憶卡被移除等現象,裝置端就會用中斷傳輸模式(Interrupt Transfer)告知。  

主機端V.S.裝置端  

主機端以及裝置端兩者的相依關係,可以從圖4得到啟示。「USB Still Image Capture Device」可以針對圖像資料,裝置組態可以支援一個或一個以上的機能介面。然而,裝置描述器(Device Descriptor)中的device class code、device sub-class code、device protocol code等欄位,都必須設定為零。無形中就明確指出裝置歸類碼是存放在介面描述器(Inter-face Descriptor)的欄位之中。  

「USB Still Image Capture Device」的裝置歸類碼數值為(0x06)、sub-class code為(0x01)、protocol code為(0x01)。  

透過圖4,也不難得知該類靜態影像裝置起碼也要擁有四個暫存器端點(Endpoint)。一個是專門用來接收USB介面標準或裝置歸類等命令用的Endpoint-0,一般也稱之為預設端點(Default Endpoint)或是控制端點,一個資料進入端點(data-in),一個資料送出端點(data-out),以及一個中斷端點。  

預設端點乃是運用控制傳輸模式(Control Transfer),用來送出標準命令、裝置歸類命令甚至廠商自行定義的命令。資料進入端點以及資料送出端點,就是使用大容量傳輸模式(Bulk Transfer)。端點的位址編號可以從1到15,只要不衝突即可。資料進入的方向當然是指從裝置端送往主機端而說的。資料送出則是相反,從主機端送至裝置端。比較有趣的地方是,一個傳送封包的最高資料承載量或稱最大封包大小(maximum packet size),則是看各家的實踐本領而定。  

中斷端點必須用來裝置端告知主機端事件的途徑,很明顯地這是屬於Interrupt-In的動作。最大封包大小(maxi-mum packet size),也是要看各家的本事而定。  

裝置歸類的相依命令  

玩過數位相機的朋友一定知道,靜態數位影像的資料格式有多種,資料格式可以在「PIMA 15740 DeviceInfo Dataset」中來確認。「USB Still Image Capture Device」依然也得遵守USB介面的遊戲規則,必須支援標準的介面命令,諸如Clear Feature、Get Configuration、Get Descriptor、Get Interface、Get Status、Set Address、Set Configuration、Set Descriptor、Set Feature、Set Interface、Synch Frame等。  

當然,「USB Still Image Capture Device」也提供了裝置歸類的相依(class-specific)的命令,如果裝置不支援或無法辨識這類命令,依照老規矩必須回應「Stall」狀態封包。底下,就來探詢這些裝置歸類的相依命令。  

Cancel Request命令  

「USB Still Image Capture Device」要支援從主機端送來的該命令,該命令的屬性是一種控制寫入(Control Write)的動作,也就是說丟完命令之後,會緊跟著資料。USB介面的命令載送法則就是Setup封包加上八個位元組的資料封包,該八個位元組的構成請見表1、2。請務必留意,「bRequest」這個欄位就是存放USB命令碼的地方所在。  

此命令的主要目的,就是主機端要確認大容量傳輸已被取消。  

Get Extended Event Data命令  

「USB Still Image Capture Device」可以支援從主機端送來的該命令,該命令的屬性卻是控制讀取(Control Read)的屬性,透過此命令可以告知主機端關於裝置在非同步事件(Asynchronous Event)的延伸資訊(表3、4)。  

Device Reset Request命令  

「USB Still Image Capture Device」要支援從主機端送來的該命令,該命令很單純,其後並無緊跟任何資料讀取或寫入,乃是用來重置(Reset)裝置到閒置的狀態,或是清除任何製造商自行規範的暫停狀態(表5)。  

Get Device Status Request命令  

「USB Still Image Capture Device」要支援從主機端送來的該命令,這個命令也是一個控制讀取的動作,乃是裝置用來告知主機端狀態或是有關協定的情況(表6、7)。  

「USB Still Image Capture Device」規範也允許有廠商自行定義的命令,裝置端若是無法辨識該命令,依照老規矩回應「Stall」封包即可。  

支援各種標準描述器  

接著,要來回顧描述器(Descriptors)的課題了,這是USB介面傳輸協定的要塞,若是不夠踏實去了解,要精通活用USB介面簡直是幻夢一場。圖5描繪出USB介面描述器的結構。  

「USB Still Image Capture Device」當然也得支援各種標準的描述器。若是以樹狀結構來觀察的話,由上而下分別是裝置描述器(Device Descriptor)(表8)、組態描述器(Configuration Descriptor)(表9)、靜態影像介面描述器(Still Image Interface Descriptor)(表10)以及相關之端點描述器(Data-In Endpoint Des-criptor/Data-Out Endpoint Descriptor/Interrupt Endpoint Descriptor)(表11~13)。  

請特別注意表10這個介面描述器當中「bInterface-Class、bInterface-Subclass、bInterface-Protocol」的三個欄位,其中的常數定義已經被明確規劃。比如說,bInterface-Protocol的0x01,就是表示該裝置所支援的協定就是採用大容量傳輸的PIMA 15740相容裝置。  

很明顯地,資料的傳送或狀態的回應,資料承載量皆不得超過64個位元組。  

另一方面,「USB Still Image Capture Device」當然也可支援字串描述器的機能,用來記載製造商、產品款式型號及產品系列號碼等。以製造商ID的字串為例,最多可用120個國際標準碼UNICODE字母(表14)。  

請留意,「USB Still Image Capture Device」並不支援裝置歸類的描述器(Class-Specific Descriptors),卻能夠支援廠商自訂的描述表格。  

PIMA15740規範  

PIMA15740相容裝置的「USB Still Image Cap-ture Device」,其資料傳輸協定基本上乃是根據「命令Command、資料Data、回應Response」三部曲來完成資料交易,也僅限制於大容量的傳輸環境(圖6、7)。  

PIMA15740規範中,詳細記載了命令的區塊組成以及相呼應的後續動作。由此來思考之,PIMA15740相容裝置必須涉及到兩個端點或暫存器,作為PIMA 15740動作執行緒的用途。該兩端點即是「Bulk-out Endpoint」以及「Bulk-in Endpoint」。抓住重點來說,大容量傳輸端點(Bulk Pipe)即是為了滿足PIMA15740的運作(圖8)。  

PIMA15740與「Mass Storage Class」一樣,均不支援命令佇列(Queue)的傳送機制。  

PIMA15740相容裝置,畢竟還是以裝置為主體,連接的介面可以多樣化,因此可以有USB Still Image Capture Device、IrDA Still Image Capture Device、1394 Still Image Capture Device、RF Still Image Capture Device等(圖9)。  

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!