Arduino Nano 的 Bootloader

Bootloader 是 Arduino 開 機 時 會 自 動 執 行 的 小 程 式 ,它 的 主 要 功 能 是 接 收 由 電 腦 經 USB 發 送 過 來 的 程 式 ,並 把 程 式 寫 入 Arduino 的 儲 存 空 間 。

Arduino Nano 比 較 特 別 ,曾 經 推 出 過 兩 個 版 本 的 bootloader。一 般 就 被 稱 為 new bootloader 和 old bootloader。新 的 bootloader 佔 位 比 較 少 、上 傳 速 度 比 較 快 和 修 正 了 一 些 bugs,算 是 一 個 小 升 級 。

不 過 ,新 舊 bootloader 並 不 影 響 Nano 本 身 的 功 能 和 效 能 。同 一 個 Arduino 程 序 在 存 有 不 同 bootloader 的 Nano 上 執 行 並 不 會 有 什 麼 分 別 。

不 過 新 舊 bootloader 在 使 用 上 還 是 會 有 一 些 兼 容 性 的 問 題 。如 果 使 用 親 生 的 Arduino IDE 當 然 沒 問 題 。不 過 如 果 使 用 第 三 方 開 發 工 具 的 話 ,就 可 能 會 遇 到 問 題 。例 如 mBlock 3 就 只 支 持 old bootloader,而 mBlock 5 就 只 支 持 new bootloader。

在 某 些 比 較 罕 見 的 情 況 下 ,開 發 人 員 會 刪 除 Arduino 上 的 bootloader 以 把 儲 存 空 間 留 給 應 用 程 式 ( 例 如 某 些 3D 打 印 機 的 特 大 firmware )。也 有 一 些 情 況 刪 除 bootloader 是 為 了 加 快 開 機 時 間 。

在 沒 有 bootloader 的 情 況 下 ,我 們 要 更 新 Arduino 裡 面 的 程 式 ,就 要 靠 一 些 叫 做 microcontroller programmer 或 者 microcontroller burner 的 裝 置 。Programmer 可 以 用 把 Arduino 程 序 直 接 燒 錄 到 Arduino ( 不 經 Arduino IDE ),也 可 以 把 bootloader 燒 錄 到 Arduino。

不 過 有 一 件 很 神 奇 的 事 ,就 是 我 們 可 以 把 任 何 一 台 Arduino 化 身 成 為 Arduino 的 programmer。一 般 玩 Arduino 的 朋 友 手 裡 都 會 有 很 多 個 Arduino,所 以 不 用 購 買 額 外 的 工 具 ,就 可 以 自 己 燒 錄 Arduino 的 bootloader。

不 管 是 新 舊 版 本 的 Nano bootloader,都 是 可 以 自 行 燒 錄 的 。所 以 你 可 以 把 舊 版 Nano 升 級 成 新 的 bootloader,也 可 以 把 新 版 Nano 降 級 成 為 舊 的 bootloader。

但 在 升 級 或 降 級 之 前 ,首 先 要 知 道 手 上 的 Arduino Nano 究 竟 是 新 bootloader 還 是 舊 bootloader 的 。方 法 其 實 很 簡 單 ,我 們 只 要 使 用 新 版 的 Arduino IDE ( 1.8.6 或 之 後 ) 就 可 以 。

在 Arduino IDE 隨 便 打 開 一 個 example ( 一 般 會 用 Blink ),然 後 在 Tools > Board 選 取 了 Arduino Nano 之 後 ,就 會 見 到 Processor 選 項 。三 個 選 項 之 中 ,第 一 個 就 是 new bootloader,第 二 個 就 是 old bootloader。第 三 個 是 更 舊 版 的 Nano,今 時 今 日 應 該 無 乜 人 用 ( 亦 應 該 買 唔 到 )。

然 後 就 可 以 按 Upload。一 定 要 選 對 Processor ( 亦 即 是 bootloader ),upload 才 會 成 功 的 。所 以 只 要 在 Arduino IDE 選 擇 不 同 的 bootloader 再 試 試 能 不 能 成 功 upload,就 可 以 知 道 自 己 手 上 的 Nano 是 那 一 個 版 本 。

如 果 想 用 Arduino 做 programmer,就 要 把 ArduinoISP 程 序 上 傳 到 Arduino 主 板 。這 個 程 序 是 Arduino IDE 自 帶 的 ,在 File > Examples > 11. ArduinoISP 就 找 得 到 。ArduinoISP 也 是 一 個 普 通 的 sketch,只 要 按 照 正 常 步 驟 上 傳 到 Arduino 就 可 以 。

Programmer 其 實 用 什 麼 Arduino 主 板 都 可 以 ,比 如 說 Uno、Nano、Mega 等 等 都 可 以 。建 立 好 Programmer 之 後 ,就 可 以 開 始 燒 錄 bootloader。接 線 圖 中 的 Target 就 是 我 們 想 要 改 變 bootloader 的 Nano。

在 正 式 燒 錄 之 前 ,我 們 要 在 Arduino IDE 先 做 一 點 配 置 。首 先 ,亦 是 最 重 要 的 ,是 要 把 Tools > Programmer 設 定 成 Arduino as ISP。然 後 ,就 是 選 擇 Target 所 想 要 燒 錄 進 去 的 bootloader。如 果 想 要 舊 bootloader,就 選 ATmega328P (Old Bootloader )。如 果 想 要 新 bootloader,就 選 擇 ATmega328P。

確 定 選 擇 妥 當 之 後 ,就 可 以 按 一 下 Tools > Burn Bootloader。因 為 bootloader 是 很 小 巧 的 一 個 程 式 ,所 以 燒 錄 時 間 應 該 是 很 快 的 。如 果 成 功 的 話 ,就 會 見 到 「Done burning bootloader」。

如 果 見 到 錯 誤 訊 息 的 話 ,那 最 大 的 可 能 就 是 接 線 接 錯 了 ,或 者 是 線 沒 有 接 好 。建 議 你 再 三 檢 查 每 個 針 腳 的 接 線 ,還 有 就 是 檢 查 接 線 有 沒 有 訊 號 、通 不 通 電 。

Arduino as ISP and Arduino Bootloaders

開 於 燒 錄 bootloader 的 詳 細 訊 息 ,可 以 參 考 上 面 的 官 方 文 章 。學 會 自 己 燒 錄 bootloader,就 不 用 再 擔 心 新 舊 版 本 Nano 不 兼 容 的 問 題 了 。

如 果 因 為 某 些 原 因 需 要 大 量 或 者 經 常 性 燒 錄 bootloader,也 可 以 考 慮 買 一 個 arduino 專 用 的 offline burner ( 離 線 燒 錄 器 )。不 過 它 裡 面 的 究 竟 是 新 bootloader 還 是 舊 bootloader,我 就 不 得 而 知 了 。

ctleung張先生,男性,肖龍。
職業:I.T. Consultant
簡介:不好好讀書;七尺差五寸,手長過膝,雙耳垂肩;性寬和,寡言語,喜怒不形於色。據說少時曾斬白蛇於鳳凰山下……

This entry was posted in STEM and tagged , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published.