2020年2月6日 星期四

USB DIY --- 市場產品技術參考(一)

我想在許多產品開發過程中,都難免對於市場相關或是類似的產品,會有一點好奇。

也總是希望從裡面可以觀察或研究出別人的作法,這應該也是許多開放平台興起

的另一個重要原因吧。我相信搞技術的人,以前會去常翻雜誌或買書回來看,

只是現在網路發達,多多少少有空就會想從網路搜尋找起,但有些東西只是光看

外觀或是碰到沒有人貼文的話,關於產品的硬體或內部的東西就不容易了解的。

有機會我們就來試試看市面上的這些東西到底是怎麼一回事,也順便提供給各位

從產品本身的技術內涵,來推演一些市場現象或是市場趨勢與未來吧。

首先我們來看一個現在很普遍的DIY 市場,就是許多產品的開發工具,

上回我們有貼過一篇關於 STM32 的 ST-link 2 的開發工具,有時候您真的很難想像

這些市面上的低價複製品,到底是誰把原廠的東西給"流出來"的?是不小心的呢?

還是原廠某種程度的"刻意釋出"的?這些東西明明也都沒有原始碼,但燒錄檔有可能

給了工廠,或給了代理商的FAE?然後就"不小心"給流出來了。

但很明顯的是:只要市場暢銷,有很多人用的東西,那肯定就有市場,不管你

原廠標準品售價多少,市場上的複製品肯定會砍到見骨的,至於能不能用的問題,

你就不用太替它擔心,市場的自然生存法則會教他們的。

這一次我們來看另一個MCU 的USB 開發工具:Silicons Labs 的 USB Debug Adapter:


我說過了,反正只要是暢銷品,有市場需求,尤其原廠賣得很貴,(為什麼要賣貴?

因為反正有人在賣低價的複製品,我原廠殺價也沒意義,乾脆我就保持貴貴的賣...

沒差啦,反正它的成本大家也都可以推估出來,對原廠來說:買MCU 時,順便

送你一套也沒差啦。這就一種產品的市場訂價規則。說穿了沒啥。)

我手上當然也有一個原廠的:


我們可以打開裡面看一下:


既然要賣貴貴的,成本的考量就不是什麼重點,也順便照顧一下其他IC 零組件,

它的板號是:EC-3 REV 004。說真的。我怎麼查就發現該原廠就只有出到 EC-3 而已,

後面的 EC-5 ? EC-6 ?就真的查不到。更好玩的是:它這個東西從它們早期搞 8 bits

MCU 時就有了,到了現在原廠也繼續支持他們現在 32 bits ARM MCU,這個東西還是

可以用,所以啦~這個東西重點真的不是在硬體設計上,而是在軟體支持上的擴展。

好了:那市面上的複製品呢?


它就叫 EC-6 。你有沒有覺得這個東西的外盒有像有點眼熟啊?

是的,它就市面上另一個暢銷開發工具:Saleae 邏輯分析儀的外盒是一模一樣的:


你看:這一種低價產品的成本極低化是搞到什麼程度,就連一個塑膠外盒也是盡量

共用的,頂多就多做一張貼紙而已罷了。

那你看人家原廠PCB 版上那麼東西(電子零組件),這麼小的盒子哪裝得下呢?


這個你就不用替他們操心了,肯定也是降低成本版啊。只是他們還是用原廠

的MCU ,對原廠來說:他們沒差,一樣可以賣MCU 賺錢,至於其他零組件廠商

來說:那就抱歉了,真的不是我原廠願意的...這真的沒辦法啊。

(其實據我所知:以前代理商手上也有另一個陽春版的類似的東西,但我覺得

應該沒差了,反正代理商要靠這個東西"賺錢"?真的不容易啊...)

----
那我們看完硬體之後,再來看看裡面的一些跟軟體有關的東西吧。

既然是USB 介面的開發工具,那他們是一定會有USB 裝置宣告的東西,

我們就來看看吧:(以下我是以原廠 EC-3 的東西為主)



我說過了:它這個東西早在很早 USB 1.1 時就有了,那你說USB 未來發展會不會有

歷史包袱的問題?那肯定是有的,又不能破壞到這一部分的相容性,又想增加系統發展

效能,那就得考量系統規格制訂與發展者的睿智了吧。


產品定義的公司(VID) 為 Cygnal。可能有一些較年輕的工程師可能沒聽過,

其實 Silicon Labs 的 MCU 產品線是合併這一家Cygnal 公司來的。

而這一家公司原本是一家搞軍用MCU 起家的公司,也是很早就開發出 1T 8051 的公司。

