1. 程式人生 > >Zephyr OS 基礎篇: 連線硬體 Arduino Due

Zephyr OS 基礎篇: 連線硬體 Arduino Due

Zephyr OS 所有的學習筆記已託管到 Github,CSDN 部落格裡的內容只是 Github 裡內容的拷貝,因此連結會有錯誤,請諒解。

本文主要介紹如何將 Zephyr 的程式燒寫到硬體 Arduino Due 中。

前言

本想著 Zephyr Project 提供了 QEMU 模擬器,因此不需要再買硬體,但後來發現自己錯了,因為模擬器實現的功能很少,甚至連 GPIO 都沒有。然後到官網檢視 Zephyr 支援哪些板子,最終選定了 Arduino Due,原因只有一個,便宜。淘寶 50 大洋。

以 Ubuntu 為例。

Arduino Due 硬體介紹

這裡寫圖片描述

從淘寶買回來,一共保護兩部分:

  • 一塊如上圖所示的板子。
  • 一根 USB 資料線。

簡單介紹我們目前需要用到的三個地方:

  • Programming Port(程式設計埠): Arduino Due保護兩個 USB 介面,一個是原生 USB 埠,一個是程式設計埠。程式設計埠可用於燒寫 Zephyr 程式、給板子供電。
  • Reset(復位按鈕):復位。
  • Erase(擦除按鈕):擦除 flash 。

準備工作:安裝 BOSSA

BOSSA 是用來燒寫 Zephyr 程式的開源工具,託管在Github 上,支援 GUI 和命令列。這裡以命令列為例。如果你想使用 GUI,請按照該倉庫 README 中的指示進行安裝。

從倉庫檢出 bossa 的原始碼:

$ git clone https://github.com/shumatech/BOSSA.git
$ cd BOSSA

bossa的master分支不支援arduino,所以必須切換到arduino分支:

$ git checkout arduino

編譯

$ make bin/bossac

  生成的科執行檔案位於bin/bossac,將其拷貝到系統PATH路徑下:

$ sudo cp bin/bossac /usr/bin

燒寫程式

先編譯好 Zephyr 核心,生成的程式位於outdir/zephy.bin

$ cd samples/hello_world/nanokernel
$ 
make BOARD=arduino_due

將 USB 資料線的一端插入筆記本的 USB 口,另一端插入板子的 USB 程式設計埠,此時兩個 LED 燈亮。進入 Ubuntu 系統,執行命令ls /dev/tty*可以看到 dev 目錄下有一個叫做 ttyACM0 的裝置檔案。

將 ttyACM0 的波特率改為 1200,否則在後面使用 bossa 燒程式時會報錯No device found on /dev/ttyACM0

stty -F /dev/ttyACM0 speed 1200 cs8 -cstopb -parenb

按下 Erase 按鈕,220 ms 後鬆開。220 ms 很難把握,因此可以按久一點。

按 Reset 按鈕,此時板子會復位並進入 SAM-BA bootloader。

使用 bossa 燒寫程式:

sudo bossac -p ttyACM0 -e -w -v -b outdir/zephyr.bin

燒寫結果如下圖所示:

這裡寫圖片描述

開啟你的串列埠,選擇埠為 /dev/ttyACM0。按 Reset 按鈕進行復位,可以看到串列埠輸出的 hello-world。(注意,你需要在串列埠中將波特率設為 115200,而不是前面燒程式所設的 1200)

這裡寫圖片描述

注意事項:由於串列埠是獨佔裝置,所以燒寫程式的時候需要先關閉串列埠軟體再燒程式。

參考資料