Saturday, December 27, 2014

2014年終雜感

只是記下一些感想。

  • 今年就是爽。不用接大客戶的案子,也不用接小客戶的案子,只要好好搞定USB問題就可以。
  • 雖然沒甚麼進步,還是感覺有點強?
    • 台灣工程師還是不長進啊。明明問的問題文件內都有了,還是一直問。會這樣幹的還不只是ODM工程師,連品牌廠的工程師也是這樣,甚至連自己家的工程師也是這副德行。
    • 如果是第一次遇到一個問題就算了,同一個問題可以每個案子都問一次,真的很無言,學習能力是零嗎?
    • 不然就是直接問[為什麼HOST可以認到USB MSC裝置,隨便插個USB接頭就不行]。老大,你已經是經理了,撥出時間K一下spec會很難嗎?不然google一下也是一堆中文介紹。
    • 工作態度問題。台灣工程師的工作態度大部分有點鄉愿,像是:
      • 這東西沒文件是要怎麼搞?
      • 這個人跟我比較好,就不要去煩他了。
      • 問題解決就好。
      • 哎呀,這問題不用副本老闆了。
      • 搞不清楚[求]跟[要求]的差別。
    • 我認為正確的態度應該是:
      • 沒文件你要叫對方生文件,對方沒文件就是對方的問題。客戶會因為你沒給文件就放過你嗎?
      • 如果你可以自己搞定這個問題,當然不用煩對方。但是如果你也搞不定,有甚麼資格不去要求別人幫忙?
      • 想個辦法不要讓問題再次發生不是更好嗎?不然同一件事情一直發生大家會很高興嗎?
      • 副本老闆的原因是讓老闆知道有這件事情,萬一你請假的時候老闆可以指派另一個人幫忙。正常的老闆是不會管工程師的處理方式的,只要不要太誇張的話。
      • [求]是指讓對方去做原本不在他工作範圍內的事情。[要求]是指讓對方去做原本就在他工作範圍內的事情。台灣工程師常常會把[要求]當成[求],不但自己很委屈,對方的氣焰又會漸漸高漲。拿文件這件事情當例子,給文件天經地義,根本不用[求],如果沒文件,我是可以[要求]對方給出文件的。反之,把[求]當作[要求]的工程師也是有,這種工程師就很可憐,因為一直被凹,然後在老闆的眼中又沒業績。
    • 工作態度問題只能慢慢教,或是等本人自己領悟,我一開始也是很鄉愿,後來老闆的提點跟自己領悟之後就漸漸知道事情要怎麼處理了。

Tuesday, December 09, 2014

MCU以及SoC

這篇文章主要是由這邊 http://chamberplus.blogspot.tw/2014/12/blog-post.html 有感而發。

嵌入式系統包含太多了,我只能說chamberplus的重心一直都在MCU上面,他並不需要好的軟體人才,反而是需要有經驗的8051程式設計師。

話說回來,MCU跟SoC的差別在哪裡呢?

就我的認知,MCU基本上就是指8051。8051是由很簡單的CPU跟簡單的IO針腳所組成的,因為他是8-bit的CPU,所以能定址的記憶體也小。這個限制在今天似乎變成了一個缺陷:當整個系統需求越來越多時,如何讓程式碼可以維持在同樣大小,記憶體不用增加?

為什麼記憶體增加不可行?第一,會用MCU的廠商最大的考量就是成本,而增加記憶體對成本的傷害很大。另外就是8-bit CPU再怎麼增加記憶體就是只能用到256KB(有旁門左道可以增加到1或2MB,但是還是不夠用)。

你當然可以找很厲害的人來縮小程式碼,但是你要付多少錢給這個人?舉個簡單的FAT檔案系統好了,你要找到會FAT,又能夠用組語寫出小於100KB的程式的人,你覺得他值多少?而如果把條件放寬,會FAT,又能夠用C寫出小於2MB的程式的人,他又值多少?前者根本就是稀有財,而後者找個比較厲害的國立大學資工所畢業學生可能還可以做。說到底還是成本問題。

SoC基本上就是把CPU跟一堆周邊通通包進一顆晶片內。所以你要說單晶片,SoC也是啊?可是我看網路上,提到單晶片,大多是指MCU。SoC封裝的晶片大多比較高階,ARM11或是Cortex都有,重點是他們都是32-bit CPU,而且通常還有記憶體控制器。這表示可用的記憶體理論上可以到達4GB。其實不用到4GB,光是128MB就非常夠用了。這表示你可以有OS跑在這顆SoC上,而且你可以找到很多人幫你寫C程式,價錢又不會很貴。這時候老闆關心的是功能甚麼時候可以好,而不是程式碼有多小。

SoC看起來很好,那為什麼MCU還是風行?當然是價錢啦。一顆MCU可能台幣10元,可是一顆SoC可能要價美金10元。價錢決定市場,所以MCU大多是用在功能單一,價錢很敏感的產品上。而SoC則往往用在功能複雜,價錢較不敏感的產品上。

但是,這個趨勢有被打破的頃向,MCU越來越往SoC的方向走了,而且價錢還是一樣...。這當然是ARM積極介入的影響。畢竟有32-bit CPU的MCU可以用,誰會想用8-bit 8051 MCU。不過我個人認為這兩種東西還是不會匯合,理由還是成本問題。所以MCU的市場專注焦點還是[程式可以多小],而SoC的市場專注焦點還是[功能有多少]。

libusb

話說每個USB device在插上USB Host的時候,都需要一個對應的驅動程式才能正常運作。不要懷疑,連隨身碟都需要驅動程式的,只是每個作業系統都已經內建,所以一插上隨身碟就會自動載入,導致大多數的人都覺得,USB還需要驅動程式嗎?

現在假設你想要實作一個你自己的USB通訊協定,你搞定了USB device,那USB Host端的驅動程式呢?自己寫一個嗎?有這麼簡單嗎?如果你有google過Windows驅動程式要怎樣寫,相信你不會想自己寫一個的。

既然自己寫太麻煩,那就用現成的吧。libusb就是這類現成的驅動程式。libusb是開放原始碼,而且跨平台,還是泛用的USB驅動程式。因為它是泛用型的驅動程式,所以應用程式得透過它的API去跟你的USB device溝通,這邊就不講了。libusb的官方網站都有寫。

講到這邊,好像很簡單喔?如果你這麼想,那就錯了。雖然你不用寫驅動程式,但是你還是得跟作業系統講要在你的USB device插入時,載入libusb啊。光是這一點就卡死一堆人了,這邊我也不打算講要怎麼做,因為libusb的官方網站都有寫...。

就算解決驅動程式安裝的問題,還是有更多問題會產生,所以我不建議用libusb直接當作最終產品的解決方案,否則真的是人生就此陷入黑暗。為什麼我會這樣講,這是因為客戶永遠不會把規格寫出來,今天跟你說要支援Windows,明天問你能不能支援Linux,改天再問你MacOS行不行,永遠做不完啊。自己寫驅動程式也會面臨一樣的問題,但是你可以說沒人力,一旦用了libusb,不知情人士只會問[不是只要裝起來就可以動了?],事情如果有這麼簡單,你來?

所以啊,libusb拿來做一些小案子,或是學術性研究是很好用的,拿到市場上嘛,自求多福吧。

我遇過最盧的客戶,是跟他講可以用libusb確認他寫的USB device是否能夠正常動作。結果他連官網都不去看,硬是要人家教他怎麼把libusb程式碼編成執行檔,這樣他就可以直接確認,有沒有這麼懶啊?

codeblock