Jetson NanoでSPI通信をしたいと思ったのですが、どうやら初期状態ではSPIは無効になっているとのこと。そこで、SPIを有効にする方法を調べてみました。
Linux PCでJetson Nanoの設定を書き換える
まず、見つけたのはこちらのページ。
Jetsonのデバイスツリーを書き換える方法のようです。前提条件として、Jetson NanoにはL4T(Linux for Tegra) R32.1がインストールしてあり、起動できるようにしておくことが必要です。
あとはこのページに書いてある通りに進めればいいのですが、こちらで紹介されているやり方では、Jetson Nanoとは別にLinux PCが必要になります。
Linux PCをお持ちの方はこちらの方法で試してみてください。
上記のページで作者の方も述べていますが、あくまで非公式のやり方なので、自己責任でお願いします。
Jetson Nano単体で設定を書き換える
次に見つけたのは、こちらのページ。
こちらは、上で紹介した方法を改良したやり方になります。筆者が書いているように、Jetson NanoだけあればSPIを有効にできる方法です。
詳細なやり方は、こちらに書かれているのでその通りにやればSPI通信を有効かできます。しかし、英語なので日本語に訳したメモをここに残しておきます。
1.最新版のtarファイルをこちらからダウンロードして、Jetson Nanoに保存します。この記事を書いた時点では、flash-dtb-update-2019-12-09.tar.gzが最新です。
2.ダウンロードしたtarファイルを解凍します。
3.Jetson Nanoのターミナルを開き、解凍したディレクトリに移動して、
sudo ./flashme.sh /dev/mmcblk0
を実行します。
4.Jetson Nanoを再起動すると、spidev0.0が有効になっています。
有効になっているかどうか確認するには、
ls /dev/spi*
を実行してください。有効化されていれば、dev/spidev0.0と返ってきます。
SPI通信のループバックテスト
SPIを有効化することが出来たので、SPI通信のテストをしましょう。
まずは、pythonのSPI通信モジュール、py-spidevをインストールします。
git clone git://github.com/doceme/py-spidev cd py-spidev sudo python setup.py install
次にループバックテストをします。Jetson NanoのSPI通信に関するピンは次の表のようになっています。
名称 | ピン番号 |
SPI_MOSI | 19 |
SPI_MISO | 21 |
SPI1_SCK | 23 |
SPI1_CS0 | 24 |
SPI1_CS1 | 26 |
ループバックテストの時には、MOSIとMISOをつなぐ、すなわちピン19と21をつなぎます。
ループバックテストのプログラムはこちらで紹介されているものを使います。
#!/usr/bin/env python # loopback test script # connect MOSI and MISO import spidev import time spi = spidev.SpiDev() spi.open(0, 0) def BytesToHex(Bytes): return ''.join(["0x%02X " % x for x in Bytes]).strip() try: while True: resp = spi.xfer2([0x01, 0x02]) print BytesToHex(resp) time.sleep(1) except KeyboardInterrupt: spi.close()
このプログラムをJetson Nano上で実行すると、1秒おきに”0x01 0x02″と表示されます。
以上が、Jetson NanoでSPI通信を有効にするやり方と、ループバックテストで確認するやり方の紹介になります。