如果您在USB 的設計使用上,需要同一系列產品同時有多組插在同一部電腦時,
您該如何處理?譬如說:您是作USB 燒錄器啊或是相關USB 輔助工具的。
您可能需要一部電腦插上好幾支同樣的USB 燒錄器時,那我在USB的系統設計上,
該如何分辨USB 系統呢?以下我們就用一個簡單的例子說明:
從上圖我們發現:有兩隻USB SiLabs 的USB Debug Adapter 插在PC 上,
我們就可以依下拉式選單來選擇特定的USB 燒錄器。
那圖中的燒錄器的序號是由誰產生的呢?當然不是PC 作業系統自行產生的,
而是由您USB 裝置的宣告給PC 作業系統的啦。
那該如何在USB 裝置中來產生這一個類似產品序號的宣告的呢?
我們就直接依照USB 插入PC 端時的 Enumeration 來看結果:
我們從上圖就發現我們在USB Device Description 中有定義了:
iManufacture 、iProduct 及 iSerial...而依序對應值就是 1、2及 3。
但注意的是在USB Enumeration 過程中,其實還有一個內定值:0 。
如果您不想定義這個東西...也可以,您只要把這些值都定義成 0 時,作業系統
連問都不會問的。也可以減少USB 系統複雜度,只是您就沒辦法做到同時支援多組
同樣產品的USB 裝置。...不是不能插到同一部電腦,而是您上層的應用軟體
無法明確的知道哪一隻USB 裝置對應到哪一個USB 接口。當然如果是
單純一部PC 只有兩個USB 接口還好,但萬一是透過USB HUB 的話,那就很難找到了。
首先我們就可以看到在USB 回覆USB 裝置中的 iProduct 的值。這是標準Unicode 的
表示方式。前面兩個值分別是長度與USB Device Descriptor 中Type值(固定為 3)。
當然要分辨兩隻實質不同的USB 裝置還是得靠 iSerial 值來區別:
第一支USB 裝置的iSerial 宣告:
----
第二支USB 裝置的iSerial 宣告:
從以上兩個不同的 iSerial 值,我們就可以發現跟我們一般上層應用程式所顯示的值一樣。
我們就知道要從USB 裝置上去區別哪一隻USB時,就是得靠USB 這一個iSerial描述值。
而光靠USB 的VID 與PID 是不夠的。
---------------
所以,當您的USB 系統應用上需要支援這一種使用方式時,您就得在USB 裝置量產上
一隻一隻的把不同USB iSerial值...慢慢的定義進去,這一點對於那一種我們台灣喜歡搞
標準量大的MCU 產品來看:那一種要開MASK 而不支援 Flash 燒錄功能的MCU 來說。
就非常不方便了...就算是外掛的EEPROM 來說:也未必比較方便或便宜。
因為現在許多MCU 的價差真的越來越少了...這又再一次的說明:為何許多比較有附加價值
的產品,人家還是比較傾向用國外這一種USB MCU 產品系列了。
--------------------------
PS : 關於原廠所提供的那一隻HID_Blinky 範例程式是沒有提供這一項的程式演練,
所以如果您要加入這一項功能的話,您就得自己DIY 自行加入此一宣告。
--------------