2018年10月2日 星期二

USB DIY--自學計畫_USB新平台(一)

各位網路朋友好久不見了。很多人一定很好奇地想問:版主最近忙甚麼啊?

有許多事情都是說來話長,有機會再慢慢分享給各位。人生處處有驚奇嘛。

但首先還是把這標題事情先交代一下。這也是我最近花一點時間著手進行的一件事。

有時候真的覺得去追求不同領域的新知,倒真的不如有系列的在某個領域深耕。

畢竟上了年紀,不管體力或耐力都不比年輕人有衝勁。還能夠找到一些能讓自己

還能靜下心來,好好地坐在工作檯前專注的作一些事都誠屬不易了。

之所以能有這一次因緣際會地再摸一顆新 USB MCU 也算是一個機緣吧。

我之前在講所謂的 USB DIY系列的東西,都是採用Silicon Labs 的C8051F32x 系列的

USB MCU。這一顆USB MCU 也算是一顆成功之長青樹。倒也不是他在MCU 的應用

領域裡多有名,而是原廠採用這一顆MCU 發展出一套 USB 轉UART(RS232) 的CP210X

系列的MCU ,算是一個非常成功的產品策略。目前在USB 轉UART(RS232) 產品市場上

比較高階及有名的就屬 CP210X 及 FTDI 的 FT23xx 。至於以前台廠的產品已經逐漸被

大陸相關產品所取代了。但都還是在一些低階市場裡流血競爭。

話說能應用標準MCU 發展出系統公版,已經不容易了 (像 Atmel 的 Arduino ),若還能

用標準MCU 發展出另一個市場標準 IC 那的確不容易。這也大概是我們這些搞MCU 應用

的人偉大夢想吧。或許,有機會你也可以試試啊。 這不單只是一個技術領域的專注,

還牽涉到備貨與庫存的市場操作。如果你有自己搞過公司,賣過產品你就會懂得。

但因為C8051F32x  這一顆MCU 是屬於比較"舊"的製程IC,所以在效能或製造成本上

比較難具有未來市場競爭性,所以原廠後來在新一代的IC 製程上推出了新一系列的

8051 MCU。以原廠的編號來說:就是EFM8 系列。(以區隔ARM Base 的EFM32)。
///
這是這一次的EV 板子:SLSTK2000A



上圖是原廠所提供的驗證開發版。感謝代理商大志科技所提供的。(借的~)
------
Silicon Labs 算是蠻有心的在傳統 8051 MCU系列產品上,利用新一代IC 製程再一次的

延續傳統 8051 系列產品。倒也不是說 8051 的MCU 會多競爭力,台灣大陸一大堆MCU 的

IC 設計公司也都有相關的產品系列,但這些公司還是以很單純的產品完善的觀點來

處理 8051 系列產品。沒有在相關產品特色上多花一點心思來處理市場區隔的問題。

那你一定會問我說:這是你們這些LKK 的人還在用 8051 ,人家年輕一代的嘛都在用

32 bits 的ARM 了。其實我也贊成這樣子的說法,我也這麼認為的。

但很不幸的是,以下是我小孩子這學期的課表:



其中那一門 "微處理器系統實驗" 用的還是8 bits 的 8051 。

不過,換個角度想:以實驗課程來說,畢竟8 bits 的 8051 一個成熟又是"蓋棺論定"的

產品。至於 32 bits ARM 系列來說:應用市場太廣太複雜了,重點還是在於 32 bits 是

一個系統平台觀念,而不是微處理器系統觀點。所以對學校老師來說也對啦。反正

看看其他的課程,應該還是有其他的系統平台的課程。學生嘛,多學多看嘛。
----
我們在回頭看Silicon Labs 新一代的 8051 MCU 有甚麼不同之處?

其實最主要不同之處:當然就是配合新世代 MCU 開發平台觀念了。這也是目前幾乎

所有MCU (包含 32 bits ARM 或其他 MCU ) 的標準開發平台。過去這幾年我也有採用

另一顆車用 32 bits MCU 的開發平台也都是長成這樣子的平台。(就是  Eclipse 4.5 這一套)

