2025年5月25日の日記を表示中
2025年 5月25日 (日)
■基板
昨日、Arduino Uno側でNAOMIのキーチップを叩けなかった問題ですが、落ち着いて調べた結果、酷い初歩的なミスをしていたことが発覚。まず、キーチップのPICは、外部からクロックを供給する必要があるのに、それをやっていませんでした。なぜか内蔵オシレータのクロックで動いているものと思い込んでいました(汗)。また、MCLREが有効になっているのに、4番ピンをHighにしていませんでした。多分これをやらないとリセットが解除されないはずです。
というわけでPICに4MHzのクロックを入れるようにして、4番ピン (MCLR) をプルアップしてみました。これでどうだ。
お、Arduino Unoからのメッセージに純正キーチップのPIC が応答するようになりました。
しかし、この応答に、今度はArduino Unoの方が反応してくれません。何かArduino Uno側が、PIC側のクロックのトグルをちゃんと拾えていないような・・・。で、調べてみると、トグルの検知や値の読み込みに利用しているdigitalReadという関数が激遅との情報が出てきました。そして早くしたかったら直接レジスタを操作すると良いとのこと。なるほどねー。
digitalReadを使うのをやめて、直接レジスタを読むように書き換えたところ、メッセージと応答のやり取りが進むようになり、ついに純正キーチップの情報の読み出しに成功しました。やった。これでようやく自作キーチップクローンのデバッグが進むw
早速Arduino Unoに自作のキーチップのクローンを読ませてみたところ、こちらは失敗。波形を見ると、何かやり取りをしているように見えなくもないですが、変ですね・・・。
これはもしや・・・と、試しにArduino Uno側のクロックのトグルを遅くしてみたら、PIC側が正しく反応するようになりました。これはつまり、PIC側が遅くて、クロックの読み取りに失敗している可能性が高そうですw
ソースを見返してみると、PIC側でクロックを検知してレジスタの値を読み込む部分のループカウンタが無駄にintになっていたので、これをcharにし、さらにレジスタから読み出した値に7をANDして、下位3bitのみをメモリに保存する処理を、ループの外で行うようにしたところ、Arduino Uno側を遅くしなくても応答が返るようになりました。読み出せた情報も正しそうです。
では再度実機で動かしてみます。
う、だめか。しかし前回はエラー26だったのが、今回はエラー24に変わりましたw
波形を見ると、それなりにやり取りをしているように見えるんですが。うーん、何がだめなんだろう。
2025年5月25日の日記を表示中
[コメントを書く]