jetson nanoにimx219のカメラモジュールを繋いで、gst–launch-1.0 などのコマンドで映像を出すことはとりあえずできた。
次のステップとしてカメラ(センサ)ドライバの挙動を理解していきたい。
imx219はmipi-csi2出力なので、レジスタ設定のシリアル通信はi2cによって行われている。linuxのお勉強も含めて、i2cバスのどこにデバイスがアサインされていて、どのように認識しているのかを確認していく。
I2C
カメラへのI2CはI2C MUXを通して行われている。 まずはi2cdetect コマンドで、i2cバスの一覧を確認してみる。
1 |
hiko@hiko-desktop:/sys/firmware/devicetree/base$ sudo i2cdetect -l<br>[sudo] password for hiko: <br>i2c-3i2c 7000c700.i2c I2C adapter<br>i2c-1i2c 7000c400.i2c I2C adapter<br>i2c-8i2c i2c-6-mux (chan_id 1) I2C adapter<br>i2c-6i2c Tegra I2C adapter I2C adapter<br>i2c-4i2c 7000d000.i2c I2C adapter<br>i2c-2i2c 7000c500.i2c I2C adapter<br>i2c-0i2c 7000c000.i2c I2C adapter<br>i2c-7i2c i2c-6-mux (chan_id 0) I2C adapter<br>i2c-5i2c 7000d100.i2c I2C adapter |
I2c-6-muxってなっているのが2つのMIPIポート用のI2Cのスイッチャーだろう。 このスイッチャーがさらにi2c-7, 8に登録されているようだ。
カメラはch0に接続しているので、i2c-7(chan_id 0)のアドレスをスキャンしてみる。
1 |
hiko@hiko-desktop:~$ i2cdetect -y -r 7<br> 0 1 2 3 4 5 6 7 8 9 a b c d e f<br>00: -- -- -- -- -- -- -- -- -- -- -- -- -- <br>10: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <br>20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <br>30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <br>40: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <br>50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <br>60: -- -- -- -- -- -- -- -- -- -- 6a -- -- -- -- -- <br>70: -- -- -- -- -- -- -- -- |
imx219はアドレス0x10であるが、しっかりと0x10にデバイスが存在している。
カーネルドライバによって使用されているので UU
の表示になっている。
さらに、0x10がimx219であるかどうか確認を行ってみる。
i2cのバス上にいるデバイスは/sys/class/i2c-adapter/i2c-X/
を見ると確認できる。
今回はi2c-7のアドレス0x10のデバイスなので、/sys/class/i2c-adapter/i2c-7/7-0010
にデバイスの情報がある。
さらにその中の modalias
にデバイスの別名が記載されている。
下記のように確認する。
1 2 |
hiko@hiko-desktop:/sys/class/i2c-adapter/i2c-7/7-0010$ cat modalias i2c:imx219 |
ということで、ちゃんとimx219の認識を確認することができた。