Silicon Labs 的整合開發平台為:Simplicity Studio 。不好意思,其實我早在N 年前就安裝

過 3.0 版的。也是一直採用這一版。只是不是很熟練,後來使用另一家車用 32 bitsMCU 廠

的開發平台版,才真正地一路下來熟悉這樣子的開發平台,這也真的回不去了。

這樣子的開發平台不單只是開發平台環境而已,最主要的還是在原廠所整理處理的

各種跟底層硬體有關的暫存器副程式。在利用 Code Generation 方式來建立開發環境平台。

關於跟底層硬體有關的暫存器副程式這一種觀念,早在十幾年前我在IC 設計公司從事MP3

SOC 開發時,就已經接觸過了。下圖就是我們當初的底層函數庫,包含了各種記憶卡的存取

外加DOS Files system 的平台。


就是在公司內,由另一組驗證 IC 也同時要利用暫存器把所有跟IC 硬體有關的東西給建立起來

然後再由其他系統應用端的工程師們,利用這些底層的函數庫給拼湊應用系統。

這一般都是比較複雜或比較大的系統才需要如此這般的分工。但隨著現代硬體與軟體技術的

進步,當然啊~原廠也是為了能夠順利快速的推廣他們家的MCU ,所以也就不用再讓客人

K 了一大堆硬體資料,再隨著系統慢慢地一點一滴地建立起來,所以如此這般的開發環境

也就越來越常見了。想當然爾,工程師們也就慢慢的多一點軟體技術,少了一點硬體系統

觀念了。這樣子也不知道是好?還是壞事?見仁見智吧。
----
下圖就是我們這一次所採用的 Silicon Labs 的 EFM8 University Bee (UB1) 的開發環境:


其實,這一版 UB1 的USB 控制部分,大致上跟舊版的C8051F32x 是差不多的。

只不過,他們現在以標準函數庫的方式打包了底層跟硬體暫存器有關的函數庫,

如果你還是有點轉不過來的話,你還真的以為他是一顆全新的 USB MCU 呢。

他這一版的USB 硬體跟舊版C8051F32x 的USB 控制器最主要不同之處,是他支援了

USB 充電模式硬體偵測模式。純粹偵測而已。至於如何控制充電,不好意思,你要自己寫

系統應用。不過隨著市場上充斥著各式各樣的 USB 充電器 ,這樣子功能支援已經不錯了。
---
雖然原廠已經幫你打包了USB 底層函數庫之後,意思就是不希望你可以不用動到他底層的

函數庫,然後你就可以很快的上手。但很不幸的是:在我這一次Demo 應用範例時,我還是

略做修改了底層函數庫,這是因為我是要做一個簡單 Vendor Defined HID。在系統應用上

針對著不同的需求而略為修改。

其實原廠的範例都是標準的滑鼠及鍵盤的使用,雖然他是用高速HID 來做,但還是不脫

標準的 Low Speed 的 HID。簡單來說:他原廠的範例程式是利用USB SOF 來做為系統同步

基準。只是在USB 系統中,SOF 是每隔 1 mSec 會發一個中斷,這樣子真的很麻煩。

所以我還是重新改寫了。主要改寫的部分還是在於 Endpoint 1 的 In Token 與 Set/Get Report

上系統Access USB FIFO 會衝突的問題。這一點在舊版C8051F32x 的範例程式有處理,新版

的底層函數庫沒有處理。這也就為什麼還是要稍微改寫一下底層函數庫的原因。

另外,我在HID Class 的 Descriptor 上就盡量簡化宣告(上圖右邊),讓系統驗證簡單一點。

這樣子一來 PC 端的應用軟體就可以簡單一點。不清楚地可以參考之前的文章:

USB DIY-- 自學計畫(十一) 


不過,說起來慚愧。連我自己有時還是得再回頭看看自己寫過的東西,所以大家有空趁

自己還年輕,花一點時間多為自己留下一些東西吧。以免東西學多了,舊的就全忘光了。

這一次我沒有宣告所謂的 Report ID ,雖然簡單,但還是碰到一些問題。所以人家在規範中

