Jetson/l4t/Camera BringUp
Contents
Get Prepared
- Please read through "Camera Development" section in https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/camera_sensor_prog.html#
FAQ
Tips for debugging
- Boost the clock for debug.
sudo su 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 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
TX1
- if you saw below error message
tegra-vi4 15700000.vi: PXL_SOF syncpt timeout! err = -11
- please check below 4 items in your sensor device tree, these should follow the settings in your sensor datasheet
mode0 { cil_settletime = "0"; active_w = "1920"; active_h = "1080"; embedded_metadata_height = "1";
- if you saw below error message
video4linux video0: MW_ACK_DONE syncpoint time out!
- Enable the csi debug message from below command, and use v4l2-ctl to verify the driver first.
sudo su cd /sys/kernel/debug/dynamic_debug/ echo file csi2_fops.c +p > control
v4l2-ctl -d /dev/video0 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=3
- please check below
please review the configuration of "line_length" in sensor driver try to increase the delay between video lines data send via CSI review the sensor datasheet to check the settings of FPS range
TX2
- if you saw below message it could be the sensor output embedded data line but DT didn't declare embedded_metadata_height or it value is 0
arm-smmu 12000000.iommu: Unhandled context fault: iova=0x00000000, fsynr=0x200011, cb=19, sid=4(0x4 - VI), pgd=0, pud=0, pmd=0, pte=0
Steps to enable more debug messages
- To enable logs from user-space for more details
sudo su kill the process of argus_daemon/nvargus-daemon or nvcamera-daemon export enableCamPclLogs=5 export enableCamScfLogs=5 /usr/sbin/argus_daemon(nvargus-daemon) option for argus /usr/sbin/nvcamera-daemon option for gst-launch launch camera from another console
- To enable trace for more information
echo 1 > /sys/kernel/debug/tracing/tracing_on echo 30720 > /sys/kernel/debug/tracing/buffer_size_kb echo 1 > /sys/kernel/debug/tracing/events/tegra_rtcpu/enable echo 1 > /sys/kernel/debug/tracing/events/freertos/enable echo 2 > /sys/kernel/debug/camrtc/log-level echo 1 > /sys/kernel/debug/tracing/events/camera_common/enable echo > /sys/kernel/debug/tracing/trace cat /sys/kernel/debug/tracing/trace
VI error decoder map from trace
CSIMUX_FRAME data bit field bit 0:2 STREAM_ID bit 3 VPR bit 4 FS_flag bit 5 FE_flag bit 6 FE_CSI_FAULT bit 7 FS_FAULT bit 8 FORCE_FE_FAULT bit 9 FE_FRAME_ID_FAULT bit 10 PXL_ENABLE_FAULT bit 20:25 CSI_FAULT_CODE CSI_FAULT_CODE data bit field bit 20 PP FSM timeout bit 21 PH single bit error repaired bit 22 CRC error on payload bit 23 Line short error
The bit 22 CRC error on payload. It could be CRC error at frame end package. Please contact with sensor vendor to check the CRC header.
kworker/0:1-2059 [000] ...1 434.733650: rtcpu_vinotify_handle_msg: tstamp:13948014423 tag:CSIMUX_FRAME channel:0x00 frame:2 vi_tstamp:1063112012 data:0x00400060
The bit 5 and 7 indicate lose the FE package cause the FS_FAULT
kworker/4:0-30 [004] ...1 241.772651: rtcpu_vinotify_handle_msg: tstamp:7868711648 tag:CSIMUX_FRAME channel:0x00 frame:1 vi_tstamp:3573743671 data:0x000000a0
The CSIMUX_FRAME bit 21 PH single bit error repaired. Possible the sensor didn't send the ECC package.
kworker/4:0-2238 [004] ...1 543.467972: rtcpu_vinotify_handle_msg: tstamp:17333540584 tag:CSIMUX_FRAME channel:0x00 frame:0 vi_tstamp:153670980 data:0x00200060
Can try disable the ECC check by modify the REG INTR_STATUS/ERR_INTR_MASK/ERROR_STATUS2VI_MASK to try it
CHANSEL_FAULT data bit field bit 16:31 LINE_NUMBER bit 15 DTYPE_MISMATCH bit 14 EMBED_INFRINGE bit 13 EMBED_LONG_LINE bit 12 EMBED_SPURIOUS bit 11 EMBED_RUNAWAY bit 10 EMBED_MISSING_LE bit 9 PIXEL_SHORT_LINE bit 8 PIXEL_LONG_LINE bit 7 PIXEL_SPURIOUS bit 6 PIXEL_RUNAWAY bit 5 PIXEL_MISSING_LE bit 4 PIXEL_LINE_TIMER bit 3 EMBED_EOF bit 2 EMBED_SOF bit 1 PIXEL_EOF bit 0 PIXEL_SOF
The trace show the 0x0ada0040 0x40 means CHANSEL_FAULT of PIXEL_RUNAWAY means VI receives more lines than expected. The 0xad9(2778) is the lines report from the sensor driver.
kworker/5:2-275 [005] ...1 122.290528: rtcpu_vinotify_handle_msg: tstamp:4155862787 tag:CHANSEL_PXL_SOF channel:0x00 frame:0 vi_tstamp:4155862337 data:0x00000001 kworker/5:2-275 [005] ...1 122.290531: rtcpu_vinotify_handle_msg: tstamp:4155867990 tag:CHANSEL_LOAD_FRAMED channel:0x01 frame:0 vi_tstamp:4155867544 data:0x08000000 kworker/5:2-275 [005] ...1 122.342572: rtcpu_vinotify_handle_msg: tstamp:4156521216 tag:CHANSEL_PXL_EOF channel:0x00 frame:0 vi_tstamp:4156520630 data:0x0ad90002 kworker/5:2-275 [005] ...1 122.342579: rtcpu_vinotify_handle_msg: tstamp:4156521395 tag:CHANSEL_FAULT channel:0x00 frame:0 vi_tstamp:4156520667 data:0x0ada0040 kworker/5:2-275 [005] ...1 122.342582: rtcpu_vinotify_handle_msg: tstamp:4156522342 tag:CHANSEL_LOAD_FRAMED channel:0x01 frame:0 vi_tstamp:4156521558 data:0x08000000 kworker/5:2-275 [005] ...1 122.342585: rtcpu_vinotify_handle_msg: tstamp:4156522509 tag:CHANSEL_FAULT_FE channel:0x01 frame:0 vi_tstamp:4156521559 data:0x00000001 kworker/5:2-275 [005] ...1 122.342588: rtcpu_vinotify_handle_msg: tstamp:4156522706 tag:ATOMP_FE channel:0x00 frame:0 vi_tstamp:4156521562 data:0x00000000
CSIMUX_STREAM data bit field bit 31 FIFO_BADPKT_STREAM_HI bit 30 FIFO_LOF_STREAM_HI bit 29 FIFO_OVERFLOW_STREAM_HI bit 28 SPURIOUS_DATA_STREAM_HI bit 27 FIFO_BADPKT_STREAM_LO bit 26 FIFO_LOF_STREAM_LO bit 25 FIFO_OVERFLOW_STREAM_LO bit 24 SPURIOUS_DATA_STREAM_LO bit 23 FIFO_BADPKT_STREAM_5 bit 22 FIFO_LOF_STREAM_5 bit 21 FIFO_OVERFLOW_STREAM_5 bit 20 SPURIOUS_DATA_STREAM_5 bit 19 FIFO_BADPKT_STREAM_4 bit 18 FIFO_LOF_STREAM_4 bit 17 FIFO_OVERFLOW_STREAM_4 bit 16 SPURIOUS_DATA_STREAM_4 bit 15 FIFO_BADPKT_STREAM_3 bit 14 FIFO_LOF_STREAM_3 bit 13 FIFO_OVERFLOW_STREAM_3 bit 12 SPURIOUS_DATA_STREAM_3 bit 11 FIFO_BADPKT_STREAM_2 bit 10 FIFO_LOF_STREAM_2 bit 9 FIFO_OVERFLOW_STREAM_2 bit 8 SPURIOUS_DATA_STREAM_2 bit 7 FIFO_BADPKT_STREAM_1 bit 6 FIFO_LOF_STREAM_1 bit 5 FIFO_OVERFLOW_STREAM_1 bit 4 SPURIOUS_DATA_STREAM_1 bit 3 FIFO_BADPKT_STREAM_0 bit 2 FIFO_LOF_STREAM_0 bit 1 FIFO_OVERFLOW_STREAM_0 bit 0 SPURIOUS_DATA_STREAM_0
FIFO_OVERFLOW. It could be the pix_clk_hz in DT too small cause the ISP can't handle the input.
kworker/5:3-1359 [005] ...1 253.671478: rtcpu_vinotify_handle_msg: tstamp:8279969890 tag:ISPBUF_FIFO_OVERFLOW channel:0x00 frame:12340 vi_tstamp:3985001981 data:0x00000000
CHANSEL_NOMATCH
bit 0 no_match bit 1-4 CTYPE bit 5-10 DTYPE
CTYPE: FS = 0x8, FE = 0x1 LS = 0x4, LE = 0x2 LS_LE = 0x6, DATA = 0x9
DTYPE: NvCsiDataType_Unspecified = 0, NvCsiDataType_YUV420_10 = 25, NvCsiDataType_LEG_YUV420_8 = 26, NvCsiDataType_YUV420_8 = 24, NvCsiDataType_YUV420CSPS_8 = 28, NvCsiDataType_YUV420CSPS_10 = 29, NvCsiDataType_YUV422_8 = 30, NvCsiDataType_YUV422_10 = 31, NvCsiDataType_RGB444 = 32, NvCsiDataType_RGB555 = 33, NvCsiDataType_RGB565 = 34, NvCsiDataType_RGB666 = 35, NvCsiDataType_RGB888 = 36, NvCsiDataType_RAW6 = 40, NvCsiDataType_RAW7 = 41, NvCsiDataType_RAW8 = 42, NvCsiDataType_RAW10 = 43, NvCsiDataType_RAW12 = 44, NvCsiDataType_RAW14 = 45, NvCsiDataType_RAW16 = 46, NvCsiDataType_RAW20 = 47, NvCsiDataType_User_1 = 48, NvCsiDataType_User_2 = 49, NvCsiDataType_User_3 = 50, NvCsiDataType_User_4 = 51, NvCsiDataType_User_5 = 52, NvCsiDataType_User_6 = 53, NvCsiDataType_User_7 = 54, NvCsiDataType_User_8 = 55, NvCsiDataType_Unknown = 64,
Didn't receive any package from the MIPI bus. Make sure the sensor have output data to the MIPI bus
kworker/5:2-2980 [005] ...1 4162.509492: rtos_queue_peek_from_isr_failed: tstamp:130384213094 queue:0x0b4a3c58 kworker/5:2-2980 [005] ...1 4162.509496: rtcpu_start: tstamp:130384214513 kworker/5:2-2980 [005] ...1 4162.665213: rtos_queue_peek_from_isr_failed: tstamp:130389214019 queue:0x0b4a3c58 kworker/5:2-2980 [005] ...1 4162.821197: rtos_queue_peek_from_isr_failed: tstamp:130394214523 queue:0x0b4a3c58 kworker/5:2-2980 [005] ...1 4162.977226: rtos_queue_peek_from_isr_failed: tstamp:130399215027 queue:0x0b4a3c58 kworker/5:2-2980 [005] ...1 4163.133208: rtos_queue_peek_from_isr_failed: tstamp:130404215532 queue:0x0b4a3c58 kworker/5:2-2980 [005] ...1 4163.289207: rtos_queue_peek_from_isr_failed: tstamp:130409216052 queue:0x0b4a3c58 kworker/5:2-2980 [005] ...1 4163.445214: rtos_queue_peek_from_isr_failed: tstamp:130414216548 queue:0x0b4a3c58 kworker/5:2-2980 [005] ...1 4163.601218: rtos_queue_peek_from_isr_failed: tstamp:130419217056 queue:0x0b4a3c58
Analysis NVCSI register reporting
Please access Jetson Download Center for [Technical Reference Manual],
you may see [NVCSI Registers] session for NVCSI register descriptions.
for example,
NVCSI_STREAM_0_PH_WC_0 / Status register on WC Bit Reset Description 31:16 0x0 calc_wc: 16 bit WC computed over current packet (has to match with the WC in PH for a good packet) 15:0 0x0 rx_wc: 16 bit WC from PH
NVCSI_STREAM_0_PF_CRC_0 / Status register on packet data CRC Bit Reset Description 31:16 0x0 calc_crc: 16 bit CRC computed over current packet (has to match with the CRC in PF for a good packet) 15:0 0x0 rx_crc: 16 bit CRC from PF