スキップしてメイン コンテンツに移動

ATmega1284P Bootloaderについてのまとめ。

制限だらけのBootloaderへのアクセスが増えてるので、作った本人としてまとめ。

optibootにしろ、ATmegaBootにしろ、コンパイルは問題無くできるし、他のいくつかも試した。私自身か改造した物も、動いていたから安心していたら、HEXダンプしてみたら、FC00の64KB の辺りに、コードが置かれていて、なぜこれで動いているのと言う状況だった。

症状は二種類出て、この64KBの辺りに書かれてる物、64KBと128KBの両側に分けれてしまうもの・・何故か、64KBのとこにコードが有る物でも64KBとしてなら、普通に動く物もある、(ロックかかってないし、ベリファイエラーが出て当然なのだが、動く物も有る)

Avrdudeしてみると、ほとんどが、書き込みデーター量64KBと出た。物によっては、シグネチャーが、644Pで出た、つまり、644Pに誤認させて動かしてたとか・・もちろん64KB

変なところに、ブートローダーが有ると、書き込み後に消されちゃうか、ベリファイエラーが出て止まる。
ブートローダーのコードを、1FC00のとこに持って行かなければいけない事になる。

ソースコードを弄って実行すると今度は、「容量オーバー」と出た。1C00まで落とせば、書き込めたが、何か変な位置にコードが入っていた。結果的に、一回動くが、それで上書きされて終わった。

諦めようかと思ったが、HEXその物を開いてみてると。
最初に02から始まる書き込み位置のジャンプコード、それ以降は、相対位置と思われるHEXコードが入っていた。
そこで、初めて、INTEL HEXコードの命令と言うサイトを見て、02の意味は、?ここは、ビックエンディアン?・・で、チェックサムは解るから・・じゃあ強制的に移動してみようか・・で・・・iPodに入れた、HEX電卓片手に、0から、8ビットずつ引き算するチェックサムを計算しながら、二三回書き込んでみると、正しい位置に、コードが書き込まれ、正しく実行出来たので、最適な位置の、1FC00に固定した。

とりあえず、これで、自分の、1284Pは動いたから、安心していた。


欲しいと言う声が有ったので、momo氏に送ると動かないと言う・・そのHEXは、私の環境、CrossPackの中に含まれる、Avrdude 5.8を、GUIである、AVRfuseで書き込む分には、そのまま実行できていた。Lock出来ないので、そこだけは、手動でしていたが・

試しに、Arduino IDEに入れて、書き込みを実行すると、エラーが出まくった。
最新の、AVRdude5.10をダウンロードして、書き込もうとしてもやはりエラーが出た。

最初は、CrossPackのAvradude5.8に、自分で書いた、avrdude,confを疑ったが、書けてるので、この内容を、両方のAvrdudeが読むように交換してみたが、やはり駄目だった。

この時点で、自分の環境でしか書けないと悟り・・・「送ってくれたら、書いて返すよ」としようかと思ったが・・・


動いてるMCUはコピー出来ると言うのを思い出した。一応LOCKbitをFREEにして、5.10の環境で、HEXを読み出して、再書き込みしたら、当然動いた。

それをまた安心して、5.8で書いてみたら、動かなくなってしまったのだ。

じゃあもしかして・・で、ArduinoIDEの中に入れて書き込ませたら、やはり動かない。

こなったらしょうがないね・・と言う事で・・5.10とArduino付属の物で、HEXを別々に起こして、個別の、HEXで実行させたら、Arduino IDEからも、ただしく書き込めるようになった。

たぶん、Arduino付属のAvrdudeも最新のAvrdudeも、私の手書きした、書き込み位置指定のコードをエラーにしたが、何故か、CrossPack付属の5.8では通ったと言う・・完全な偶然で出来たって事になる。


ただどうしても疑問なのは、HEXダンプは、ジャンプコードが無く、本当に、メモリーの中身の地図だ、その地図が、Arduinoと、5.10で結果が違うと言うのが、凄い疑問に残っているが(これはAVRdude,confの差の可能性も有る)

この間に、出来たばかりの、USBtiny ISPで書き込んだら、64KBから先に書いてないっぽいと言う問題も発生したし・・何か書いてるみたいだが、ベリファイエラーが出て、読み出すと、空って表示した。


