Hi All:
The following command cannot produce a picture. Please help to find out the reason. Thank you!
PS:
MAX96712 is configured with 2x4 mode, but the LAN num has set 2 LANs and cannot produce the image.
In 2x4 mode, the LAN num can produce images normally with 4 LANs set.
v4l2-ctl -d /dev/video0 --stream-mmap --stream-to-host 192.168.1.111
Related Information:
Block Hardware Diagram:

camera info:

soft version:
root@tegra:/home/robot# cat /etc/nv_tegra_release
# R35 (release), REVISION: 4.1, GCID: 33958178, BOARD: t186ref, EABI: aarch64, DATE: Tue Aug 1 19:57:35 UTC 2023
Log:
root@tegra:/home/robot# sudo su
root@tegra:/home/robot# cd /sys/kernel/debug/dynamic_debug/
root@tegra:/sys/kernel/debug/dynamic_debug# echo file csi2_fops.c +p > control
root@tegra:/sys/kernel/debug/dynamic_debug#
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/bpmp/debug/clk/vi/mrq_rate_locked
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/bpmp/debug/clk/isp/mrq_rate_locked
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/bpmp/debug/clk/nvcsi/mrq_rate_locked
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/bpmp/debug/clk/emc/mrq_rate_locked
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/bpmp/debug/clk/vi/max_rate |tee /sys/kernel/debug/bpmp/debug/clk/vi/rate
832000000
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/bpmp/debug/clk/isp/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/isp/rate
1011200000
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/bpmp/debug/clk/nvcsi/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/nvcsi/rate
642900000
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/bpmp/debug/clk/emc/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/emc/rate
3199000000
root@tegra:/sys/kernel/debug/dynamic_debug#
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/tracing/tracing_on
root@tegra:/sys/kernel/debug/dynamic_debug# echo 30720 > /sys/kernel/debug/tracing/buffer_size_kb
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/tracing/events/tegra_rtcpu/enable
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/tracing/events/freertos/enable
root@tegra:/sys/kernel/debug/dynamic_debug# echo 2 > /sys/kernel/debug/camrtc/log-level
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/tracing/events/camera_common/enable
root@tegra:/sys/kernel/debug/dynamic_debug# echo > /sys/kernel/debug/tracing/trace
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/tracing/trace
# tracer: nop
#
# entries-in-buffer/entries-written: 0/0 #P:8
#
# _-----=> irqs-off
# / _----=> need-resched
# | / _---=> hardirq/softirq
# || / _--=> preempt-depth
# ||| / delay
# TASK-PID CPU# |||| TIMESTAMP FUNCTION
# | | | |||| | |
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/tracing/trace > /home/robot/trace.log
root@tegra:/sys/kernel/debug/dynamic_debug# dmesg > /home/robot/dmesg.log
root@tegra:/sys/kernel/debug/dynamic_debug# cd /home/robot/
root@tegra:/home/robot# dtc -I dtb -O dts -o dts.txt /boot/dtb/kernel_tegra234-p3767-0000-p3768-0000-a0.dtb >/dev/null 2>&1
dts:
dts.txt (426.7 KB)
trace:
trace.log (4.2 KB)
dmesg:
dmesg.log (74.3 KB)
hello wxsrite,
I got confused with your description.
is it four cameras with 2-lane configuration, right?
if yes… what did you meant… the LAN num can produce images normally with 4 LANs set.
?
or… could you please give an example for above configuration?
Is such that.
In terms of hardware, MAX96712 is connected to ORIN NX through 4LAN, and four cameras can produce pictures. In this case, 2 ports of Orin NX will be occupied;
When the bandwidth is sufficient, we want to connect 4 MAX96712. In this case, we can produce 16 cameras, but we do not have the hardware environment, so we want to use the above environment. Although 4 LANs are connected to the hardware, we I want to configure 2 LANs to verify whether the MAX96712 and Orin NX can be successful.
please refer to Jetson Orin NX Series and Orin Nano Series Design Guide.
Orin Module brings eight MIPI CSI lanes to the connector.
and… are you using customize carrier board, or a Orin Nano carrier?
FYI, if that’s Orin Nano carrier board, p3768 can work with 4-lane camera only on Cam0 slot.
Although my hardware is connected to 4LAN, I want to use 2LAN to run MAX96712. Please help me find out why no data is received under 2LAN. Thank you!
please try configure vc-id
and vc_id
as 0 for your camera nodes.
as follows:
tegra-capture-vi {
compatible = "nvidia,tegra-camrtc-capture-vi";
nvidia,vi-devices = <0x285 0x287>;
nvidia,vi-mapping-size = <0x06>;
nvidia,vi-mapping = <0x00 0x00 0x01 0x00 0x02 0x01 0x03 0x01 0x04 0x00 0x05 0x01>;
nvidia,vi-mapping-names = "csi-stream-id\0vi-unit-id";
nvidia,vi-max-channels = <0x48>;
num-channels = <0x04>;
ports {
#address-cells = <0x01>;
#size-cells = <0x00>;
port@0 {
reg = <0x00>;
endpoint {
vc-id = <0x00>; ------------> vc-id = 0
port-index = <0x02>; ------------> port-index = 2
bus-width = <0x02>; ------------> bus-width = 2
remote-endpoint = <0x288>;
phandle = <0x293>;
};
};
...
host1x@13e00000 {
nvcsi@15a00000 {
num-channels = <4>;
#address-cells = <1>;
#size-cells = <0>;
channel@0 {
reg = <0>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
ar0233_csi_in0: endpoint@0 {
port-index = <2>; ------------> port-index = 2
bus-width = <2>; ------------> bus-width = 2
remote-endpoint = <&ar0233_out0>;
};
};
port@1 {
reg = <1>;
ar0233_csi_out0: endpoint@1 {
remote-endpoint = <&ar0233_vi_in0>;
};
};
};
};
...
ar0233_a@1b {
compatible = "nvidia,ar0233";
reg = <0x1b>;
physical_w = "15.0";
physical_h = "12.5";
sensor_model = "ar0233";
post_crop_frame_drop = [30 00];
use_sensor_mode_id = "true";
def-addr = <0x10>;
clocks = <0x02 0x24 0x02 0x24>;
clock-names = "extperiph1\0pllp_grtba";
mclk = "extperiph1";
channel = [61 00];
nvidia,gmsl-ser-device = <0x6a>;
nvidia,gmsl-dser-device = <0x6b>;
mode0 {
mclk_khz = "24000";
num_lanes = [32 00]; ------------> num_lans=2
tegra_sinterface = "serial_a";
vc_id = [30 00]; ------------> vc_id = 0
discontinuous_clk = "no";
dpcm_enable = "false";
cil_settletime = [30 00];
dynamic_pixel_bit_depth = "16";
csi_pixel_bit_depth = "16";
mode_type = "yuv";
pixel_phase = "yuyv";
active_w = "1920";
active_h = "1080";
readout_orientation = [30 00];
line_length = "2200";
inherent_gain = [31 00];
pix_clk_hz = "74250000";
serdes_pix_clk_hz = "375000000";
gain_factor = "100";
min_gain_val = "100";
max_gain_val = "1200";
step_gain_val = [31 00];
default_gain = "100";
min_hdr_ratio = [31 00];
max_hdr_ratio = [31 00];
framerate_factor = "1000000";
min_framerate = "10000000";
max_framerate = "30000000";
step_framerate = [31 00];
default_framerate = "30000000";
exposure_factor = "1000000";
min_exp_time = "49";
max_exp_time = "40000";
step_exp_time = [31 00];
default_exp_time = "12000";
embedded_metadata_height = [30 00];
};
mode1 {
mclk_khz = "24000";
num_lanes = [32 00]; ------------> lan-num=2
tegra_sinterface = "serial_a";
vc_id = [30 00]; ------------> vc_id = 0
discontinuous_clk = "no";
dpcm_enable = "false";
cil_settletime = [30 00];
dynamic_pixel_bit_depth = "16";
csi_pixel_bit_depth = "16";
mode_type = "yuv";
pixel_phase = "yuyv";
active_w = "1920";
active_h = "1536";
readout_orientation = [30 00];
line_length = "2800";
inherent_gain = [31 00];
pix_clk_hz = "115500000";
serdes_pix_clk_hz = "375000000";
gain_factor = "100";
min_gain_val = "100";
max_gain_val = "1200";
step_gain_val = [31 00];
default_gain = "100";
min_hdr_ratio = [31 00];
max_hdr_ratio = [31 00];
framerate_factor = "1000000";
min_framerate = "10000000";
max_framerate = "30000000";
step_framerate = [31 00];
default_framerate = "30000000";
exposure_factor = "1000000";
min_exp_time = "49";
max_exp_time = "40000";
step_exp_time = [31 00];
default_exp_time = "12000";
embedded_metadata_height = [30 00];
};
ports {
#address-cells = <0x01>;
#size-cells = <0x00>;
port@0 {
reg = <0x00>;
endpoint {
vc-id = <0x00>; ------------> vc-id = 0
port-index = <0x02>; ------------> port-index = 2
bus-width = <0x02>; ------------> bus-width = 2
remote-endpoint = <0x6c>;
phandle = <0x292>;
};
};
};
gmsl-link {
src-csi-port = [62 00];
dst-csi-port = [61 00];
serdes-csi-link = [61 00];
csi-mode = "1x4";
st-vc = <0x00>;
vc-id = <0x00>;
num-lanes = <0x02>;
streams = "ued-u1\0raw12";
};
};
hello wxsrite,
please note that, Orin NX to have CSI0 D1 and CSI1 D0 P/N will always been swizzled for P/N.
you should also use device tree property, lane_polarity
to configure a polarity swap on any lane.
you may see-also reference driver for setting this property,
for instance, $public_sources/hardware/nvidia/platform/t23x/p3768/kernel-dts/cvb/tegra234-camera-rbpcv2-imx219.dtsi
Hi:
I am using Port-index=2, which is CSI2. The above problem does not exist. Is there a polarity problem reported in the log?

hello wxsrite,
but… the code snippet in comnet #8 looks you’re using tegra_sinterface = "serial_a";
did you re-cap correct code snippet? or… you may revise it as serial_c
for running with CSI2.
besides,
may I know what’s the latest status of fetching your CSI2 camera steam?
is there any log for reference? for instance, $ dmesg > klogs.txt
Hi, JerryChang,
video 0/1/2/3 are all on CSI2.
root@tegra:/home/robot# sudo su
root@tegra:/home/robot# cd /sys/kernel/debug/dynamic_debug/
root@tegra:/sys/kernel/debug/dynamic_debug# echo file csi2_fops.c +p > control
root@tegra:/sys/kernel/debug/dynamic_debug#
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/bpmp/debug/clk/vi/mrq_rate_locked
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/bpmp/debug/clk/isp/mrq_rate_locked
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/bpmp/debug/clk/nvcsi/mrq_rate_locked
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/bpmp/debug/clk/emc/mrq_rate_locked
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/bpmp/debug/clk/vi/max_rate |tee /sys/kernel/debug/bpmp/debug/clk/vi/rate
832000000
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/bpmp/debug/clk/isp/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/isp/rate
1011200000
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/bpmp/debug/clk/nvcsi/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/nvcsi/rate
642900000
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/bpmp/debug/clk/emc/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/emc/rate
3199000000
root@tegra:/sys/kernel/debug/dynamic_debug#
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/tracing/tracing_on
root@tegra:/sys/kernel/debug/dynamic_debug# echo 30720 > /sys/kernel/debug/tracing/buffer_size_kb
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/tracing/events/tegra_rtcpu/enable
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/tracing/events/freertos/enable
root@tegra:/sys/kernel/debug/dynamic_debug# echo 2 > /sys/kernel/debug/camrtc/log-level
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/tracing/events/camera_common/enable
root@tegra:/sys/kernel/debug/dynamic_debug# echo > /sys/kernel/debug/tracing/trace
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/tracing/trace
# tracer: nop
#
# entries-in-buffer/entries-written: 0/0 #P:8
#
# _-----=> irqs-off
# / _----=> need-resched
# | / _---=> hardirq/softirq
# || / _--=> preempt-depth
# ||| / delay
# TASK-PID CPU# |||| TIMESTAMP FUNCTION
# | | | |||| | |
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/tracing/trace > /home/robot/trace.txt
root@tegra:/sys/kernel/debug/dynamic_debug# dmesg > /home/robot/dmesg.txt
dmesg.txt (76.7 KB)
trace.txt (5.9 KB)
hello wxsrite,
according to kernel messages, it’s reporting NULL VI
, which means camera node isn’t available.
[ 283.008470] debug:[520, ar0233_start_streaming].
[ 285.696473] tegra-camrtc-capture-vi tegra-capture-vi: uncorr_err: request timed out after 2500 ms
[ 285.705599] tegra-camrtc-capture-vi tegra-capture-vi: err_rec: attempting to reset the capture channel
[ 285.715607] (NULL device *): vi_capture_control_message: NULL VI channel received
I’ve further check tracing logs, and there’s no frame packet related messages reported.
it may also due to above NULL VI
failure.
BTW, since you’re running with Orin NX, it’s actually using CSI-5 driver. (i.e. csi5_fops.c)
thanks for sharing such info.
did you have 4 physical camera devices connected as well?
had you also check my previous comments to revise tegra_sinterface = "serial_c";
in device tree property setting?
Hi,JerryChang:
Because I am worried that the CSI rate is not enough, only one camera is currently connected, and the vc used is 0.
The following is the dtsi content:
2LAN:----->Configuration currently in use
tegra234-camera-ar0233-max96712-2lan.dtsi.txt (28.7 KB)
4LAN:----->Verified configuration
tegra234-camera-ar0233-max96712-4lan.dtsi.txt (28.7 KB)
hello wxsrite,
you should have 4 cameras all using CSI-C, and it’s VC to distinguish them.
hence,
please update tegra_sinterface
for using tegra_sinterface = "serial_c";
and… dst-csi-port
is the destination CSI port you’re used, it should be CSI-C per your settings.
moreover,
there’s known issue that device tree settings must be identical with your physical camera connections,
please have all camera connected, or, you may revise device tree to leave only single camera defined .
The camera driver can adapt to all sensors. The following content is the driver code written by myself and not used. They are used to configure the deserializer and deserializer. I configured these configurations directly in the user mode.
gmsl-link {
src-csi-port = "b";
dst-csi-port = "a";
serdes-csi-link = "c";
csi-mode = "1x4";
st-vc = <0>;
vc-id = <2>;
num-lanes = <2>;
streams = "ued-u1", "raw12";
};
What I am currently testing is /dev/video0, and the corresponding devices are ar0233_a@1b。
so… please revise device tree to leave only single camera defined .
There is still a problem when executing the following command:
v4l2-ctl -d /dev/video0 --stream-mmap --stream-to-host 192.168.1.111
root@tegra:/home/robot# sudo su
cd /sys/kernel/debug/dynamic_debug/
echo file csi5_fops.c +p > control
echo 1 > /sys/kernel/debug/bpmp/debug/clk/vi/mrq_rate_locked
echo 1 > /sys/kernel/debug/bpmp/debug/clk/isp/mrq_rate_locked
echo 1 > /sys/kernel/debug/bpmp/debug/clk/nvcsi/mrq_rate_locked
echo 1 > /sys/kernel/debug/bpmp/debug/clk/emc/mrq_rate_locked
cat /sys/kernel/debug/bpmp/debug/clk/vi/max_rate |tee /sys/kernel/debug/bpmp/debug/clk/vi/rate
cat /sys/kernel/debug/bpmp/debug/clk/isp/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/isp/rate
cat /sys/kernel/debug/bpmp/debug/clk/nvcsi/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/nvcsi/rate
cat /sys/kernel/debug/bpmp/debug/clk/emc/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/emc/rate
root@tegra:/home/robot# cd /sys/kernel/debug/dynamic_debug/
root@tegra:/sys/kernel/debug/dynamic_debug# echo file csi5_fops.c +p > control
root@tegra:/sys/kernel/debug/dynamic_debug#
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/bpmp/debug/clk/vi/mrq_rate_locked
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/bpmp/debug/clk/isp/mrq_rate_locked
echo 30720 > /sys/kernel/debug/tracing/buffer_size_kb
echo 1 > /sys/kernel/debug/tracing/events/tegra_rtcpu/enable
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/bpmp/debug/clk/nvcsi/mrq_rate_locked
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/bpmp/debug/clk/emc/mrq_rate_locked
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/bpmp/debug/clk/vi/max_rate |tee /sys/kernel/debug/bpmp/debug/clk/vi/rate
832000000
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/bpmp/debug/clk/isp/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/isp/rate
1011200000
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/bpmp/debug/clk/nvcsi/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/nvcsi/rate
642900000
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/bpmp/debug/clk/emc/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/emc/rate
3199000000
root@tegra:/sys/kernel/debug/dynamic_debug#
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/tracing/tracing_on
root@tegra:/sys/kernel/debug/dynamic_debug# echo 30720 > /sys/kernel/debug/tracing/buffer_size_kb
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/tracing/events/tegra_rtcpu/enable
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/tracing/events/freertos/enable
root@tegra:/sys/kernel/debug/dynamic_debug# echo 2 > /sys/kernel/debug/camrtc/log-level
root@tegra:/sys/kernel/debug/dynamic_debug# echo 1 > /sys/kernel/debug/tracing/events/camera_common/enable
root@tegra:/sys/kernel/debug/dynamic_debug# echo > /sys/kernel/debug/tracing/trace
cat /sys/kernel/debug/tracing/trace
root@tegra:/sys/kernel/debug/dynamic_debug# cat /sys/kernel/debug/tracing/trace
# tracer: nop
#
# entries-in-buffer/entries-written: 0/0 #P:8
#
# _-----=> irqs-off
# / _----=> need-resched
# | / _---=> hardirq/softirq
# || / _--=> preempt-depth
# ||| / delay
# TASK-PID CPU# |||| TIMESTAMP FUNCTION
# | | | |||| |
dmesg.txt (83.7 KB)
dts.txt (427.1 KB)
trace.txt (4.2 KB)
hello wxsrite,
I got confused. your device tree property setting has defined this ar0233_a
for using CSI-A.
it doesn’t works since you going to test camera on CSI-C.
You said that CSI-A corresponds to the hardware CSI0, and CSI-C corresponds to the hardware CSI2. Is my understanding correct?
If so, we use CSI2, which is specified via port-index=2. How did you determine that you were using CSI-A?
CSI0 → CSIA
CSI1 → CSIB
CSI2 → CSIC
CSI3 → CSID
it’s tegra_sinterface = "serial_a";
to defined you’re using CSI-A