2017年3月15日 星期三

好書推薦: EXPLORING BEAGLEBONE

講到現在時下最熱門的開發板,很多人可能馬上想到 Raspberry Pi,不過 RPi 好歸好,如果作為商業用途會碰上一個問題:Broadcom 除了 RPi 基金會,不對外販售 RPi 使用的 SoC

一個解決方案是請 element14 ODM,不過別忘了台灣廠商的專長就是硬體設計生產製造,如果請 element14 設計代工,那我們吃什麼?只玩上面的軟體?這好像有點難喔...

所以「接地氣」的不是 RPi,反而是比較不紅的 BeagleBone Black(後面簡稱 BBB),因為 TI 與 BeagleBoard 組織的關係不像 RPi 基金會與 Broadcom 那麼緊密,上頭使用的 SoC - AM335x 有對外販售,台灣也有代理商。事實上不少公司已經採用這顆作為產品開發了。

也就是說你想學習 Linux Device Driver,並且以此作為專長求職的話(這裡指台企),BBB 會更接近目標,而且 TI 100% 對外開放 source code,RPi 並沒有這樣做,就筆者所知,有部份的 driver code 只有 binary 版本。

今天要介紹的 EXPLORING BEAGLEBONE 就是一本好書,好在哪裡?



首先他採用的程式語言是 C/C++,很多介紹 RPi 的書用的是 Python,也不是說 Python 不好,而是真實世界很少看到 Embedded Linux 產品開發使用 Python 作為主力語言。而且不用筆者提醒大家都知道,C/C++ 存取硬體實在是要比 Python、Node.js 方便太多。

第二,他對常用硬體元件的介紹足夠、而且深入淺出,什麼是 CMOS, TTL?fan-in fan-out、上拉下拉電阻、photo coupler、ADC...像是筆者之前有些懵懵懂懂的 Open Collector & Open Drain 居然靠這本書弄清楚了。

第三,有提到 Device Tree(DT),Kernel 3.7 之後對於硬體描述的部份被抽離出來改用 DT,雖然這本書只有用 Device Tree Overlay(DTO) 做一些簡單的應用,但對於有心想要學習 Device Driver 的人是個很好的開始,而且 BBB 本身也是用 DTO 管理第三方硬體模組。

第四是 AM335x 的強項 - PRU,因為 Linux 不是 RTOS,就算你打上 RT patch 也是有其極限,比方說你想做出 PLC 那種每個指令都有精確執行時的 Ladder,或是想產生非週期高頻信號,在不借助硬體的情況下,user mode 幾乎玩不出來,kernel mode 玩死 RD。

所以過去的解法就是外掛一顆 MCU 做即時信號處理,比方說以前筆者用過的那顆 FxxA,中間再透過 SPI、Dual-Port Memory 完成雙向溝通,而 ARM 這邊就負責完成複雜的 TCP/IP 網路功能與影像處理等運算。

過去從 MCU 轉戰 Linux + ARM 的人也是為此爭論不休,覺得為何無法像以前一樣用低階的方式精準控制 GPIO,Linux 太爛了 @#$#%^&...

AM335x 提供了解法,在 SoC 內建兩顆 200MHz RISC CPU,稱為 PRU。一槍斃命上述所有問題,也不用面對老闆的質疑為何要多掛一顆 MCU 增加成本,而且可以動態由主 CPU(Linux) 這邊載入 firmware。

這個功能有多嗆呢,要知道那個 FxxA 就是號稱可以分配 CPU 核心,用軟體實作 I2C、SPI、UART...這下你有兩顆 200MHz CPU,你就可以實做出很多原本 SoC 沒有內建的功能,除了前述那些功能外還可以做超音波控制、無刷馬達控制、正弦波產生器...怪怪簡直嚇死人。

這本書在前面用 poll() 示範給你看從按下按鈕到 LED 點亮需要 327us 延遲,最後用 PRU 只要 30ns,能說不嚇人嗎?

另外這本書還提供了網站,針對各種議題還有補充資料,基本上 CP 值逆天了。

光靠這本書當然無法讓你成為 Embedded Linux 大師,但起碼可以幫助你從業餘跨入職業,不再是玩玩而已

BeagleBoard 其實也是開源硬體的先驅之一,早在 RPi 還沒出生前就有人把 Android 移植上去(如名人 jserv) ,不過可能因為價格高昂一直乏人問津,但後來面對 RPi 等後起之秀不斷生產各種物美價廉的開發板,像最新的 BeagleBone Green 已經只要 1300 台票了,與 RPi 相比毫不遜色~

3 則留言:

  1. 按讚。

    http://goods.ruten.com.tw/item/show?21717015775283

    回覆刪除
  2. 請問PRU的功能是否也能用外接arduino的功能達成?
    比如說我只有樹莓派,但接上arduino後也能即時信號處理?
    謝謝

    回覆刪除
    回覆
    1. 當然可以,而且很多商業產品也是這麼幹-->只要兩顆CPU間的通訊界面(UART,I2C,SPI,Dual Port Memory...)其速度可以滿足您的需求。

      MediaTek LinkIt Smart 7688 Duo 就是這種設計,中間用UART通訊,不過缺點是你就少了一組UART可以用

      刪除