この条件で、使ってるのがMACで有る事とかまで考慮すると、何処に問題が有るのか解決出来なかった。

WindowsのAVRstudioから書き込みを実行したら、元のコードでもそのまま行けるのかも知れない訳だ。あるいは、Linuxならばと言う事になってしまう。なおかつ、Avrdudeのバージョンでの動作の差・・

ここまで不確定要素が増えると、「なぜか?」が特定できない。無数の条件がありすぎ、1週間くらいかければ、これでコンパイルして、書き込めば、スムーズで、何の問題も無いって言う結論が出るかも知れないが・・そこまで賭けなければいけないほどでは無いので、丸一日の成果として、「動くけど、なぜHEXが二個必要か解らないバージョン」として問題提起として、公開してみてると言うのが現状。

medoelec氏の方で、AVRisp Mk2を持ってるそうなので、ライター依存も疑っているので、AVRstudioからの書き込みや、Win-AVRでのコンパイルをお願いして、ワークファイルを送って有るが・・

他にも研究してみたい方が居れば、ワークファイルごと送りますので、連絡を下さい。


正しく実行出来るようになれば、まさに、世界初かもしれない、ATmega1284PのOptibootの改変者になれるかも知れません。(Optiboot作ってるグーループの方が詳しいと思うけど64KB超えがアン・サポートなのは、私と同じ結果なのでは無いかと、ちょっと考えている。つまり、書き込める環境が限定されるから、サポート出来ないって事なのではと思うのだ。)

また、Avrdudeごとの反応の違いから言って、その理由が、AVRdudeに有るならそれに依存する、Arduinoを含んで、お手上げかも知れない。(違う、AVRdudeで書けないと言う理由で)それはOptibootの開発グループの責任では無い。


違うライター、違う書き込み環境なら、そのまんま行ける可能性も十分あり

USBaspx等で、試してみて欲しい。

当方に全く違う環境として、デジットのライターもあるから、それが、1284Pに対応したらやってみる気は有るが、現状は未対応だった。

OptibootのMakeと、ソースを少しいじってコンパイルしただけの変更だが、ソースごと欲しい方はご連絡下さい。

とりあえず、私の一個は動いたし、momo氏のも動いたそうなので・・私はこれ以上突っ込んで研究する気は有りません。

コメント

このブログの人気の投稿

楽天 不正利用の顛末

楽天から届いたポイントメール 事の起こりはこのメールからだった・ 「へえ、俺楽天に、1500ポイントばかり有るけど、これって、1500円って事?」とTwitter仲間に話して、「そうだよ、ずいぶん買い物したねー」と言われて気付いた・・私は少なくともここ2年以上、楽天なんか使って無い! パスワードさえ本人が忘れてるような楽天のポイントが増えるのはおかしい。 パスワードをリセットして、初めて、「楽天ポイントの確認」なんかに入ってみた。 「えーっとたしか5年くらい前にVoIPの部品買った記憶はある」 確かにそれは存在したただし、合計1万円にも満たない・・ 「楽天って豪気だなー、ポイント一割もくれるのかー」と思ったが、全部を確認すると・・全くいわれの無い買い物がそこに有った。 何この14万のオーディオらしき物って! 僕は実際、楽天にポイントが有る事さえすっかり忘れていたし、どーでも良い会社だった。 これは何・・楽天に登録されてる僕のカードはこの時点で確実に失効してるので、僕のカード支払いでは無いし、こんな請求が来た事は無い。 2011/6/30 知人に聞くと、「楽天の店って、ノルマ高いから良く有る」との事・・こうやって、ほとんど休止してるアカウント悪用してる可能性が高いのだ。 こんなのが横行してたら、楽天の売り上げ高なんか、イカサマでいくらでも作れる事になる。 そしてまず、楽天のヘルプから苦情を投稿し、頭に来たので、三木谷氏のツイッターに送信した。 https://twitter.com/#!/hmiKitani Twitterの方が早く 楽天市場CS @ RakutenIchibaCS と名乗るとこから・・ 「 楽天市場お客様窓口担当です。この度はご心配をおかけいたしまして申し訳ございません。現在のところ、弊社から情報が漏洩したという事実はございませんが、お客様の現状を確認し、別途サポート担当より連絡をさせていただきます。今しばらくお待ち下さい。」 と来て 「なんで、公式のメールの方は帰って来ないのかと返信したら」 楽天市場CS  @ RakutenIchibaCS 「楽天市場お客様窓口担当です。この度はサポートセンターからの回答が遅れ、申し訳ございません。先ほど、ご質問の件に関しまして返信をいたしましたので...

