I2c bus number and video node/zh
1 不同板子上的i2c bus序号
对于MIPI CSI-2接口的摄像机模组来说,普遍提供了i2c总线作为参数配置的通信通道。用户使用i2c协议来读写摄像机的寄存器。我们提供了一系列的shell脚本来方便这个操作,比如VEYE-MIPI-X I2C.sh,CS-MIPI-X I2C.sh,VEYE-MIPI-IMX335 i2c script。
一般而言,每一个主板上会为每个MIPI CSI-2接口提供一个配套的i2c总线。我们所有的脚本,都可以使用 -b [bus numer]
选项来指明此次操作针对哪个i2c bus总线。下面我们总结了常用的主板的i2c bus序号。
1.1 Raspberry pi
1.1.1 General
对于只有1个MIPI CSI-2口的树莓派主板,i2c总线序号是10。如果你的piOS很老,那么有可能是0。
特别的,对于Computer module系列。做如下说明:
1.1.2 CM3
CM3 使用i2c-1分时复用来访问不同的摄像机模组。
./camera_i2c_config [cameranum]
cameranum | description |
---|---|
0 | CAM0 |
1 | CAM1 |
1.1.3 CM4
CM4使用两个独立的i2c总线访问两个摄像机模组。
./camera_i2c_config
i2c bus num | description |
---|---|
0 | CAM0 |
10 | CAM1 |
1.2 Nvidia Jetson
下面的描述仅仅针对Nvidia官方的开发板,第三方底板需与厂家确认。
1.2.1 AGX-Xavier,AGX-Orin和 TX2开发板
ADP-N1-V2.0有6个MIPI CSI-2接口,对应的i2c序号是30-35。
cam index | i2c number |
---|---|
0 | 30 |
1 | 31 |
2 | 32 |
3 | 33 |
4 | 34 |
5 | 35 |
1.2.2 Xavier NX 和 TX2 NX
存在两种底板
cam index | i2c number |
---|---|
0 | 10 |
1 | 9 |
cam index | i2c number |
---|---|
0 | 9 |
1 | 10 |
1.2.3 Nano B01
cam index | i2c number |
---|---|
0 | 7 |
1 | 8 |
1.2.4 Nano A02和Nano 2GB
i2c序号为6。
1.3 NXP i.MX platform
1.3.1 AVNET Maaxboard(mini)
i2c序号为0。
1.3.2 MYIR i.MX8 board
cam index | i2c number |
---|---|
0 | 0 |
1 | 1 |
1.3.3 google Coral board
i2c序号为1。
1.4 Rockchip platform
1.4.1 ROC-RK3566-PC
i2c序号为4。
1.4.2 ROC-RK3588S-PC
i2c序号为7。
1.5 工具软件
下面的两个命令行工具可以辅助理解和查找问题。
1.5.1 i2cdetect
在linux命令下,执行以下命令来探测i2c总线上的所有i2c设备地址。通常情况下,我们的模块地址是0x3b。
i2cdetect -y -r [busnumber]
1.5.2 dmesg
dmesg可以打印出linux kernel启动阶段的日志,也包括我们摄像机模组的驱动日志。仔细观察可以看到启动阶段的i2c probe流程以及是否成功的信息。
2 /dev/video设备节点的说明
一般情况下,我们为mipi模组在不同平台上实现了v4l2标准的驱动。Linux kernel启动时会根据dts的指示找到对应的驱动,并probe摄像头。成功后生成/dev/videoX设备节点,其中X是根据probe到的顺序而生成的数字。
这容易造成一个常见的误解,在此说明一下。
对于支持多个mipi摄像头的主板,每个摄像头的i2c序号是由摄像头安装位置所确定的,但是生成的/dev/videoX节点名称却不能提前确定。比如说,我们在agx板子安装两个摄像头,安装到cam2和cam4的位置,那么:
camera number | 安装位置 | i2c bus | /dev/video设备节点 |
---|---|---|---|
1 | cam2 | 32 | /dev/video0 |
2 | cam4 | 34 | /dev/video1 |