ROM吸い出しの鬼門、特殊チップROM
吸い出しでは右に出るものがいないであろう、cartreaderの製作連載の第3回目。
前回は電子部品類を注文しましたが、今回はcartreaderづくりで一番の難所と言っても良い、特殊チップ搭載タイトルの吸い出しのためのPICマイコンフラッシュを行います。
前回はこちら↓
PICはArduinoなどと比べ、低レイヤな方だと思うのですが、低レイヤなだけに現在のモダンなWebやプログラミングの感覚が通じないところがあります。
普通、ソフトウェアは新しければ新しいほど良いですが、マイコンなどでは必ずしもそうとは限りません。新しいものが完全上位互換とは限らないので、組み合わせが良くないと古いソフトを使う必要があったりもします。
今回、私も低レイヤの洗礼を受け、なぜか動かないと何時間も悩むことになりました…
PICkit3のパチもん(?)をAliExpressで購入
PICKit2 PICKIT3 PICKit3.5 Programmer + PIC ICD2 PICKit 2 PICKIT 3 PICKIT 3.5 Programming Adapter Universal Programmer Seat|Integrated Circuits| – AliExpress – https://www.aliexpress.com/item/1005002857278350.html
AliExpressでPICkit3…の恐らく偽物を買います。ロゴが入っていないので多分偽物なのですが、ロゴ無しだし商標権侵害とかではないと思います(適当)。
静電気を軽減する袋に入って届きました。今回購入したショップのページには、PICkit2,3,3.5と、それぞれに今回使うようなBurn Write Block(変換アダプタ)が追加されたものの計6種類があります。
特に理由がなければ、アダプターも一緒に買っておくと安心です。
今回はPICkit3+アダプタを選びました。前述の通り、新しければ新しいほど良いとは限らないので、古すぎず新しすぎず、は3だと判断しました。
ちなみに今回購入したPICマイコンは、前回も書きましたがPIC12F635です。公式にはPIC12F629と書かれているのですが、秋月電子になく、他のところも日本で買えるところは大抵見て回ったのですが、どこも在庫切れでした。入荷予定があっても、数ヶ月先なんてざらだったので、動く確証はないものの、仕様は似ているPIC12F635を選びました。これも半導体不足の影響なのでしょうか…
PICkit3から給電できるようにする
こちらのサイトによると、このパチもんPICkit3は、一部部品を実装していない場所があるそうです。PICkit3は工具不要で簡単に外装が外せるので確認すると、確かにところどころ実装されていない場所がありました。
これだけならいいのですが、1つ問題があり、必要なときにも低電圧のままになってしまい、書き込めなくなる恐れがあるというのです。
しかし、これには解決策があり、「74LVC1T45のPin6に接続されている抵抗100Ωをショートすることになっています。」とのこと。
これは、具体的にはR26、R43、R45です。しかし前述の通り、未実装部品が存在するため、実際にショートさせるのはR26とR43のみです。
SOP to DIPモジュールを使って、表面実装用のPIC12F635をアダプタで使えるように変換します。PICの丸印部分が、画面右下になります(分かりづらくてすみません)。
また、PICkit3クローン本体とアダプタを接続するとき、PICkit3側は一本差し口が多いのですが、PICkit3の白い三角に近い方に挿します。
ちなみにPICの位置ですが、緑の大きいソケットの3Mを上として、上から11番目に1番ピンが刺さっていれば問題ないです🙂
— JL (@JL_0w0) October 1, 2021
ノイズに弱いのか、サイズ変換基板の接触が悪いのか、PIC周りを含め、諸々を一度抜いて挿してを数回すると認識したりもするので、ご参考までに…
青いアダプタ(ソケット)の、3Mとある方から数えて11番目に入れるそうです(これ分かりませんでした。ありがとうございます)。
PIC12F635にフラッシュ(焼く)!
さて、いよいよPICにフラッシュ(記録)します。
まずMPLAB X IDEをダウンロードしてインストールします。かなりストレージを食いますし、今回は8bitのPICマイコンしか使わないので、それ以上のビット数のものなどはチェックを外してOKです。インストールは同意して待つだけです(割と時間はかかります)。
インストール後、PCのUSBポートにケーブルを繋ぐと、Windows10では自動で認識してくれました(他は未確認)。
PICに書き込むプログラムは、cartreaderのリポジトリにはなく、こちらにあります(全く違うプロジェクトなのでしょうかね)。.zipか何かでクローンしておきましょう。
PICが繋がらない!!
何度やっても、PICが内部的に繋がりません。ソフトは最新バージョンだし、挿す位置も大丈夫、ピンヘッダもOK…
突然のリプ失礼します(o*。_。)o
— JL (@JL_0w0) October 1, 2021
どんな感じで接続していますか?
行き詰まってしまい、何時間も悩んでいましたが、Twitterで心優しい方からリプを頂くことができました(青いアダプタに挿す場所を教えていただいた方と同じ方ですが、時系列的にはこちらが先でした)。
なるほどです~
— JL (@JL_0w0) October 1, 2021
MPLAB IPEでConnectを押した際に、すぐにconnection failed.が出てしまう感じでしょうか?
Picの挿し位置が誤っていた場合はこのようなエラーになりますが、もしここまで到達できていないような場合は、MPLAB X IPEがPICkit3(のクローン)をうまく認識できていない可能性があります pic.twitter.com/j5yK83oALS
もしも
— JL (@JL_0w0) October 1, 2021
Connecting to MPLAB PICkit 3…
Connection Failed.
で止まってしまう場合は、PICkit 3のファームウェアが古い事が原因かもしれませんので、ここ(https://t.co/dLiic3TET3)の記事を参考にPICkit3のファームウェアを更新することで、MPLAB X IPEで認識出来そうです。
ちなみにPICの位置ですが、緑の大きいソケットの3Mを上として、上から11番目に1番ピンが刺さっていれば問題ないです🙂
— JL (@JL_0w0) October 1, 2021
ノイズに弱いのか、サイズ変換基板の接触が悪いのか、PIC周りを含め、諸々を一度抜いて挿してを数回すると認識したりもするので、ご参考までに…
その方によると、PICkit3のファームウェアが古いと認識してくれないらしく、ファームウェアの更新をしてみてはどうかと提案が。
「PICkit3の」ファームウェアというのは割と盲点でした。PC側ばかり気にしていて、PICkit3のファームウェアを考えつかなかったのです。
ただ、普通はMPLAB X IDEが自動で更新してくれるはずなのです。MPLAB X IDEをインストールすると同時に入るMPLAB X IPEというソフトにも、「Auto Download Firmware」という項目があって、最初からそれにチェックが入ってますしね。
恐らく、自動でファームウェアが新しくならないのは、インストール後に「このソフトウェアに〇〇で他のネットワーク上のデバイスから認識できるようにしますか?(うろ覚え)」「このアプリのいくつかの機能がWindows Defenderファイアウォールでブロックされています」みたいなダイアログが出てきたはずで(私は目にしました)、それをなんとなくで拒否すると、自動でアップデートされないのかな、と推測しています。(本当にご助言ありがとうございました…!)
PICkit3のファームウェアを手動で当てる
さて、肝心のどうすれば手動でファームウェアを当てるかですが、以下のように行います。
まずフラッシュする.hexファイル(snescic-lock-resync.hex)を使って、プロジェクトをMPLAB X IDEで作ります。画像のように、File→New Projectと進み、使うPICの種類、ハードウェアツール、プロジェクト名、プロジェクトの保存場所などを決めます(同名で作ろうとしているから怒られていますが本来はこんなことありません)。文字のエンコーディングはとりあえずUTF-8にしました。
次に、手動でPICkit3のファームウェアを当てます。作ったプロジェクトをOpen Projectで開き、Projectsの中にあるsnescic-lock-resyncを右クリック→(一番下の)Propertiesをクリック。
プロパティが開くので、CategoriesのPICkit3をクリックします。右側にOption Categoriesがあるので、そこでFirmwareをクリックし、
Use Latest Firmwareにデフォルトでチェックが入っているはずなので、チェックを外します。
Firmware Fileをクリックし、ローカルからファームウェアのファイルを選択します。
ついでに、Option CategoriesからPowerを選び、Power circuit from PICkit3にチェックを入れます。これにより、PICに別途電源を供給する必要がなくなります。
もしこの後書き込みで「The target circuit may require more power than the debug tool can provide. An external power supply might be necessary.」のようなエラーが出た場合は、電圧が低いため、Voltage Levelを上げると解決するかもしれません。
あとは元の画面に戻って、Make and Program Device Main Projectをクリックすれば、ファームウェアの問題を解決してsnesCICにフラッシュができます。お疲れさまでした。
USBメモリなどの機器とは違い、使っていないからといって唐突に抜いたりするとデータ破損の可能性もあるので(USBメモリも0ではないですが)、File→Exitで終了くらいはしたほうが良いかもしれません。
無事にフラッシュできましたでしょうか(フラッシュできたと思っていますが、まだ完成していないので確認はできていません…)。
山場は超えたので、あとはハンダ付けを頑張るだけです!次回もまたご覧下さい(パターンを剥がしてしまったのでパーツを再注文しています…)。
参考文献
0-4.PICkit3クローン_改良有り – https://porco.team-7.net/kousakunoheya/dennshi-dennkikei/0-4%ef%bc%8epickit3%e3%82%af%e3%83%ad%e3%83%bc%e3%83%b3_%e6%94%b9%e8%89%af%e6%9c%89%e3%82%8a/
冬休みの自由研究:cartreaderを作る https://zenn.dev/sasaplus1/scraps/121bb45b6ec08d#fnref1
PICkit3の購入元など、こちらのサイトを大いに参考にさせて頂きました。ありがとうございます。