ByteScope

AVR / Arduino Uploader

把編譯好的 .hex 直接從瀏覽器燒進 Arduino Uno、Nano 或 Mega —— Web Serial 上的 STK500,寫完自動讀回比對。

Talks to your board locally over USB — the .hex you drop and the bytes read back never leave your browser.

Checking browser support…

關於這個工具

這是給經典 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 的連結,說明也寫了接線方式。

常見問題

.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 再丟進來。