これは、Arduino 互換ボードの一種です。ATMega32u4 というチップ搭載されています。このチップ元を辿ると AT90USB163 などの系統で元々は ISP か FLIP で書き込むタイプのマイコンです。特徴は USB のインタフェースが付いてることですかね。Arduino 本家では Leonardo や Micro が相当する製品になります。
今回は Arduino ブートローダー書き込み済みのものを購入してみて、しばらく使ってみた印象を少しだけ。
USBシリアルの仮想ポートが2つ
ブートローダー実行中と、通常稼動時で COM ポート番号が変化します。最初はドライバの設定(inf ファイルの場所を指示)しなきゃいけませんが、ブートローダーは8秒くらいで終了しちゃうので、COM ポート 2つ設定するという認識が無いとあせりました。
boards.txt の書き換え必要
Arduino IDE で開発を行なう場合は下記エントリを、arduinoのディレクトリ\hardware\arduino\boards.txt に追加します。
davinci.name=Da Vinci 32U davinci.upload.protocol=avr109 davinci.upload.maximum_size=28672 davinci.upload.speed=57600 davinci.upload.disable_flushing=true davinci.bootloader.low_fuses=0xff davinci.bootloader.high_fuses=0xd8 davinci.bootloader.extended_fuses=0xcb davinci.bootloader.path=caterina davinci.bootloader.file=davinci.hex davinci.bootloader.unlock_bits=0x3F davinci.bootloader.lock_bits=0x2F davinci.build.mcu=atmega32u4 davinci.build.f_cpu=16000000L davinci.build.vid=0x1774 davinci.build.pid=0x8032 davinci.build.core=arduino davinci.build.variant=leonardo
Serial クラス使用時の注意
本家の Guide to the Arduino Leonardo and Micro に細かいことが書かれていますが、USBシリアル使うとき
Serial.begin(9600); while(!Serial) ;
のようにコーディングしてね、とサンプルが記述されています。この場合 PC 側で Arduino IDE のシリアルモニタ、もしくは Tera Term などの端末ソフトを立ち上げて COM ポートをオープンしないとこの while ループから抜けません。これすなわち PC 接続が条件となっちゃうイヤなパターンなのです。
マイコン単体でも稼動させたいけど、必要な時に USB 差してマイコンに指示を送りたいなどどうすればいいのでしょうかね。私は暫定的に
// USB ポートのアドレスが変った if(udaddrOld != UDADDR) { Serial1.println("USB Serial changed"); udaddrOld = UDADDR; if(UDADDR == 0) { Serial.end(); } else { Serial.begin(9600); } }
のような方法で、Serial.end(), Serial.begin() するようにはしています。このとき while(!Serial); は書きません。プログラミング上は Serial.available() でデータ有る無しの判定で済ませています。CPU と USB 部分は別れているので、USB ケーブルの抜き差しするときなどは、30秒から1分程度放置して、32u4 側のエンドポイントがタイムアウトのような形でリセットされるとうまく行くことが多いように思われます。これは Arduino UNO みたいに常時稼動する USBシリアルと決定的に違うところなのであきらめています。
Arduino IDE からのアップロードにしょっちゅう失敗する
ブートローダー起動されたら仮想COMポート番号も変化するのですが、USBシリアルのところはいろいろタイミングとかあるのかして、Arduino IDE から 2~3回書き込みすると次からは書き込みエラーとなって駄目なことが多いです。
こうなるとお手上げなので、Arduino IDE 終了、USBケーブル抜く。マイコン電源 OFF/ON で対応。結構最悪な操作ですな。
結構クセあります。また、このボードは USB 給電と外部給電をセパレートしていないので、組込み時には設計上の注意必要です。