Jetson nanoでTPM2.0を使う 〜その1〜

ラズパイで使用していたInfinion SLB9670 TPM2.0 モジュールをJetson nanoで使う際に苦労したのでメモします。

1年ほど前、TPMに興味を持ちInifinion SLB9760 TPM2.0を実装している52PiのEP-0149を購入してました。ほんとは、Infinion純正評価ボードのIRIDUM SLI9670 TPM2.0が欲しかったのですが、EP-0149の2倍の約7,000円程度と高価だったたことと、ガチで使う予定ではなかったのでやめました。

https://wiki.52pi.com/index.php/EP-0149

Tpm967002.jpg

このボードはラズパイ用なのでポン付して、同梱されてるマニュアルやwikiの手順でサックと動作します。そして、TPM Software Stack(TSS)も問題なく動作するので、OpenSSL Engineを使用した鍵生成、署名・検証、PKCS#11での鍵生成もできOpenSSH接続もOKでした。

Tpm967001.jpg

ラズパイのままでもよかったのですが、ラズパイとGPIOピン配置に互換性があるJetson nanoでも動くのでは?という好奇心と、SPIだし、NVIDIA Developer ForumsでもSLB9670を取り上げた書き込みを多く見かけたのでさほど苦労しないだろうなぁと軽い気持ちで始めたのが大間違いでした。。。

 

結論から先に言うと、SLB9670のCSは「Active Low」の電圧レベル仕様は0.4V未満に対して、EP-0149は0.5V程度ありSLB9670は応答してくれません。

 

この点についてはNVIDIA Developer Forumsでも議論されていたのですが、プルダウン抵抗でも付ければOKだろうと軽く読み飛ばしてました(笑)

forums.developer.nvidia.com

 

実際のところEP-0149を全く認識してくれないので、安価USBロジアナを使って各信号を確認してみました。

KeeYees USBロジックアナライザ 24MHz 8チャンネル テストフッククリップ付き USBケーブル付き 8CH UART IIC SPI ARMに対応 FPGAに対応 M100 SCMに対応

ちなみに、EP-0149の各信号は以下のようになっています。

Pin 1 6 19 21 23
Signal +3.3V Gnd MOSI MISO SCLK

CSは、マニュアルやwikiに明記されていませんが、Infinion純正評価ボードのIRIDUM SLI9670 TPM2.0の回路図や、EP-0149の配線パターンから見て「CS1」が使用されていました。

 

SCLKは32MHz(標準値、多分)なのですが、USBロジアナは24MHzまでしかサンプリングできないため、測定時はSCLKを5MHzに落として確認しました。

Jetson nano起動時、Jetson側からSCLK、MOSI、CS1は正常に出力され、TPM通信開始の"80D40000”もちゃんと送信されています。がっ、SLB9670からの応答(MISO dataが"00000000"のまま)はありません。。。

 

下図はラズパイ起動時の波形です。※SCLKは32MHzから5MHzに変更しています

SLB9670の応答であるMISO dataが"00000001"となり、きちんと応答をしていることが確認できます。

 

やはり、Jetson nanoの場合、CS1がLowレベルであると認識されていないようです。

ロジアナ的にはSCLK、MOSI、CS1は問題ないのでTPMドライバとかは大丈夫そうなので安心しました。

 

CS1の0.4V問題をクリアするため、次はプルダウン抵抗などを試してみたいと思います。

 

つづく。

hastaluegoblog.hatenablog.com