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

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 「楽天市場お客様窓口担当です。この度はサポートセンターからの回答が遅れ、申し訳ございません。先ほど、ご質問の件に関しまして返信をいたしましたので...

計画停電が来ました。

色々やろうとしてた割には間に合わず・・ MacBookは余裕で生きてました。PocketWifiを探したんですが見つからす・・テーブルスタンドが、LEDの電池共用だったので、真っ暗ににもなりませんでしたが・・ 暗くてなんかやる気も出ないので、寝床でひっくり返って、MacBook動かしてました。 LEDスタンドが、外部USBバッテリーで余裕で、保ってくれたのも有り・・(それが切れてもまだ内蔵が単四電池3本がある) もう一個か二個くらい、照明用のLEDが有れば耐えられそう。 そんなのも有って、定電流回路ちょっと作ろうかと資料漁ったらいいのがあった。 これ 。 一ヶ月位続くって言うから秋月から、3WのLEDを数発買うかなーー とりあえず、家に転がってた、バイクのバッテリーと、MacBookの電源、携帯電話用ポータブル電源とかで、とうぶん毎日1回3時間程度点灯すればいいのかーー 理想的には、LED位なら、スーパーキャパシタが理想ですよねーー PEKE PROJECTは、とりあえず、1週間ほど、休止して、ATtiny85のブートローダーを作り・・Arduinoベースで、停電認識、通電時PWMでの充電機能、LEDの、省エネPWM点灯とかを、ちょっと研究しとこうと思ってます。

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

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