トホホな疑問(19) Jetson Nano、GPIO入力つづき

前回、Jetson Nano(正確に言えば Jetson Nano Developer Kit Carrier Board)にPIRセンサ(人感センサ)を接続しようとしたら、ラズパイのときより抵抗値の小さなプルアップにしないと動かない件を書かせていただきました。今回はその理由を調べたので記録しておきます。結局、モジュールとしてのJetson Nanoではなく、それを搭載しているCarrier Boardの回路が理由でしたんですが。

※「トホホな疑問」投稿順Indexはこちら

まず、私がつづめて

Jetson Nano

と呼びならわしてきた、Nvidia製の以下の写真のボードですが、

正確に記述するならば、

Jetson Nano Module を搭載した Jetson Nano Developer Kit carrier board

であります。上の写真でいうと、ネジ止めされている放熱フィンのついているものが、Jetwon Nano Moduleであり、これは反対側のSODIMMコネクタに差し込まれています。そのSODIMMコネクタを中央に、左側に見える40ピンのピンヘッダ(これがラズパイと互換配置の「GPIOヘッダ」)やら、後ろに見えるUSBやEthernetのコネクタ、電源コネクタなどを搭載しているのがJetson Nano Developer Kit carrier boardです。

Jetson Nano Moduleは、Nvidiaのデータシート的には、”NVIDIA Jetson Nano System-on-Module”です。面倒なので以下もJetson Nano Moduleと書いています。モジュール上の放熱フィンの下に中核であるSoCが搭載されている筈です。このSoC、Tegra X1に似ているけどちょっと違うように見えるもの、のようです。

  • Tegra X1であると、Arm CPUコアが bigLITTLE構成でA57を4個、A53を4個
  • Jetson Nano ModuleではA57 4個のみ記載、A53の記載なし

 

  • Tegra X1であると、Maxwell GPUコアは256個
  • Jetson Nano Moduleでは、Maxwell GPUコアは128個

という具合で、Tegra X1のサブセットに見えます。調べた限りJetson Nano Moduleとしてのデータシートは存在しますが、搭載SoCについては、特に言及がありません。

しかし、ここで言いたいことは、

ラズパイ互換のGPIOピンヘッダは、直接、Jetson Nano Moduleから出ているわけではない

ということです。GPIOヘッダの信号とModuleの信号との間には、Carrier Board上のICが存在します。Texas Instruments製

TXB0108 8-Bit Bidirectional Voltage-Level Translator

であります。モジュールの1.8V系の信号をGPIOヘッダ上では3.3Vに変換するためのレベルシフタです。これがあるお陰で、3.3V電源を与えているPIRセンサの信号をラズパイ互換のGPIOヘッダに取り付けて動作できるというわけです。Carrier Boardの回路図を見れば、前回使用した、GPIOピン40番には、

I2S0_SDOUT_LS

というお名前がついており、上記のレベルシフタを通った後は、

I2S0_SDOUT

となって、SODIMMのJetson Nano Moduleに接続されていることが分かります。結局のところ、PIRセンサに接続されている信号は、TXB0108の信号なので、プルアップの抵抗値を決めるにあたってはそちらを参照しておかないとならなかったのでした。ここで、TI社のデータシートから、TXB0108のI/O Cellの図面を引用させていただきましょう。

Carrier Boardの場合、図のA側が1.8V系で、B側が3.3V系とみてくだされ。B側がレベル”0″からレベル”1”に信号が変化するときを考えます。下の方の回路を通って、まずT3が”One Shot”で一時的にONになってA側に”1″が出力され、”One Shot”が終わった後は、4kと書かれた抵抗を介して接続されているインバータから”1″が出力されつづけるようになっています。ところが、このチップは双方向なので、A側の信号もB側に通過するようになっており、信号が安定するときには一種のラッチとして動作することが分かります。さて、B側にPIRセンサを接続したところを想像してくだされや。PIRセンサの出力信号はオープンドレインなのでロウに引くことはできますが、ハイレベルは、内蔵の47kΩの弱いプルアップ抵抗だけです。このとき、A側に接続されているJetson NanoのGPIO端子は、ソフトウエア上入力に指定してあるものの、リセット後の初期値はというと、ロウ出力です。つまり、A側から0がBに向かって出力されている状態。ひとたびA側が0となれば上の方の経路を通じてB側にも4kΩで0が出力されつづけております。当然、47kΩ介したハイと4kΩのロウの引っ張り合いとなり、3.3V電源ならばその電位は約0.26Vにしかなりませぬ。このチップがハイを認識するためには、VIH=VCCI*0.65、3.3V電源ならば2.15V弱の電圧が必要とデータシートにあります。当然ハイにならず、ロウのまま。前回は、内蔵47kで駄目だったので、たまたま実験ボードのI2C用に繋がっていた10kΩでつっても駄目だったです。上記の回路が分かっていれば、10kΩでも約0.94Vとまだまだだったことが知れます。結局、2kΩで動作しました。2kΩだと約2.2Vとなり、ようやくハイに認識されたと思われます。まあ、DC的な電子工作実験としては良いですが、量産など考えると、抵抗の2kΩにバラツキあり、またTXB0108にもバラツキあり、また、通す信号の周波数によってはAC的に間に合わないということもあるかもしれないので、「目の前になぜか」ころがっていた2kΩで動いたというのはホント「たまたま」の僥倖というべきかと思います。今回は、

端子配置がラズパイ互換だと言っても、電気特性まで互換だと思うなよ

接続する前に、ちゃんと調べよ!ということでしょうかね。

トホホな疑問(18) Jetson Nano、GPIO 入力、プルアップ?

トホホな疑問(20) Raspberry Pi ドキュメントの闇