為什麼還是定義了這個 Report ID ,因為在系統應用上你終究還是同一組資料傳輸中來區隔

不同的應用命令或資料,所以利用 Report ID 也是一種選項,而且我在PC 的 Microsoft 系統中

發現:其實作業系統中,不管你有沒有採用 Report ID ,Microsoft 的底層還是會處理這個

Report ID 的。等你碰到這個問題時,再來問我好了。
---
一般來說:USB 的應用除了底層函數庫外,最主要的就是USB 的產品宣告及系統應用程式。

原廠提供的開發平台就會以兩個副程式來定義:descriptor.c 及 callback.c 。(上圖左邊上方)。

----

這一次要簡單 Demo 範例是要用 USB Vendor HID 來控制 WS2812S LED 燈條。

所以還是免不了要寫個簡單PC 應用範例程式,我用的還是在USB DIY-- 自學計畫(十一) 

文章的範例程式所改寫的。你看現在USB HID 多成熟啊,連換到 Win 10 的平台,

這支 2001 年的 HID.lib 還是很好用,也沒啥相容性的問題。


這個程式就是很簡單的一方面一直收 HID 中的 Endpoint 1 的 Interrupt In Token 資料。

另一方面可以隨時透過 Endpoint 0 的Setup Token 下 Set Report。所以大家就可以看到

