SyntaxHighlighter

2016年8月19日金曜日

Mighty1284Pのヒューズ設定について

とある目的で、大容量なROMとRAMを積んだArduinoが必要になったので、
ATMEGA1284PをArduino化しようとしたのだが、
その際に使おうとしたMighty-1284Pでハマったので書いておく。

optiboot導入後。

症状は、短いスケッチで書き込みエラーが2回に1回出る。
長いスケッチは毎回エラーが出る。
シリアル通信をエコーバックするだけのスクリプトが正常に動かない。

原因は、ヒューズビットの問題であった。
セラロックが使えない、という問題で既知であるが、水晶でもおかしくなる。

参考にしたのはここ
http://www.avrfreaks.net/forum/mega1284p-usart-receiver-issues-solved

スレ主は、ローパスフィルタを付けて解決していたが、実際には一番下にある
ヒューズビットの修正を行うことで解決する。

具体的には、Mighty-1284Pに同梱されたboard.txtを中身を開き、
各ヒューズの設定を以下のように書き換える。
(デフォルトでは、0xff, 0xde, 0xfdになっているらしい。)

これで安定する。

mighty_opt.bootloader.low_fuses=0xf7
mighty_opt.bootloader.high_fuses=0xd6
mighty_opt.bootloader.extended_fuses=0xfd

avr_developers.bootloader.low_fuses=0xf7
avr_developers.bootloader.high_fuses=0xd6
avr_developers.bootloader.extended_fuses=0xfd

bobuino.bootloader.low_fuses=0xf7
bobuino.bootloader.high_fuses=0xd6
bobuino.bootloader.extended_fuses=0xfd

mighty.bootloader.low_fuses=0xf7
mighty.bootloader.high_fuses=0xd6
mighty.bootloader.extended_fuses=0xfd

mighty8.bootloader.low_fuses=0xf7
mighty8.bootloader.high_fuses=0xd6
mighty8.bootloader.extended_fuses=0xfd


関係ないが、AVRISP mkIIをArduino IDEから使おうとすると、libUSBが必要だが、
64bit環境のWindowsの場合は、binの中にある、inf-wizard.exeを管理者権限で実行し、
さらにウィザード中の「Install Now...」を使わないと正常に入らないので注意。


ちなみに、ヒューズビットの意味
FF DE FD
11111111 11011110 11111110

CKDIV8 = 1
CKOUT = 1
SUT1 = 1
SUT0 = 0
SKSEL3 = 1 外部クリスタル、低振幅で発信(デリケートなクリスタル用)
SKSEL2 = 1
SKSEL1 = 1
SKSEL0 = 1

OCDEN = 1
JTAGEN = 1
SPIEN = 0
WDTON = 1
EESAVE = 1
BOOTSZ1 = 1
BOOTSZ0 = 1
BOOTSZT = 0

BODLEVEL2 = 1
BODLEVEL1 = 1
BODLEVEL0 = 0

---

F7 D6 DE
11110111 11010110 11111110

CKDIV8 = 1 クロック分周無効
CKOUT = 1 クロック出力無効
SUT1 = 1 パワーアップ待機時間16Kサイクル(リセット時は14サイクル+4.1ms)
SUT0 = 0
SKSEL3 = 0 外部クリスタル、最大振幅で発信(通常のクリスタル用)
SKSEL2 = 1
SKSEL1 = 1
SKSEL0 = 1

OCDEN = 1 デバッグ禁止
JTAGEN = 1 JTAGは拒否
SPIEN = 0 SPIプログラミングは許可
WDTON = 1 ウォッチドックタイマは無効
EESAVE = 0 EEPROMをイレースから保護する
BOOTSZ1 = 1
BOOTSZ0 = 1
BOOTSZRST = 0 リセットベクタはブートローダー

BODLEVEL2 = 1
BODLEVEL1 = 1
BODLEVEL0 = 0

0 件のコメント:

コメントを投稿