在這裡就不用再爭論這一種 1T 8051 的技術或市場問題了。


一般這一種開發工具都是屬於 Bus Power 的,電流量的需求都不大。


 而它走的USB 驅動程式是來自於 Vendor HID Class ,也就是免裝驅動程式的。

不過,有些時候它的應用軟體也會要求使用者加裝他們公司的USB 軟體的DLL,

這些是指一些比較特殊應用的:譬如要使用原廠提供的軟體開放程式的話。

另外我們也發現它的 USB HID class Report Descriptor 長度有 0x317 這麼長,我之前

文章中也有提過,我想這是一個一開始就考慮到未來保留給許多應用所使用的,

也不一定是我們一般使用者,或許他們原廠在許多產品開發測試上也會用得到的。


好了,這個字串宣告就是一個重點了,因為它應該是配合他這一代產品的硬體版本

宣告,所以我們真的也看到與硬體上PCB 的版號類似的字串:EC300242B87。

如果你有用過這家公司原廠所提供的USB 範例程式,你應該也知道他們保留了,

一個 unsigned long 變數給它的字串滾碼(Rolling Code)用,所以這個字串長度就

可想而知了。這一點也可以供大家在這一方面的需求考量吧。

接下來就是那個"落落長"的 USB HID class report Descriptor 了:


真的太長了,我只好擷取前後部分供大家參考:


可以看得到出來,反正一個 USB 的 data Packets 大小就是 0x40 (64 bytes),USB 1.1 的

規格啦。它乾脆就從 1 到 64 就全宣告了,反正以後用得到?或用不到?軟體以後

再說吧。既然要用HID Class 了,那也就配合每一個長度資料,配上每一個固定的

Report ID,而每一個都支持 Interrupt IN/OUT。



不過呢?原廠也不是笨蛋啦。(所以我常常開玩笑說:有時候看到人家搞的東西

也真的不用笑人家,尤其人家是國際大廠時,人家做事情也不會像我們這些

小眼睛小鼻子的公司的這一種搞法啊,這也是我們從這些產品的分析與探討中

可以看到的內容。)

它在最一組宣告中,尤其是保留一組支持 Feature 的介面,這個就可以拿來做為

Interrupt IN/OUT 以外,還可以支持 Endpoint 0 中的 Set Report/Get Report 的內容。

所以在原廠的程式中,它沒有支持長度大於 64 bytes 的傳輸內容。這樣子其實是可以

簡化USB 韌體的複雜度,效能可能差一點,但系統與軟體維護上就比較穩定單純

多了。(如果你有搞過USB 系統的話,就應該能體會到我這一種觀察與說法。)

以下就是一個明顯的範例了:


看到沒:上圖就是一個針對 Report ID 為 0x40 的 Set Report 之資料傳輸。

而緊接的下面是一個 Report ID 為 0x01 的 Interrupt IN。及一個 Report ID 為 0x03

的 Interrupt OUT。所以大家可以看得出來,只要你如何懂得 USB 基本宣告與

軟體與韌體之間的交互操作,其實在系統使用上,真的蠻得心應手與方便性的。

這一點真的不是以前那一種 串列 RS232 或並列 Printer Port 那一種方式,而這一點

也不是那個 RS232 轉 USB (CDC)那一種作法。

好了,我們基本上已經看完原廠的東西了。

至於那個低價複製品呢?大致上跟上述的內容差不多,就有一項不一樣:


就是產品序號定義不同:EC600MCU123 。可能就是這個序號他們才稱它為 EC-6 版本。

但原廠真的找不到這個版本啊。

我想可能是這個序號可能是複製者自己改的吧。它可能也不知道原廠滾動碼(Rolling

Code)的含意,就乾脆一個固定序號搞定。所以我猜啦:市面上所有的低價複製品

應該全部用同一個產品序號。那這樣子有沒有其他延伸問題?

答案是:那這樣子就不能同時插在同一台PC 端上了,因為一般PC 軟體看到同一個

USB 的 VID/PID 時,它也會同時抓到,只是在打開USB裝置時,你就搞不清楚:

是選到哪一個埠(PORT) 了。

但我想會買這個東西的人應該也沒有這一種使用方式,也不會這樣子用吧。


而上圖是EC-6 的內容,那至於實際軟體運行下的資料內容是什麼?我想這只有

上層的應用軟體才有辦法解讀內容了,這一點我真的也沒興趣研究了。

反正人家在網路上賣這個東西時,那肯定在絕大多數的應用場合都可以用的,

