0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Digisparkのブートローダーを復活させる(修正・追記あり ついでに Pro Micro も修復)

Last updated at Posted at 2021-10-10

Thanks to:

https://qiita.com/nak435/items/d8caed1cd29f5e67dcd7
https://ht-deko.com/arduino/bootloader.html
https://qiita.com/nak435/items/67aca33ca49b6f328faa

はじめに

Digisparkをプラグインして,書き込みプログラムがBootloaderを見つけるまでが微妙すぎるのではないか? おかげで何度かブートローダーを書き込む機会があったので,自分用に手順をまとめておく。

一度記事を投稿したが,自分でもあまりにも読みにくかったので,記述変更しました。

Arduino機を書き込み装置にする

正常に動作するArduio機を準備。ht-dekoさんの記事に詳しく記載があるので便利!
私はPro Micro(互換機),micro:bit および 秋月のATMEGA互換機で経験できた。

以下母機と書く。

  • Arduino IDE で,スケッチ例 - ArduinoISP - ArduinoISP を選ぶ。
  • 母機により,スケッチに修正が必要なので要注意。ht-dekoさんのページ参照。たとえば micro:bit ならRESETを2ピンに修正する。
  • 母機にスケッチArduinoISPを書き込む。設定が混乱するので注意!

「ボード」母機のボードを選ぶ
「プロセッサ」「クロック」母機に合わせる
「シリアルポート」母機に合わせる
「書き込み装置」母機に合わせる。たとえば標準のArduino機なら AVRISP mkII になろう。

Digispark を接続

いったんPCから取り外し,Digisparkと母機を接続する。

// -- DigiSpark --           
// PB5 ADC0          RESET <<---- ここ
// PB4 ADC2     PWM4 USB-
// PB3 ADC3          USB+
// PB2 ADC1 SCL PWM2 SCLK  <<---- ここ
// PB1          PWM1 MISO  <<---- ここ
// PB0      SDA PWM0 MOSI  <<---- ここ

// -- DigiSpark --      
//      5V          <<---- ここ
//     GND          <<---- ここ
//     VIN

合計6か所を接続。ht-dekoさんの記事を参照,ArduinoISP状態の時のピンアサインで接続する。

micro:bit は 3.3V で,Digisparkの5V端子に接続するのは少し気持ちが悪いが,とくに問題なく書き込みできた。

電位差が大きめなレギュレータを持つ基板は要注意だが,私のDigispark(の互換品)は大丈夫だったようだ。

試しのスケッチを書き込み,書き込みコマンドを記録

ATtiny85として,blink的なスケッチを書き込み,そのコマンドを記録。@nak435 さんの投稿参照。大事なので引用させていただきます。

「ツール」→「ボード」→「ATtiny Microcontrollers」→「ATtiny25/45/85」を選択する
「ツール」→「プロセッサ」→「ATtiny85」を選択する
「ツール」→「クロック」→「Internal 1 MHz」を選択する
「ツール」→「シリアルポート」→ 適切なArduinoポートを選択する
「ツール」→「書込装置」→「Arduino as ISP」を選択する (注意「ArduinoISP」ではない)

「シリアルポート」は母機のシリアルポート。

結果,私の環境では以下のコマンドが得られた。(行分割した)

/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude \
    -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf \
    -v -pattiny85 -cstk500v1 -P/dev/cu.usbmodem14102 -b19200 \
    -Uflash:w:/var/folders/r0/8kh304s9751ctrm2x_5wfpl40000gn/T/arduino_build_272089/digispark_blink.ino.hex:i

ヒューズ値の設定とファームの書き込み

@nak435 さんの投稿参照。以下からt85_default.hexを作業場所にダウンロードする。

私の環境では以下のコマンドで書き込みを行った。

/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude \
    -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf \
    -v -pattiny85 -cstk500v1 -P/dev/cu.usbmodem14102 -b19200 -Uflash:w:t85_default.hex:i \
    -U lfuse:w:0xf1:m -U hfuse:w:0xdf:m -U efuse:w:0xfe:m

無事復活と思ったが...

新ブートローダで書き込めるようになった... と思ったのは,1〜2回であった。どのような環境依存なのかよくわからないが,少なくとも私が持っている2枚のDigiSparkは同じような症状だった。

冒頭でも書いたが...

そもそもプラグインして,書き込みプログラムがBootloaderを見つけるまでが微妙すぎるのではないか。

であれば,回路的にポートを固定して,必ず書き込みモードに入る**「5秒待たないブートローダ」**は有効ではないか?

私の環境ではアタリだったようだ。PB0とGNDをきっちり短絡して,しっかりと書き込めるようになった。それ以降,ブートローダーは壊れていない。Macでも。感謝!

手順は上と同じ,ArduinoISPとなった母機を経由して,直接これを書き込んだ。

Fuse設定について

@nak435 さんの記事と,いわゆる「公式」に書かれているヒューズ設定値と微妙に違う。
違うが,データシートで確認したところ,「まあどちらでもいいだろう」と私は考える。

箇所 @nak435さん記事 公式 備考
Fuse High Byte 0xdf BODLEVEL1=1 0xdd BODLEVEL1=0 Brown-out Detector trigger level
Fuse Low Byte 0xf1 SUT0=1 0xe1 SUT0=0 Start-up time setting

ついでにPro Micro(互換品)も修復

書き込めなくなった Pro Micro(互換品)も,同様の手順で修復できた。
さらに,この Pro Micro(互換品)の場合は,もっと楽な手順でも回復できた。概要としては

  • Arduino ISPを書き込んだ母機と接続。母機をPCに接続。
  • Arduino IDEで,「ブートローダを書き込み」を選ぶ。

これだけ。ただし,

  • ボードマネージャーの設定等で Sparkfun Pro Micro を選べるようにする。
  • ボード:SparkFun Pro Micro
  • プロセッサ:ATmega32U4 (5V, 16MHz)(私の場合)
  • シリアルポート:母機のポート
  • 書き込み装置:Arduino as ISP

となることに注意。

補足

この場合,ブートローダーそのものが

~/Library/Arduino15/packages/SparkFun/hardware/avr/1.1.13/bootloaders

に保存されていて,今回の場合は caterina/Caterina-promicro16.hex が書き込まれた。(ログで確認した)

ht-dekoさんの記事にさらりと [ツール | ボード] でボードを "目的の Arduino" に変更します。 と書かれているが,CPU,電源,クロック周波数が同じで,周囲回路に問題がなければそこそこ動くのであろう。実際私は知らずに Arduino Micro のブートローダーを,Digisparkと同様の方法で書き込んだ。

Arduino Micro として Blink 程度のスケッチの書き込み,実行までは確認した。さすがに混乱しそうなので,SparkFunのブートローダーに戻したが。

ほか,DFUブートローダーとかあるようなので,さらに興味を持った方は調べてみると良いだろう。その時は今回の「試しのスケッチを書き込んでみて書き込み方法を確認する」手法が役に立つだろう。

さらに補足

今回の件でたまたま以下の記事を見つけた。

ArduinoISPは手元にある。Arduinoではなくてもっと低レベルでAVRマイコンを使ってみるのも面白そうなネタである。今後時間があるときにでも試してみたい。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?