# AVR / Arduino Uploader

> 從瀏覽器把編譯好的 .hex 上傳到 Arduino Uno、Nano、Pro Mini 或 Mega —— 走 Web Serial 的 STK500，含寫入後逐位元組讀回比對與 fuse 讀取。不必安裝 avrdude。

- URL: https://bytescope.dev/zh-Hant/avr-uploader/
- Locale: zh-Hant · Also: [en](https://bytescope.dev/en/avr-uploader.md) · [ja](https://bytescope.dev/ja/avr-uploader.md)
- Runs: 透過 USB 在本機和你的開發板對話 — 你放進來的 .hex 和讀回的位元組都不會離開你的瀏覽器。
- Requires: Chrome, Edge or Opera on desktop (Web Serial API). Not Firefox, Safari or any mobile browser; the page still renders the documentation and a support matrix there.
- Updated: 2026-09-08

## What it does

這是給經典 AVR 板子用的瀏覽器版 avrdude：選好板子、丟進編譯好的 `.hex`，它就透過 Web Serial API 直接對板子的 bootloader 說 STK500 協定 —— 不用 Arduino IDE、不用工具鏈，在現代作業系統上也不用裝驅動程式。一切都在 Chrome 或 Edge 裡本機執行；你丟進去的檔案，以及從晶片讀回來的位元組，都不會離開你的電腦。

它是為大多數人桌上真的有的那幾塊板子做的 —— Arduino Uno、Nano 與 Pro Mini（ATmega328P），以及 Mega 2560／1280 —— 至於其他的，它也講得很白。AVR 上傳這件事本來就很囉唆（協定混雜、USB 橋接晶片混雜、鮑率混雜，而且燒錯 fuse 真的可能把晶片變磚），所以這個工具明確標示哪些路徑已經實作、哪些還沒測過，並把每一個危險操作都關在刻意的確認步驟後面。

### 上傳是怎麼進行的

你按下連線時，瀏覽器會以該板子的上傳鮑率開啟序列埠，接著在 DTR／RTS 線上送出脈衝，把板子重置進 bootloader —— 這就是 Arduino IDE 用的同一招，因為 DTR 是經過一顆電容接到晶片的 RESET 腳。接著工具會和 bootloader 同步、讀取 3 個位元組的裝置簽章確認晶片和你選的板子相符，再一次一個 flash page 把 `.hex` 寫進去，並即時顯示位元組數與百分比。寫完之後它會把 flash 讀回來，逐位元組和你的檔案比對，所以「上傳成功」真的代表晶片裡放的就是你送過去的東西。

### 哪些板子真的能用，以及 CH340、FTDI 與原生 USB 的分界

Uno、Nano 與 Pro Mini 走 STK500v1 協定（Optiboot）；Mega 2560／1280 走 STK500v2。兩者這裡都實作了，但請看下方的誠實對照表：作者並未在真實晶片上驗證過任何一條路徑，所以在你自己確認之前，請把每一塊板子都當成未測試。另一個變數是 USB 轉序列的橋接晶片。原廠 Uno／Mega 用的是 ATmega16U2，不需要驅動程式。便宜的 Nano／Pro Mini 相容板用 CH340，在較舊的系統上需要驅動程式，但在現行的 macOS、Linux 與 Windows 上插上就能用；FTDI 的板子情況類似。像 Leonardo／Micro（ATmega32U4）這種原生 USB 板則完全是另一種生物 —— sketch 和 bootloader 會以兩個不同的 USB 裝置出現，而 1200 鮑率重置會重新列舉出一個全新的連接埠，Web Serial 沒有第二次裝置選擇就追不上去，所以 Leonardo 直接列為不支援，而不是給你一條不穩的路。

### 變磚風險與救援

把 sketch 燒過 bootloader 是安全而且可逆的 —— 最糟就是重燒一次。寫 fuse 不是：時鐘、reset-disable 或 SPI-enable 這幾個 fuse 燒錯，晶片就可能再也無法從序列埠連上，只能靠高壓或 ISP 燒錄器救回。這個工具預設會替你讀取並解讀 fuse，但寫入 fuse 是關閉的、藏在雙重確認之後，並且清楚標上變磚風險。要把 bootloader 燒進一顆空白晶片需要 ISP 燒錄器，那不在一個只走序列埠的工具範圍內；如果你的板子沒有可用的 bootloader，請把 ArduinoISP sketch 燒到另一塊正常的板子上再用它 —— 韌體選單裡有那份 sketch 的連結，說明也寫了接線方式。

## Limits

Does not compile sketches; it uploads a compiled .hex through the board's serial bootloader.

只要寫錯一個 fuse，這顆晶片就可能再也無法用序列埠存取 — 到那時只有 ISP 或高壓燒寫器救得回來。沒有復原的機會。

## FAQ

### .hex 檔是什麼，要去哪裡拿？

它是你的 sketch 編譯後的機器碼，格式是 Intel HEX。在 Arduino IDE 裡選「Sketch → Export Compiled Binary」，就會在 sketch 旁邊產生一份 `.hex`；PlatformIO 則放在 `.pio/build/<env>/firmware.hex`。這個工具不編譯程式 —— 它只上傳已經編譯好的 `.hex`。

### 支援哪些瀏覽器和板子？

桌面版的 Chrome、Edge 與 Opera（以及 Android 版 Chrome 148 以上）支援 Web Serial API；Firefox 與 Safari 不支援，所以在那裡沒有上傳這條路。板子方面，Uno、Nano、Pro Mini 與 Mega 2560／1280 的協定路徑都已實作；確切的測試狀態，以及 CH340／FTDI／原生 USB 的注意事項，請看頁面上的誠實對照表。

### 它一直無法和 bootloader 同步，是哪裡有問題？

九成是鮑率或 bootloader 世代選錯了：新的 Nano 用 115200，舊的用 57600，換另一列 Nano 試試。否則就檢查 USB 橋接的驅動程式（舊系統上的 CH340 相容板）、確認沒有其他程式（例如 Arduino IDE 的序列埠監控）佔著連接埠，並確認裸的 Pro Mini 模組上 DTR 真的有接到 RESET 的電容。

### 這會把我的板子燒成磚嗎？

上傳 sketch 不會 —— 你永遠可以重燒。寫 fuse 會：時鐘、RSTDISBL 或 SPIEN 燒錯，晶片就可能無法再從序列埠連上，得用 ISP 或高壓燒錄器才救得回來。這就是為什麼寫入 fuse 預設是停用的，而且藏在雙重確認之後；讀取 fuse 則永遠是安全的。

### 它能燒 bootloader 或燒一顆空白的 ATmega 嗎？

不行。燒 bootloader，或對一顆 fuse 鎖住的空白晶片編程，都需要 ISP 燒錄器去驅動 SPI 腳位，而單純的 Web Serial 做不到。救援方式是把 ArduinoISP sketch（韌體選單裡有連結）燒到一塊正常的 Uno／Nano 上，再把它接成 in-system programmer。

### GRBL、Marlin 這些韌體呢？

韌體選單裡放了幾個熱門的預先編譯版本連結 —— 在 Uno／Nano 上跑 CNC／雷射的 GRBL，以及 Blink、ArduinoISP 這類測試 sketch。它們只提供連結：GRBL 與 Marlin 採 GPL 授權，所以這個工具從不代管或打包它們，而且它會提醒你，完整的 Marlin 版本塞不進 32 KB 的 Uno。請從上游的釋出頁下載 .hex 再丟進來。

## Related tools

- [Serial Monitor & Plotter](https://bytescope.dev/zh-Hant/serial-monitor.md) — 在這裡燒錄程式，再打開序列埠監控看它開機 →
- [ESP Firmware Flasher](https://bytescope.dev/zh-Hant/esp-flasher.md) — 要燒的是 ESP32/ESP8266 而不是 AVR？請改用 ESP 燒錄工具。