我們可以利用RGB 三色設定來控制 WS2812 燈串上的LED 燈。(當然我們也可以請

UB1 MCU 將收到的 Set Report 上的參數透過 Endpoint 1 的 Interrupt In Token 回傳給

PC 端的應用程式,只不過我發現PC 上的顏色設定與LED 燈光看到的,還是有落差。

雖然在控制上可以做到 256x256x256 的顏色控制,但人的眼睛還是很難區分的啦。

不信你可看一下影片:



-----

---
另外在這一隻範例程式哩,最重要的一個重點是:因為希望未來能夠隨時增加LED

控制數量,所以在 Endpoint 0 的 Set Report 的傳輸資料長度可以超過 64 bytes。所以

這個就需要以多組 Setup-Out-Out-Out...-Null In 來完成了。這個對PC 端來說簡單,

但對USB MCU 端就要分別處理。不過,原廠所提供的底層函數庫也有支援,

只是你真的要會稍微研究一下這些函數庫的使用。說得很容易啊~只是那是因為我以前

已經有用過舊版的 C8051F32x ,所以看起來還蠻駕輕就熟的。萬一你是新手,然後

也沒有多少傳統MCU系統觀念,然後就看著這一大堆明顯就是以寫軟體觀念的人所架設

的函數庫,可以真的會讓你一時抓不到重點。下圖就是我們從USB 分析儀看到的

Endpoint 0 的 Set Report 的傳輸資料內容:


-----
好了,我已經交代完畢了。

我為什麼要花時間來進一步熟悉新一代的USB MCU?很簡單,因為原廠說:

新的USB MCU 肯定會比舊的USB MCU 便宜。而且資源越來越多,新的USB MCU 比舊的

還多出 SPI 及 CRC ,重點還有兩組 UART。(因為新的製程,可以在塞進更多東西。)

那你說:你要不要換?這就是時代在進步,你也不得不跟著調整。

重點還是在於新的開發平台環境工具,我在想:既然我都已經轉換到這樣子的開發平台了,

我是不是也該拿一顆普羅大眾所歡迎的 STM32 也來玩一下 USB Vendor HID ?

唉~這個就是搞工程很無奈的地方。不過幸好的是:已經上了年紀,也碰過不少產品,

市場也跑過不知幾圈了,現在比較可以做到"動心忍性"。不會一天到晚看到甚麼?

就覺得甚麼東西都可以做,自己可以拿捏甚麼東西可以碰,甚麼東西就不要碰了。

這樣子生活與工作才能相得益彰,多一點愜意少一點煩躁。

至於還可不可以賺到錢?那就隨緣而遇了吧。


8 則留言:

  1. vendor HID 在有些公司想做就要兩個部門的合作,(專門搞軟體的和搞FW的),偏偏現在甚麼變軟體定義了,所以廠商漸漸希望你用公版FW,那只要做純軟就好

    事實上純軟沒有USB基礎,實際應用上會產生似懂非懂的情形,現在有真功夫的人越來越稀少的感覺啦 (老闆似乎也不怎麼在意...)

    回覆刪除
    回覆
    1. 我跟你說:我在一年多前碰到一家IC 設計公司,要搞個鍵鼠合一的IC。

      這個還是標準的HID ,理論來說:應該就是照表抄課而已。但你知道嗎?

      這一顆USB MCU 搞了 N 年,還沒搞定。為什麼?因為就你說的:除了IC 設計者外,

      還要驗證IC 還要搞定韌體,還需軟體的人協助寫個測試驗證軟體。但你知道嗎?

      這要幾個人?然後現在能跳出來搞定系統的人有幾個人?老闆每周,每個月甚至每季Review 。

      答案就是沒人。就是沒人。

      我寫這篇文章用的,還是已經是標準市售量產的USB MCU 了。

      更不用說那個連MCU 到底還做對不對都不知道。你說那怎麼辦?

      後來連唯一一個系統工程師也離職了。那以我當顧問的人,也能跟老闆說:就請你自求多福了。

      所以當你看到這樣的文章時,不要以為天下的東西只要動動嘴吧,就可以一切搞定。

      那我們以前花這麼多時間是幹甚麼吃的?

      放心好了,這個絕對不會是最後一個案例。這種故事天天上映著....已經看怪不怪了。

      刪除
    2. 這件事真的蠻有趣的,既然老闆很在能不能出貨,一天到晚在review,但真功夫的人變少,老闆也不在意...

      看起來頗矛盾,也許要跳出工程師思維才能理解

      刪除
    3. 其實你也不能怪老闆啊。

      以前有股票分紅,不管公司大小,總是有個夢想嘛! 就算沒上市櫃,總也有希望嘛!

      但現在環境不同了,一來沒有員工分紅,二來要能隨隨便找個產品或IC 能搞到市場有量,

      然後在帳面上單價毛利又要很亮眼,真的不容易啊。

      所以:對於許多新創公司或是一直搞不大的小公司來說,真的不容易找到好的人啦。

      尤其是那些已經有點錯過新創公司階段的蜜月期後,(就是員工還比較有願景衝勁階段)

      幾乎都會面臨這一種公司文化的惡性循環。一來找不到人,二來大家也都兩手一攤,

      你叫老闆怎麼辦?自己跳下來寫韌體,寫程式DEBUG ?就算他願意,他也未必有那個能力啊。

      所以這已經不是甚麼工程師思維的小問題而已。而真的是:一開始就沒有足夠的工程師素養,

      視野也不夠寬廣的,對願景也過於樂觀與自己,這也有可能如你所說的:太過於工程師思維。

      ----
      其實,我跟幾位老闆或有經驗的人聊過:如果能把握創業的黃金階段,只要守著好好的小生意,

      能夠自立自強的掌控產品的一切關鍵技術,也是能長治久安的。

      不過,當你當過老闆,然後又是從別人身上募資的,(就是一堆五四三的股東董事),

      其實也不容易啊。所以我也常說:還是得多看多學多思考。尤其是技術以外的東西啊。

      刪除
    4. 老闆下來搞韌體debug當然不靠譜,除非是那種Lab型的公司,老闆自己就是RD leader

      以小弟的經驗來看,老闆review時就兩個指標:
      1.愛將的意見
      2.客戶意見
      假如客戶意見與愛將的意見相左時,老闆要相信誰?要是愛將說這是客戶的問題不是他的問題,老闆會怎麼抉擇?這又回到前面講的,老闆沒有足夠的專業去分辨誰對誰錯,然後這件事於是就惡性循環沒完沒了的下去

      就算後面找到好的人,他夠聰明也知道不能得罪老闆的愛將,反正自己也是來混口飯吃的,現在也沒股票分紅,何苦冒著得罪人的風險,不如大家一起混,先顧好小孩的奶粉錢跟房貸,反正火不要燒到我這就好

      而且就算找到好的人,好的人要是跟老闆說對不起要砍掉重練,老闆搞不好還不肯,說不定還覺得你這人不專業,於是人來來去去n個...東西修修補補n次,東西時好時壞

      刪除
    5. 你已經點出科技公司職場上的標準生態了。

      其實這就得看老闆對於"愛將"的定義了。

      如果是第一點:不能得罪老闆的愛將,那我覺得那就不算是好的愛將的,因為你沒聽過:

      愛之足以害之嗎?如果愛將只是迎合老闆而不願意得罪他的話,那結果大家也都知道:

      最後倒楣的是誰?產品或市場搞不起來,你這位愛將也不用幸災樂禍,最後愛將會慢慢的發現:

      會慢慢地失去老闆關愛的眼神了。除非老闆是佛心來著,對這樣子的結果也可以睜一眼閉一眼的話

      那公司的未來也不會是你愛將可以長居久安的地方。覆巢之下無完卵。其實這是一個非常不好的

      公司文化,如果有技術又是老闆愛將也都如此,那更不用說其他員工的心態了。

      明朝是中國歷史上宦官囂張的年代,但也同樣的代表著:宦官在失去皇上關愛的眼神之後,

      下場都不好。有所謂的"愛將"這就代表著老闆是用個人感情做事,這就有公司文化偏頗的風險了。

      至於如果公司內的人來來去去,卻無法有效地把問題收斂掉,那還是得看老闆自己的心態與決心

      了。因為有時候市場是不等人的,員工是來領你薪水的,反正老闆你賺錢也未必會拿出來分給我,

      那問題還是你老闆的問題。

      所以當我們在探討這一類的問題時,你就得不得不思考國外那些所謂新創公司的模式:

      用新技術開公司,並不代表著要永續經營,技術人員也不要過度的期望長長久久的長治久安。

      因為好的產品或技術可以被收購的,當她被創造出一定的亮眼的績效之後,往往這些新創員工

      本來就是應該拿了應有的報酬之後重起爐灶,去尋找新天空與新天地。因為這些創新員工本來

      就是擁有特殊的高人一等的技術與創新動能,整個產業本來就是需要一票的人員帶頭往前衝。

      但我們台灣的公司很奇怪,買了或合併公司之後,不願意付出高額的報酬與代價,反而以

      長期的合約約束這些員工,結果最後不但扼殺這些員工的機會,也反過來造成公司內部文化的

      衝擊。所以國內合併或收購公司的績效往往都不如國外公司,也造就整個產業合併與收購的

      負面形象。或許這就是國內技術人員發展的環境不良因素之一吧。

      刪除
    6. 從歷史或許可以看出一些端倪,在清朝時人民學外語或是洋人學中文是要治罪的,皇帝的想法就是如果人民會外語就會跟洋人勾結,洋人會中文就會跟人民勾結。據說到鴉片戰爭後才解除這種荒繆的限制。更別說明清時還有海禁,小弟猜想這些文化DNA多多少少遺留到了現代...

      刪除
    7. 其實這是一種海洋文化與大陸文化的差異。

      一樣華人的世界,你看過去的香港、台灣與新加坡等。再面對世界以海洋文化的心態出發。

      都可以在世界上創造不錯的成績。

      但你看近年來,香港在回歸大陸,慢慢依附在大陸之下,慢慢就失去了它原本活潑的經濟文化。

      台灣也是,目前就只剩下新加坡還保有這樣的環境。

      所以許多經濟或國家發展還是得從歷史文化背景去研究。就跟我們進一家公司,也是跟著

      老闆或公司文化在走,甚麼老闆、或公司文化,很快就大概知道後續發展了。

      這當然不代表著公司不好或怎樣,本來一樣米養百樣人,怎樣的人適合怎樣的環境,

      都有一定的相互關係。所以也不用太刻意在乎,只是對自己來說:最重要的還是要了解

      這其中的關連與道理的。

      人生在世短短幾十年,也沒甚麼好爭辯的。自己活著快樂自在最重要。這也是我最近的心得。

      刪除