Jetson nanoでTPM2.0を使う 〜その2〜
「その1」のつづきです。
CS1の0.4V問題をクリアする
①プルダウン抵抗
プルダウン抵抗を入れてLowレベルを下げる方法を試してみました。ラズパイはプルダウン抵抗が内蔵されているので、その抵抗値に合わせてみました。色々調べたところ10kΩ程度ということでしたので、抵抗を追加してみました。
再起動してカーネルメッセージを確認すると、TPMは認識しているようですが、動いていません。。。
tpm tpm0: tpm_transmit: tpm_send: error -5
tpm_tis_spi: probe of spi0.0 faild with error -5
ロジアナで波形を見てみると、MISOの応答が返るようになりました。
しかし、その後、SCLKに対してのMISOの応答はありません(0x00)。
ちなみに、ラズパイはSCLKに対してMISO応答は0x81となります。
ロジアナだけでは細かいことがわかりませんので、次はデジタルオシロスコープで波形を確認しました(写真撮り忘れてありません、ごめんなさい)。
すると、CS1波形がノイズで不安定になっており、TPM通信を不安定になっている気がします。抵抗値を色々変更しましたが、ノイズが安定しなかったため、この案は廃案としました。 ※ハードの知識があまりないので (^^;
②TPMボード内のプルアップ抵抗を外す
TPMボード EP0149の回路図がありませんでしたので、Infinion SLB9670 TPM2.0モジュールの回路図を参考にEP0149の回路を確認しました。
Infinionモジュールは、CSを10kΩ[R8]抵抗(赤丸部分)でプルアップしていました。このプルアップ抵抗を外してしまえばプルダウンする必要もなさそうです(ハード知識がないので正解かどうかはわかりません。。。)
テスターで確認したところ、EP0149のプルアップ抵抗は下の赤丸部分で、Infinionと同じ10kΩでした。この抵抗を外すと0.4V問題が解決しそうです!
デジタルオシロスコープで確認してみました。
一番下の緑波形がCSで、ちゃんとLowレベルは0.0Vになっており問題なしです。
しかし、残念ながらうまく動きませんでした。
途中からMSIOがHiレベルのまま(下の赤丸部分)になり、TPMボードからの応答がなくなっています_| ̄|○
原因調査
ラズパイとJetson nanoのCS波形を見比べてみると異なっています。
Jetson nanoはSCLKを出力するたびにCSはLowレベルとなりますが、ラズパイはLowレベルの間にSCLKを2回繰り返しています。つまり、TPMボードに命令を出し結果を受け取るまでCSはLowレベルに固定する必要があるみたいです。
まとめ
CSの0.4V問題は解決しましたが、CS制御の問題が見えてきました。
デバイスドライバーには手を付けたくないなぁ。。。。
つづく。