このQ&Aは役に立ちましたか?
ATxmegaマイコンのヒューズビットのコード設定
2023/10/20 21:26
- ATxmega64A3Uでのヒューズビット設定を変更し、消費電流を低下させる方法について
- ATmega専用ライターを使用してヒューズビットのBODPD機能をdisableに設定し、消費電流を軽減する方法について
- プログラムを使用して電源起動時にヒューズビット設定を変更する方法について
ATxmegaマイコンのヒューズビットのコード設定
2021/10/29 09:39
現在ATxmega64A3Uでプログラミングを行なっています。
このマイコンのパワーダウンモード機能を利用して、バッテリーの消費電流を可能な限り抑える必要があり、400uA程度だった消費電流を300uA程度まで低下させることができました。
原因がヒューズビットのBODPD機能で、このビット設定をATmega専用ライターでdisableに設定することで消費電流の軽減ができるようになりました。
同じファームウェアを搭載している基板にも同様のヒューズビット設定の変更を実施すれば良いのですが、プログラムで、電源起動時に同様の設定を実行することも可能ですか?
どうぞ、ご教示の程宜しくお願い致します。
質問者が選んだベストアンサー
このQ&Aは役に立ちましたか?
この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。
その他の回答 (6件中 1~5件目)
う~ん・・・基本的な事が分かってない・・・・
『FUSES=』ってのは『コード(プログラム)』じゃない。
CPUがヒューズを『設定』することなんてできない。
データシート読め。(←何度目だ?)
その部分はヒューズ設定情報としてelfファイルに埋め込まれ、ライターが書き込みます。
ライター側でヒューズ書き込みオプション有効にしていればね。
その後はもちろんライターで内容を読める。
これでわからないなら全数手動で設定しなさいな。
お礼
2021/11/16 14:26
回答頂きありがとうございます。
使用しているAtmelStudio6.2のDevice Programmingを調べてみたところ、Production fileという項目で
”Program device from ELF production file”という欄を見つけました。ここで、FlashとFusesのチェックボックスを有効にしてelfファイルをプログラムすると、コード内に設定したFuseの設定になったことを確認できました。
どうも、これならfuse設定も一緒にかきこんでくれるようですね。
助かります。
ホンット基本的な事を勉強しましょうよ。
「ヒューズ」の意味わかってます?
BODPDはヒューズでしか設定できません。
あなたが自らの手でヒューズ設定をcontinuousに変更したんなら、
100万回再起動したってcontinuousですよ。
勝手にdisableに戻ったりしたら怖いわ。
お礼
2021/11/16 09:21
回答頂きありがとうございます。
ヒューズの設定はcontinuousになっていたとしても、
コード内で
FUSES = {
//JTAGUSERID = 0xFF
//WDWP = 8CLK
//WDP = 8CLK
//BOOTRST = APPLICATION
//TOSCSEL = XTAL
//BODPD = DISABLED
//RSTDISBL = [ ]
//SUT = 0MS
//WDLOCK = [ ]
//JTAGEN = [ ]
//BODACT = CONTINUOUS
//EESAVE = [ ]
//BODLVL = 2V2
.FUSEBYTE0 = 0xFF,
.FUSEBYTE1 = 0x00,
.FUSEBYTE2 = 0xFF,
.FUSEBYTE4 = 0xFF,
.FUSEBYTE5 = 0xEC,
};
BODPDはDisableの設定にしたならば、Disableになっているということでしょうか?
このFUSESの設定が有効になっているかどうかを確認する方法などはありますでしょうか?
ファーム書き換え作業があるなら、ファームにヒューズ設定も含めればいいんですよ。
elfファイルを使っているのならね。
お礼
2021/11/15 13:55
回答頂きありがとうございます。
例えばなんですが、
・BODPD設定はDisable
これのプログラム例はどのようにすればよいのですしょうか?
過去の記憶なのでウソを言うかも知れません。
たしかヒューズビットは外部プログラマからは変更できましたが
CPUで実行できるプログラムからは自己変更できなかった気がします。
ヒューズビットは一度書き込めば、FlashやEE-PROMのように
消える事はないですから、用途に合わせて予めプログラマで設定する
しかないように思います。
お礼
2021/11/10 07:29
回答頂きありがとうございます。
近日、数百個の基板に同じファームウェアを書き込む作業あります。今までも同じような作業の経験があるのですが、その際はファームウェア書き込みと同時にヒューズビットを手動でやってきてます。
今回からパワーダウンモード時の消費電流削減のためにBODPD設定をDisable設定にしたいのですが、ファームウェア書き込みだけ行った時点で同時に同じことができないかと思ったわけです。
とりあえずは、今までと同じ作業で進めてみようと思います。
お礼
2021/11/15 17:56
回答頂きありがとうございます。
フューズビットで書き込みたい値は決まっているので、ヒューズビット設定の画面でコピーできる値から次のようなプログラムを作成しました。
FUSES = {
//JTAGUSERID = 0xFF
//WDWP = 8CLK
//WDP = 8CLK
//BOOTRST = APPLICATION
//TOSCSEL = XTAL
//BODPD = DISABLED
//RSTDISBL = [ ]
//SUT = 0MS
//WDLOCK = [ ]
//JTAGEN = [ ]
//BODACT = CONTINUOUS
//EESAVE = [ ]
//BODLVL = 2V2
.FUSEBYTE0 = 0xFF,
.FUSEBYTE1 = 0x00,
.FUSEBYTE2 = 0xFF,
.FUSEBYTE4 = 0xFF,
.FUSEBYTE5 = 0xEC,
};
このコードをmain.cに追加して、ビルド実行してATxmega64a3uに書き込みました。
しかし、書き込んだ後にわざとBODPDをcontinuousに変更してみたりして、リセットしてプログラムを再起動してみてもDisableに自動的に変更してくれません。
これは、このFUSESのプログラムが機能していないように見えるのですが、他にすべきことはありますでしょうか?