否則也不會一直在販賣的,至於以原廠來看:也懶得去管它了,反正對他們來說:

複製品用的也是他們自己公司家裡的MCU,而他們原廠的EC-3 還是賣貴貴的。

我原廠賣一台賺得贏過你們賣好幾台,他們也覺得沒差啦。市場上還總是會有人

會堅持買原廠的,尤其是以正統的公司來說。至於一般玩家呢?要省這個錢,

也就沒有必要還要提供什麼FAE 或技術支援的。所以這個東西就會存在於

市場之中的。最主要的還是在於會使用這些工具的人多不多?是比較重要的。

用得多:那代表著他們公司自己的MCU 產品線使用的人口或工程師多,

那也很好啊,有人願意複製這個東西,那也不錯啊,那又何必去管他們呢?
---
所以啦~有很多東西或許換個技術以外的角度來看的話,那也許有著不同的

見解吧。也供給大家參考一下。

謝謝你的閱讀。下回見。







4 則留言:

  1. hihi, 超久沒來來閱讀您的blog了. EC3是小白, EC5應該是tool-stick的debug小板, 印象中只支援c2介面吧. 很EC6, 我也沒印象. 久很久以前就在大陸論壇上找到bin file, 自己也做了一批debug + evb(F340), 不過沒對外販售, 自己使用或是送給朋友玩.

    回覆刪除
    回覆
    1. 哇~真的好久沒聽到你的消息了。你還是兩地奔波工作嗎?

      我認識貴司的人早在N 年前就已經轉換公司,而且還不只轉換一次而已。加油喔。
      ---
      非常謝謝你所提供的相關資訊,@柚子以前就是該原廠的通路商工程師。

      以前那一種作法以現在市場分為來說:根本是小巫見大巫了,

      一來大陸市場與玩家大量興起,二來網路開放平台比比皆是,

      再加上網路銷售平台普及(淘寶、露天等),這一類產品生意已經算是俯拾即是了。
      ---
      昨天深圳老友跟我通微信(因為他根本無法出門的關在住處)。也跟我說:

      現在在大陸搞MCU 就根本就是買了版子或MCU,然後從大陸CSDN 抓範例程序。

      搞一搞就交差了事,所以搞MCU 就看網路開放源的資源來決定了。

      還跟我說:現在一顆 STM32F103 一顆就 4.~RMB,就算大陸的GD32 也只便宜不到幾毛錢。

      這個市場已經打到這一種地步了。從市場角度來說:也已經幾乎沒有技術討論空間了。

      這是很現實的市場問題。

      --- 當這些老外公司(尤其是IDM廠)也懂得殺價競爭時,趨勢你也無法擋啊。

      刪除
  2. 我找到webUSB api,看來它未來發展不錯
    https://kknews.cc/zh-tw/code/9map99l.html
    然後又找到了使用網頁做firmware的範例
    https://devanlai.github.io/webdfu/dfu-util/
    因為手邊工具有限,沒有測試。但PC上可以用的話,手機可能也有機會用。
    這樣下去,USB裝置有可能不用寫驅動程式? 不知我的理解是否對?

    回覆刪除
    回覆
    1. 我想從Arduino 這些所謂的 Open Source 平台大量出現後,

      一切就想走向簡單套用的模式,就像Python 搞USB也是,

      都有現成的模組可以讓你套用,只要你底層掛上他們為你搞定的一切就可以了。

      這沒有不對,對許多人來說:也不用花心思去學這麼多Detail 的東西。

      但相對的就是包袱大,風險問題...這就跟搞毒品一樣,可以讓你一下子可以忘卻

      所有的煩惱。但如果:真的如果產品需要一個比較精簡高效率的東西時,

      那就又考驗著許多人的基本功力了。

      老外搞這些,肯定是沒多大問題,反正他們只要把大原則,一個想法實現就好了。

      至於未來還要精簡或 Down Cost 的事,那就在丟給你們老中就好了。

      如果我們這些老中公司,不管是接代工或產品開發,不要一天到晚想削價競爭的話,

      我想這些做法也都可以的。但偏偏事實上卻很難如此"比照辦理"。

      到頭來,老闆還是希望你用比較精簡,可以大大降低成本的做法。

      這些文章或作法,只會讓老闆胡思亂想,一天到晚跟你說:人家不是這麼簡單的做法嗎?

      你們怎麼會搞這麼久呢?那又為什麼又要加硬體、又要搞甚麼後台?雲端的呢?...

      最後只會玩死自己,而偷偷在背後笑的:還是這些檯面上的國際大企業。

      刪除