如果您在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 自行加入此一宣告。


--------------


 

arrow
arrow
    全站熱搜

    賈老師的真老公 發表在 痞客邦 留言(1) 人氣()