I am attempting to configure dual IMX412c sensors on a custom carrier board (Antmicro Jetson Orin Baseboard) with an Orin NX 8 GB SOM.
This board has a unique I/O arrangement.
- Cameras are NOT connected directly to one of the Orin NX's i2c buses, but are on separate i2c buses managed by an i2c multiplexer (NXP PCA9548A) at address 0x70 on i2c0.
- Likewise, camera power-control GPIOs are also NOT directly connected to the Orin's GPIO, but instead are run by a GPIO multiplexer (NXP PCAL6408A) at 0x20 on i2c0.
The GPIO mux is properly detected and I have verified that the cameras are receiving power (I have the GPIO lines locked "high" (camera power lines are active high.)
[ 7.346186] pca953x 1-0020: supply vcc not found, using dummy regulator
[ 7.353151] pca953x 1-0020: using no AI
[ 7.359941] gpio-308 (csia_pen-hog): hogged as output/high
[ 7.366220] gpio-309 (csib_pen-hog): hogged as output/low
[ 7.372399] gpio-310 (usbc1_pen-hog): hogged as output/high
[ 7.378761] gpio-311 (disable_poe_dcdc-hog): hogged as output/low
[ 7.385527] gpiochip2: registered GPIOs 308 to 315 on 1-0020
And the i2c mux also appears to be properly configured, and indeed the cameras themselves appear to probe as well... mostly.
[ 7.394145] pca954x 2-0070: supply vcc not found, using dummy regulator
[ 7.401074] pca954x 2-0070: supply vcc-pullup not found, using dummy regulator
[ 7.408587] pca954x 2-0070: pca954x_probe: forcing device bus number, start 30.
[ 7.416742] vc_mipi 30-001a: vc_probe(): Probing UNIVERSAL VC MIPI Driver (v0.18.3)
[ 7.519194] i2c 30-0010: +--- VC MIPI Camera -----------------------------------+
[ 7.526887] i2c 30-0010: | MANUF. | Vision Components MID: 0x0427 |
[ 7.534577] i2c 30-0010: | MODULE | ID: 0x0412 REV: 0004 |
[ 7.549169] i2c 30-0010: | SENSOR | SONY IMX412C |
[ 7.556859] i2c 30-0010: +--------+---------------------------------------------+
[ 7.564552] i2c 30-0010: +--- Sensor Registers ------+--------+--------+--------+
[ 7.572246] i2c 30-0010: | | low | mid | high |
[ 7.579940] i2c 30-0010: +---------------------------+--------+--------+--------+
[ 7.587628] i2c 30-0010: | idle | 0x0100 | | |
[ 7.595321] i2c 30-0010: | horizontal start | 0x0345 | 0x0344 | |
[ 7.603009] i2c 30-0010: | vertical start | 0x0347 | 0x0346 | |
[ 7.610698] i2c 30-0010: | horizontal end | 0x0349 | 0x0348 | |
[ 7.618394] i2c 30-0010: | vertical end | 0x034b | 0x034a | |
[ 7.626090] i2c 30-0010: | hor. output width | 0x034d | 0x034c | |
[ 7.633784] i2c 30-0010: | ver. output height | 0x034f | 0x034e | |
[ 7.641480] i2c 30-0010: | exposure | 0x0200 | 0x0203 | 0x0202 |
[ 7.649179] i2c 30-0010: | gain | 0x0205 | 0x0204 | |
[ 7.656873] i2c 30-0010: +---------------------------+--------+--------+--------+
[ 7.664571] i2c 30-0010: | clock for ext. trigger | 0 Hz |
[ 7.672276] i2c 30-0010: | pixel clock | 0 Hz |
[ 7.679971] i2c 30-0010: | shutter offset | 0 us |
[ 7.687669] i2c 30-0010: +---------------------------+--------------------------+
[ 7.695364] i2c 30-0010: +--- Module Modes -------+---------+---------+---------+
[ 7.703062] i2c 30-0010: | # | rate | lanes | format | type | binning |
[ 7.703064] i2c 30-0010: +----+---------+---------+---------+---------+---------+
[ 7.703070] i2c 30-0010: | 0 | 1350 | 2 | RAW10 | STREAM | 0 |
[ 7.703072] i2c 30-0010: | 1 | 1350 | 4 | RAW10 | STREAM | 0 |
[ 7.719181] i2c 30-0010: | 2 | 1350 | 2 | RAW10 | SLAVE | 0 |
[ 7.719182] i2c 30-0010: | 3 | 1350 | 4 | RAW10 | SLAVE | 0 |
[ 7.734578] i2c 30-0010: +----+---------+---------+---------+---------+---------+
[ 7.749622] i2c 30-0010: vc_init_ctrl_imx412(): Initialising module control for IMX412
[ 7.765030] i2c 30-0010: +-------+--------+------------+-----------+
[ 7.806150] i2c 30-0010: | lanes | format | exposure | framerate |
[ 7.812690] i2c 30-0010: | | | max [us] | max [mHz] |
[ 7.819219] i2c 30-0010: +-------+--------+------------+-----------+
[ 7.825761] i2c 30-0010: | 2 | RAW10 | 1058097 | 20028 |
[ 7.832289] i2c 30-0010: | 4 | RAW10 | 529048 | 40057 |
[ 7.838820] i2c 30-0010: | 2 | RAW10 | 1058097 | 20028 |
[ 7.838822] i2c 30-0010: | 4 | RAW10 | 529048 | 40057 |
[ 7.838824] i2c 30-0010: | 2 | RAW10 | 1058097 | 20028 |
[ 7.838827] i2c 30-0010: | 4 | RAW10 | 529048 | 40057 |
[ 7.838829] i2c 30-0010: | 2 | RAW10 | 1058097 | 20028 |
[ 7.878951] i2c 30-0010: | 4 | RAW10 | 529048 | 40057 |
[ 7.885496] i2c 30-0010: | 2 | RAW10 | 1058097 | 20028 |
[ 7.892026] i2c 30-0010: | 4 | RAW10 | 529048 | 40057 |
[ 7.898570] i2c 30-0010: | 2 | RAW10 | 1058097 | 20028 |
[ 7.905112] i2c 30-0010: | 4 | RAW10 | 529048 | 40057 |
[ 7.911653] i2c 30-0010: +-------+--------+------------+-----------+
[ 7.918184] i2c 30-0010: VC MIPI Core successfully initialized
[ 7.924176] vc_mipi 30-001a: vc_init_io(): Init trigger and flash mode
[ 7.939297] i2c 30-0010: vc_mod_set_trigger_mode(): Set trigger mode: DISABLED
[ 7.954051] i2c 30-0010: vc_mod_set_io_mode(): Set IO mode: DISABLED
[ 7.965789] vc_mipi 30-001a: vc_init_frmfmt(): Init frame (width: 4032, height: 3040, fps: 0)
[ 7.980174] vc_mipi 30-001a: vc_init_binning(): Init binning modes
[ 7.980373] vc_mipi 30-001a: tegracam sensor driver:vc_mipi_v2.0.6
[ 7.990550] tegra-camrtc-capture-vi tegra-capture-vi: subdev vc_mipi 30-001a bound
[ 8.009161] vc_mipi 30-001a: vc_core_set_num_lanes(): Set number of lanes 4
[ 8.016330] vc_mipi 30-001a: vc_init_lanes(): Init lanes (num_lanes: 4)
[ 8.023138] vc_mipi 30-001a: vc_init_tegra_controls(): Read control gain (min: 0, max: 48000, default: 0)
[ 8.032974] vc_mipi 30-001a: vc_init_tegra_controls(): Overwrite control exposure (min: 1, max: 529048, default: 10000)
[ 8.044065] vc_mipi 30-001a: vc_init_tegra_controls(): Overwrite control framerate (min: 0, max: 40057, default: 0)
The cameras do appear to be communicating (at least somewhat) over i2c, as much of the probed data is correct and makes sense (module name and ID, revision, MID, sensor name, etc.) I am unsure of what the correct values for some of the properties should be (horizontal start, vertical start, etc.) however I am almost certain that some of them are bogus (for example, ext. trigger clock, pixel clock, and shutter offset of 0 looks bogus to me.)
I have tried running image capture commands (nvgstcapture-1.0, etc.) and all I see is a completely black image.
Any advice/assistance is much appreciated. I am wondering (hoping) if there is something simple that I have overlooked, because this seems like it is very close to working.
Below I have attached my .dtsi file as well as the full kernel log (dmesg.)
Artifacts:
I am attempting to configure dual IMX412c sensors on a custom carrier board (Antmicro Jetson Orin Baseboard) with an Orin NX 8 GB SOM.
This board has a unique I/O arrangement.
The GPIO mux is properly detected and I have verified that the cameras are receiving power (I have the GPIO lines locked "high" (camera power lines are active high.)
And the i2c mux also appears to be properly configured, and indeed the cameras themselves appear to probe as well... mostly.
The cameras do appear to be communicating (at least somewhat) over i2c, as much of the probed data is correct and makes sense (module name and ID, revision, MID, sensor name, etc.) I am unsure of what the correct values for some of the properties should be (horizontal start, vertical start, etc.) however I am almost certain that some of them are bogus (for example, ext. trigger clock, pixel clock, and shutter offset of 0 looks bogus to me.)
I have tried running image capture commands (nvgstcapture-1.0, etc.) and all I see is a completely black image.
Any advice/assistance is much appreciated. I am wondering (hoping) if there is something simple that I have overlooked, because this seems like it is very close to working.
Below I have attached my .dtsi file as well as the full kernel log (dmesg.)
Artifacts: