ゴールデンウィーク中から10日間程、スマイルステーション内臓DSoneのシリアル(UART)書き込みについて、悩んでおりました。
やあさん様より、詳しい解説が掲載されましたが、本記事の素となった事の顛末を(恥ずかしながら)事例として紹介します。(箇条書きで、順を追っての紹介です。)
1.DSoneR2を2台所有しています。
2.そのうち1台を、PIPO X9Sに組み込み、DSソフトウエアは正常に動作していました。
3.S88-masconを入手した事から、DSjoyの確認をしたく、手っ取り早く手元に有った「スマイルステーション内臓DSone」を書き換えて見る事にしました。
4.DSjoyのスケッチを用意し、Arduino IDEより(UART経由で)書き込みを試みると、エラーが出て書き込み出来ませんでした。
5.そこで、何らかの配線が足らないのかと思い、よく調べもせずにRTSやCTSを接続しても状況は変わりません。今まで接続していた「TX、RX、GND」の3本に加え、「DTR」を接続せよとの指示により、再度書き込み確認をするも状況は変わらず。
6.ブートローダの書き込みをしていないかも知れないとの情報から、内臓DSoneに対して、(ICSP経由で)ブートローダ書き込みとスケッチ書き込みをすると、問題無く書き込み出来ました。DSソフトウエアの確認をすると、今度は何故か?COMポートは使えないとエラーを吐いています。
書き込みアダプター2改(ICSP)にて書き込み実施。(旧型Nanoは事故死したので、新型Nanoになっています。)ピンヘッダ付いてるのに何でわざわざ基板に乗っているのか?それは今後のお楽しみ。コネクタ逆だよね!これは始祖鳥と同じで、元祖なのです。(開発当時は向きに関して、特に留意していなかっただけです。)
※この時点で、内蔵DSoneの機械的(電気的)故障を疑い始めました。
6.一旦、内臓品は置いておき、もう一台のDSoneを用い、UART経由でスケッチ書き込み確認をすると、問題無く書き込み出来ており、DSソフトウェアも問題無く動きます。
aitendoで購入した、USBシリアル変換ボードを使用しています。
7.念の為、こちらにも(ICSP経由で)ブートローダとスケッチを書き込んだ後に、UARTでスケッチを書き込んでみると・・・、こちらも内臓と同じ症状が!!書き込み出来ません。
オーノー!ヤッチマッタ! IC壊れたか??? 正常に動くものが無くなった・・・、ので。
8.原因究明の為、ATmega328Pを交換してみる事に。
ポリイミドテープ(カプトンテープ等)で基板養生して、ハンダを満たし全体を溶かして取り外します。マスキングテープを使うのが一般的ですね。
新品のICを取り付けして、再度7の作業を繰り返し。やはり、状況は変わりません。
この時点で同じ挙動となった為、IC故障は「白」と判断。
9.今度は、内蔵したUSBシリアルの基盤が故障か?とも思い、これも交換するが状況は変わらず。これも「白」。
10.打つ手を無くし、状況をフジガヤさんに説明して、解説を求めると・・・、「ICSPでスケッチを書き込むと、以降UART経由でのスケッチ書き込み出来ない(通信自体は出来る)」との回答が!
11.双方に対し、「ICSP経由でのブートローダ書き込み」と、「UART経由でのスケッチ書き込み」を実施。その後、共にスケッチ書き込みと、DSソフトウェアの実行を確認。問題有りません!
※追記:何て事の無い、問題だったみたいです。以前の記事で、こちらに別解説有り。
たまたま、スケッチ書き込みの状況の違う2台(ICSP及びUART)が、「コンパイル通らない病(苦手意識)」の蔓延する戦場に投下され誘爆し予想外の大爆発になった模様。
もし仮に、反対の物を内蔵していたら、何も問題にならなかった事でしょう。神様が、わざわざ勉強させてくれている様です。有り難い事です。
※結論としては、「ICSPでスケッチを書き込むと、以降UART経由でのスケッチ書き込み出来ない」という事。DSdecでは、スマイルコネクタ(ICSP経由)で「ブートローダとスケッチを連続で書き込んだ」ので、そのままの手順でやっていました。
対策は、解説の通りに「目的(対象物)と、それに対する正しい書き込み方法を理解する」事ですね。
この事例が、皆様の役に立ってくれれば幸いです。
実はこの数週間で、「コンパイル通らない病」のワクチンも投下され、治癒の方向に向かっています。当初はライブラリを個別で加えていましたが、現在は必要な物はスケッチに同梱されているので、別投入は不必要になっているのです。環境を揃えようと、古い物でも何でもかんでも加えて行く事はやめましょう。シンプルに必要な物だけを「一つ一つ」ライブラリに加えて行くという事を心がけます。