ユーザ用ツール

サイト用ツール


gpio制御

GPIO制御

とあるイメージセンサを用いた撮像部を作ることになった。 イメージセンサの撮像開始をGPIO入力でタイミングを取る必要があった。 sysfs経由のGPIO制御だと応答速度が遅い。また、PythonのライブラリJetson.GPIOはよくみかけた。 プロジェクトの要求仕様的に、その遅い応答速度では満足できなかった。 本当は、

  • GPIOへの切替え
  • 出力/入力の切替え

などもすべて自作のGPIO制御部にて実施したかったが、GPIO系の制御レジスタの制御のみでは駄目で(仕様としてはできそうだったのだが)、結局、sysfsの助けを借りて、初期化時はsysfsを用いてポートの初期化を行い、ポートの変化の箇所だけmmap経由でのGPIOレジスタReadとすることで応答速度を確保。

今回、Jetson Xavier NXへのプロジェクト一式を移植する際に、GPIOポートの制御部分のXavier NX対応を検討した。 Jetson Nanoでは、Tegra X1のTRMで確認できたGPIOレジスタの詳細情報が、Xavier NXでは見つからず。

結局、「シェルで/sys/class/gpio経由でポートを制御しながら、mmapでマッピングして値の変化を見るプログラムを動かして」というかなり泥臭い手法で、ようやく、GPIOのReadデータがこのオフセットに、Writeデータはこのオフセットに、などという位置がわかって来て、gpio-tegra186.cも読んで大体把握。ようやく、制御できる目処が立って来たあたりで、、

たまたま、libgpiodの存在を知った。

Qiitaにでも記事をアップしようかと思ったら、libgpiod自体については、 libgpiodの使い方を書いている人がいることに気づいた。

我ながら、libgpiodにたどり着くの、遅い。 振り返ってみると、Jetson NanoでGPIOと格闘していたのは…2021年1月ごろ。そのときにはlibgpiodの存在に気づきたかった。 結構試行錯誤したような記憶が。。。

なので、JetsonシリーズのGPIO制御ということでQiitaに投稿( この記事)。

また、Jetson NanoとJetson Xavier NXだけでなく、Raspberry Pi 4でも動作確認を取ることで、ポータビリティも確認できた。 ざっくりとした応答時間を計測してみたので、以下に紹介する。

  • Nanoは3~7usec
  • Xavier NXは15usec前後
  • Raspberry Pi4では5~10usec

というところ。

ちなみに、この時間は、トリガとなる入力ポートの変化から、それを検知して他のポートの出力ポートに出力するまでの時間をオシロで計測した時間。

この計測をした際に、特に、他のプロセスを動かしていたわけではないが、何か動いていたかもしれないので、参考値ということで。

gpio制御.txt · 最終更新: 2021/12/10 13:14 by makotoa67