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経由でボードのブートローダへSTK500プロトコルを直接話します。Arduino IDEもツールチェーンも不要で、最近のOSならドライバの導入も要りません。すべてChromeまたはEdgeの中でローカルに動き、投げ込んだファイルも、チップから読み戻したバイトも、お使いのマシンの外へは出ません。

対象は、多くの人が実際に机の上に持っているボードです。Arduino Uno、Nano、Pro Mini(ATmega328P)と、Mega 2560/1280。それ以外については正直にお伝えします。AVRへの書き込みは本当に厄介で、プロトコルもUSBブリッジもボーレートも入り混じっており、ヒューズを間違えてチップを文鎮化させる実際のリスクもあります。そのため本ツールは、どの経路が実装済みでどれが未検証かをはっきり明記し、危険な操作はすべて意図的な確認の後ろに置いています。

書き込みの仕組み

接続を押すと、ブラウザがボードの書き込み用ボーレートでシリアルポートを開き、DTR/RTSの線をパルス駆動してボードをブートローダにリセットします。Arduino IDEが使うのと同じ手口で、DTRがコンデンサ経由でチップのRESETピンにつながっているためです。続いてブートローダと同期を取り、3バイトのデバイスシグネチャを読んでチップが選んだボードと一致するかを確認し、.hexをフラッシュ1ページずつ書き込みます。進捗はバイト数とパーセントでリアルタイムに表示されます。書き込み後はフラッシュを読み戻し、元のファイルと1バイトずつ比較するので、成功したという表示は、チップが送った内容とまったく同じものを保持していることを本当に意味します。

実際に動くボードと、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のボードはまったく別物です。スケッチとブートローダが2つの別々のUSB機器として現れ、1200ボーのリセットでまったく新しいポートが再列挙されます。Web Serialは2度目の機器選択なしにそれを追えないため、Leonardoは不安定な経路を用意するのではなく非対応として記載しています。

文鎮化のリスクと復旧

ブートローダ越しにスケッチを書き込むのは安全で、やり直せます。最悪でも書き直すだけです。ヒューズの書き込みはそうではありません。クロック、リセット無効、SPI有効のヒューズを間違えると、チップにシリアルから到達できなくなり、高電圧プログラマかISPプログラマでしか復旧できません。本ツールは既定でヒューズを読み取ってデコードしますが、ヒューズの書き込みは無効になっており、二重確認の後ろに隠され、文鎮化のリスクありと明示しています。素のチップへブートローダを焼くにはISPプログラマが必要で、シリアルだけのツールの範囲外です。ボードに動くブートローダがない場合は、もう1枚の正常なボードにArduinoISPスケッチを書き込んで、それを使ってください。ファームウェアメニューにスケッチへのリンクがあり、配線は注記で説明しています。

よくある質問

.hexファイルとは何で、どこで手に入りますか?

スケッチをコンパイルした機械語を、Intel HEX形式で表したものです。Arduino IDEでは「スケッチ」→「コンパイル済みバイナリをエクスポート」を選ぶと、スケッチの隣に`.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の注記は、ページ上の正直な対応表をご覧ください。

ブートローダと同期できません。何が悪いのでしょう?

9割はボーレートかブートローダの世代の違いです。新しいNanoは115200ですが、古いものは57600なので、もう一方のNanoの行を試してください。それ以外では、USBブリッジのドライバ(古いシステムでのCH340互換品)を確認し、他のプログラム(Arduino IDEのシリアルモニタなど)がポートを開いていないことを確かめ、素のPro MiniモジュールではDTRがRESETのコンデンサに届いているかを確認してください。

これでボードが文鎮化することはありますか?

スケッチの書き込みで文鎮化することはありません。いつでも書き直せます。ヒューズの書き込みでは起こり得ます。クロック、RSTDISBL、SPIENのヒューズを誤ると、シリアルからチップに到達できなくなり、復旧にISPプログラマや高電圧プログラマが必要になります。だからこそヒューズの書き込みは既定で無効にし、二重確認の後ろに置いてあります。ヒューズの読み取りはいつでも安全です。

ブートローダを焼いたり、素のATmegaに書き込んだりできますか?

いいえ。ブートローダを焼くことや、ヒューズでロックされた素のチップへの書き込みには、SPIピンを駆動するISPプログラマが必要で、素のWeb Serialではできません。復旧の道筋は、動作するUnoやNanoにArduinoISPスケッチ(ファームウェアメニューからリンクしています)を書き込み、インシステムプログラマとして配線することです。

GRBLやMarlinなど、他のファームウェアはどうですか?

ファームウェアメニューから、よく使われるコンパイル済みビルドへリンクしています。Uno/Nano向けのCNC・レーザー用GRBLや、BlinkやArduinoISPのようなテスト用スケッチです。あくまでリンクのみで、GRBLとMarlinはGPLライセンスのため本ツールが配布や同梱をすることはありません。またMarlinの完全なビルドは32 KBのUnoに収まらないことも警告します。上流のリリースから.hexをダウンロードして、投げ込んでください。