2025年5月25日から2025年5月21日までの日記を表示中

2025年 5月25日 (日)

基板

昨日、Arduino Uno側でNAOMIのキーチップを叩けなかった問題ですが、落ち着いて調べた結果、酷い初歩的なミスをしていたことが発覚。まず、キーチップのPICは、外部からクロックを供給する必要があるのに、それをやっていませんでした。なぜか内蔵オシレータのクロックで動いているものと思い込んでいました(汗)。また、MCLREが有効になっているのに、4番ピンをHighにしていませんでした。多分これをやらないとリセットが解除されないはずです。

というわけでPICに4MHzのクロックを入れるようにして、4番ピン (MCLR) をプルアップしてみました。これでどうだ。

PICにクロックを入れてMCLRをプルアップ

お、Arduino Unoからのメッセージに純正キーチップのPIC が応答するようになりました。

PICが応答するようになった

しかし、この応答に、今度はArduino Unoの方が反応してくれません。何かArduino Uno側が、PIC側のクロックのトグルをちゃんと拾えていないような・・・。で、調べてみると、トグルの検知や値の読み込みに利用しているdigitalReadという関数が激遅との情報が出てきました。そして早くしたかったら直接レジスタを操作すると良いとのこと。なるほどねー。

digitalReadを使うのをやめて、直接レジスタを読むように書き換えたところ、メッセージと応答のやり取りが進むようになり、ついに純正キーチップの情報の読み出しに成功しました。やった。これでようやく自作キーチップクローンのデバッグが進むw

やり取りが進むように

純正のキーチップの読み出しに成功

早速Arduino Unoに自作のキーチップのクローンを読ませてみたところ、こちらは失敗。波形を見ると、何かやり取りをしているように見えなくもないですが、変ですね・・・。

やり取りをしているようだけど何か変

これはもしや・・・と、試しにArduino Uno側のクロックのトグルを遅くしてみたら、PIC側が正しく反応するようになりました。これはつまり、PIC側が遅くて、クロックの読み取りに失敗している可能性が高そうですw

クロックを遅くしたらPIC側が正しく応答したっぽい

ソースを見返してみると、PIC側でクロックを検知してレジスタの値を読み込む部分のループカウンタが無駄にintになっていたので、これをcharにし、さらにレジスタから読み出した値に7をANDして、下位3bitのみをメモリに保存する処理を、ループの外で行うようにしたところ、Arduino Uno側を遅くしなくても応答が返るようになりました。読み出せた情報も正しそうです。

正しい情報が読み出せていそう

では再度実機で動かしてみます。

実機で動かしてみる

う、だめか。しかし前回はエラー26だったのが、今回はエラー24に変わりましたw

エラー24になった

波形を見ると、それなりにやり取りをしているように見えるんですが。うーん、何がだめなんだろう。

波形はそれっぽいけど・・・

2025年 5月24日 (土)

Switch2

任天堂での多言語版も注文完了。後は発売日を座して待つのみです。

多言語版の注文も完了

基板

NAOMIのキーチップクローン、デバッグに便利そうな気がしたので、PIC向けに書いたコードをArduino Unoに移植して、Arduino Uno側でDIMMモジュール側の挙動を模擬できるようにしてみました。

Arduino Unoでデバッグする環境を立ち上げてみた

早速Arduino Unoに純正のキーチップをつないで波形を観測してみます。うーん、それっぽい信号がArduino Unoから出ているようですが、PIC側が応答しませんね。何でだろう。 (追記: 実はPICが内蔵のオシレータで動いているというとんでもない勘違いをしていました・・・。外からクロックの供給が必要だったんですね。あと、オリジナルのPICはMCLREがセットされているので、ちゃんとMCLRをHighにする制御も必要でした)

Arduino Uno側からはそれっぽい信号が出ているように見えるが・・・

一旦Arduino Unoからの認識は諦めて、作ったクローンの方をNAOMIの実機に刺してみました。が、こっちはエラー26。やっぱりデバッグしないとだめかw

実機に接続してみた

エラー26

ちなみに、作業をしていて気づいたんですが、コンパイラが生成したPIC16F628A向けのhexファイルをTL866CSでPICに書き込んでVerifyすると、configが不一致エラーになってしまうようです。

TL866CSでVerifyするとconfigが不一致でエラーになる

どうもコンパイラが生成したhexファイルだとconfigの値が0xFF82になっているのに対し、PIC側から読み出される値が 0x3F82 になっているせいで、不一致を起こしているようです。上位2bitの部分は実機に存在しないbitなので、MiniPro側で無視してほしいんですが・・・。Cのコードでconfigの値を直接指定する方法とかあるのかな。

configの上位Byteが0xFFなのがまずそう

2025年 5月23日 (金)

Switch2

ビックカメラでの購入手続きを完了させました。2台目確保です。任天堂の方は周辺機器をどうするか、もうちょっと考えてから・・・。

ビックカメラで注文完了

基板

NAOMIのキーチップのクローン、いきなり実機でデバッグするのは大変そうなので、まずはCで実装したPICのコードのコア部分をLinux上で動かせるようにして、5年くらい前にロジアナで取り込んだNAOMIのPICの波形データをテストベクタとして食わせてみました。

その結果、PIC側の応答の一部のパリティが一致しないという結果に。非常に悩んだんですが、実はおかしいのは実機側のデータでした。どうやら、PIC側から出る8Byteの応答の最後の1Byteには、パリティが正しくついていないっぽいです。意図的にやっているのか、あるいはPIC側のバグなのか・・・。後者だとすると、実はNAOMIのDIMMモジュールはパリティをちゃんとチェックしていない・・・?

2025年 5月22日 (木)

基板

NAOMIのキーチップ、挙動がわかっているということは、クローンを作ることができるのでは・・・。そう考えたら居ても立っても居られなくなり、実装にチャレンジしてみることにw。アセンブラは辛すぎるのでCでやります。PIC16F628は初めてだけどどんな感じかな。

Switch2

ビックカメラからメールが。どうせまた何かのアンケートでしょ・・・と思ったら、おいマジかよw

ビックカメラでもSwitch2当選

まさかの Switch2 抽選販売、繰り上げ当選のお知らせ。抽選販売に申し込んだの、任天堂、ヨドバシ、ビック、Amazonの4件だけなんですが、これでそのうちの3件に当たったことになりますね。これは凄まじい。というか、この先、どうなってしまうんだ・・・。

焼肉

近場で焼肉を食べてきました。お疲れ様でした。

2025年 5月21日 (水)

基板

改めてNAOMIのキーチップ (PIC) の信号を観測したくて、DIMMボードのシールドを取り外してみたんですが、何かよく見ると、PICのソケットの隣に何も実装されていないIC3というソケットがありますね。ACE1101?

PICのソケットの隣りにある謎のソケット

もしやと思い、信号をテスターで調べてみたら、PICで使っている6番ピンから9番ピンの4bitの信号が、そのままIC3の1番ピンから4番ピンに配線されていました。つまり、PICの足にプローブを当てなくても、このソケット経由で信号を覗き見ることができるということに。キーチップのカバーを外さなくてもいいので、これは便利ですね。

IC3のソケット経由でPICの信号を観測

ちなみに、ACE1101のデータシートを見ると3番ピンはNCとなっていました。どういうことなんだろう・・・w

2025年5月25日から2025年5月21日までの日記を表示中

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

カレンダーがありません

最新の10件のエントリ

最近の10件のコメント

過去ログ