私流USB-miniBコネクタのユニバーサル基板への装着法

私が一番使うUSBコネクタです。 秋月のこれ です。 普通のBコネクタに次いで安いのでいので良く買います。 普通のBコネクタより配線しやすく小さくて好きです。 まず4番ピンを切っちゃいます。 これは、IDと言われてますが、USBケーブルは4本しか通って無いので・ USB Ver3用かな??基本的に不要です。 残りのピンを曲げます。 こうゆうBコネクタも売ってるのですが200円で3個か4個かの差で ・・いつもこれです。 端子の先っぽを広げ、貫通用の端子を切ります。 貫通固定用端子は、ニッパで簡単に切れます。 基板の取り付け位置を決めてちょっと印します。 固定したい端子部分のランドをカッターで割ります。 私は、100円ショップのデザインカッターでやりました。 割った後テスターで通電確認しといて下さい。 半田を盛っておきます。 この辺から、SOP-ICの固定方法と同じです。 真ん中の一番短いのから固定します。 この状態で完全にブリッジしてますね・・ 気にしなくて大丈夫です。 ピン番号で2−3−1−5の順番で固定すると楽です。 真ん中の端子をハンダゴテで暖めてから半田吸い取り機で シュポンと一発すると、無駄な半田が取れます。 大体これでブリッジが解消します。 コツはあんまり一生懸命半田を吸い取らないように軽くやる事です。 この後、テスターで確認します。 ケースを基板に固定します。 5番ピン側シェルの固定の時に5番ピンからジャンパを飛ばして おきます。これでシェルごとGNDになり反対側から UVCCと並べてGNDを出したい時とかシェルから引けます。 この後通電をしっかり確認しましょう。 これで通電状況は、普通の図面通り、この上の写真で言うと、奥から、1-2-3-4(UVCC / D- /D+ /GND)になります。シェルからGNDを引けば、(GND/VCC/D-/D+)に出来、一個進んだ先のランドで、一列に並べる事が出来ます。 mega8u2や、V-USBの場合D-D+には、3.3vの制限ダイオードが必要なので次のランドでそれを繋いでしまいます。シェルグランドを応用すれば両側から出せますから綺麗にその列で整理してしまえます。 D- D+はその次のランドで、SOPの抵抗を付けてしまえば最短距離でICに接続を始められます。 コツはダイオードを付けてからだとUVCCが引っ...

秋月の低ハイト、ピンソケット

最初どうかなーー抜けやすかったら嫌だなあと思ったが、さすがにそうならない努力してあるらしく、パチンと言う感じではまる。長いソケットが、刺さる感じなのにこれは、はまる感じなのだ。 ソケットはともかくピン側は結構扱いに困る・・このままブレッドボーボードには刺さらない。丸ピンにも刺さらないから、相手に出来るのは、専用のソケットだけになる。 ただ、いいなあと思ってるのは、これをISPにすると、パチンとはまる事と、ピン側の高さが制限されて、AVRや、PICの基板に無骨に突っ立っていた、ISPコネクタのハイト下げられる。 低ピン→ブレッドボード × 低ピン→標準ピンソケット × 低ソケット→低ピン ○ (ピンはこれ以外の組み合わせを確認できていない) 低ソケット→標準ピン ○ 低ソケット→細ピン ?? 低ソケット→丸ピン × と言う関係なので、ISPには使える。古いISPコネクタと併用出来るから、ソケットにはいいのだ・(はみ出るけど) ISPのハイトが下がると、基板全体が薄くなる可能性が、SMDとかにある。・・薄くするためにDIP ICをソケット無しで、直接半田付けしちゃう私なんかも・・このハイトは助かる。