Jetson Camera Debugging
NVIDIA/Jetson

Jetson Camera Debugging

728x90

Jetson 플랫폼에서 카메라 브링업을 진행하다 V4L2 쪽이 아닌 에러가 발생하면 원인을 알아햐 하는데 원인을 알기 위해서는 Jetson 플랫폼에서 디버깅 방법을 알아야 합니다.

테스트 환경

  • Jetpack 5.x

Trace

추적 로그를 활성화시키기 위해 아래 터미널 창을 열어 아래 명령어 입력

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

이후 또 다른 터미널 창을 열어 카메라를 동작시키면 기존 터미널에서 아래와 같이 로그가 발생한다.

# tracer: nop
#
# entries-in-buffer/entries-written: 63/63   #P:6
#
#                                _-----=> irqs-off
#                               / _----=> need-resched
#                              | / _---=> hardirq/softirq
#                              || / _--=> preempt-depth
#                              ||| /     delay
#           TASK-PID     CPU#  ||||   TIMESTAMP  FUNCTION
#              | |         |   ||||      |         |
     kworker/1:9-145     [001] ....   203.451341: rtcpu_string: tstamp:7192509887 id:0x04010000 str:"VM0 deactivating."
     kworker/1:9-145     [001] ....   205.747299: rtcpu_string: tstamp:7264934208 id:0x04010000 str:"VM0 activating."
     kworker/1:9-145     [001] ....   205.747304: rtcpu_vinotify_event: tstamp:7265567958 cch:0 vi:0 tag:VIFALC_TDSTATE channel:0x23 frame:0 vi_tstamp:232482245664 data:0x719e300010000000
     kworker/1:9-145     [001] ....   205.747304: rtcpu_vinotify_event: tstamp:7265568220 cch:0 vi:0 tag:VIFALC_TDSTATE channel:0x23 frame:0 vi_tstamp:232482255456 data:0x0000000031000001
     kworker/1:9-145     [001] ....   205.747304: rtcpu_vinotify_event: tstamp:7265568514 cch:0 vi:0 tag:VIFALC_TDSTATE channel:0x23 frame:0 vi_tstamp:232482347072 data:0x719e2d0010000000
     kworker/1:9-145     [001] ....   205.747304: rtcpu_vinotify_event: tstamp:7265568764 cch:0 vi:0 tag:VIFALC_TDSTATE channel:0x23 frame:0 vi_tstamp:232482356992 data:0x0000000031000002
     kworker/1:9-145     [001] ....   205.859296: rtcpu_vinotify_event: tstamp:7267738354 cch:0 vi:0 tag:FS channel:0x00 frame:1 vi_tstamp:232554785056 data:0x0000000100000012
     kworker/1:9-145     [001] ....   205.859299: rtcpu_vinotify_event: tstamp:7267738624 cch:0 vi:0 tag:ATOMP_FS channel:0x00 frame:1 vi_tstamp:232554785120 data:0x0000000800000000
     kworker/1:9-145     [001] ....   205.859300: rtcpu_vinotify_event: tstamp:7267738912 cch:0 vi:0 tag:CHANSEL_EMBED_SOF channel:0x23 frame:1 vi_tstamp:232554785824 data:0x0000000000000004
     kworker/1:9-145     [001] ....   205.859301: rtcpu_vinotify_event: tstamp:7267739157 cch:0 vi:0 tag:CHANSEL_EMBED_EOF channel:0x23 frame:1 vi_tstamp:232554822304 data:0x0000000000010008
     kworker/1:9-145     [001] ....   205.859302: rtcpu_vinotify_event: tstamp:7267739436 cch:0 vi:0 tag:ATOMP_EMB_DATA_DONE channel:0x23 frame:1 vi_tstamp:232554823488 data:0x0000000000000000
     kworker/1:9-145     [001] ....   205.859302: rtcpu_vinotify_event: tstamp:7267739682 cch:0 vi:0 tag:VIFALC_ACTIONLST channel:0x23 frame:1 vi_tstamp:232554846912 data:0x0000000003020001
     kworker/1:9-145     [001] ....   205.859303: rtcpu_vinotify_event: tstamp:7267739960 cch:0 vi:0 tag:CHANSEL_PXL_SOF channel:0x23 frame:1 vi_tstamp:232554840992 data:0x0000000000000001
     kworker/1:9-145     [001] ....   205.859304: rtcpu_vinotify_event: tstamp:7267740202 cch:0 vi:0 tag:VIFALC_ACTIONLST channel:0x23 frame:1 vi_tstamp:232554870432 data:0x0000000008020001
     kworker/1:9-145     [001] ....   205.859305: rtcpu_vinotify_event: tstamp:7268802881 cch:0 vi:0 tag:CHANSEL_PXL_EOF channel:0x23 frame:1 vi_tstamp:232601417600 data:0x00000000099f0002
     kworker/1:9-145     [001] ....   205.859305: rtcpu_vinotify_event: tstamp:7268803130 cch:0 vi:0 tag:FE channel:0x00 frame:1 vi_tstamp:232601418176 data:0x0000000100000022
     kworker/1:9-145     [001] ....   205.859306: rtcpu_vinotify_event: tstamp:7268803419 cch:0 vi:0 tag:ATOMP_FE channel:0x00 frame:1 vi_tstamp:232601418240 data:0x0000000800000000
     kworker/1:9-145     [001] ....   205.859307: rtcpu_vinotify_event: tstamp:7268803663 cch:0 vi:0 tag:ATOMP_FRAME_DONE channel:0x23 frame:1 vi_tstamp:232601418848 data:0x0000000000000000
     kworker/1:9-145     [001] ....   205.859308: rtcpu_vinotify_event: tstamp:7269311979 cch:0 vi:0 tag:VIFALC_ACTIONLST channel:0x23 frame:1 vi_tstamp:232601479040 data:0x0000000002020001
     kworker/1:9-145     [001] ....   205.859308: rtcpu_vinotify_event: tstamp:7269312230 cch:0 vi:0 tag:VIFALC_ACTIONLST channel:0x23 frame:1 vi_tstamp:232601495712 data:0x0000000000020001

 

위 로그는 카메라가 정상 동작 시 나오는 로그로 vi:0  인 것은 CAM0 포트를 나타 낸다.

tag vistamp data desc
FS 232554785056 0x0000000100000012 CSIMUX가 프레임 시작 패킷을 감지
ATOMP_FS 232554785120 0x00000000800000000 ATOMP, FS 발행
CHANSEL_EMBED_SOF 232554785824 0x0000000000000004 임베디드 데이터 감지
CHANSEL_EMBED_EOF 232554822304 0x0000000000010008 임베디드 데이터 2line을 예정대로 캡처
ATOMP_EMB_DATA_DONE 232554823488 0x0000000000000000 ATOMP가 포함된 데이터 캡처 완료를 보고
CHANSEL_PXL_SOF 232554840992 0x0000000000000001 0line 눈으로 픽셀 데이터 시작을 감지
CHANSEL_PXL_EOF 232601417600 0x00000000099f0002 0x99f=2463line에서 픽셀 데이터 종료 감지
FE 232601418176 0x0000000100000022 CSIMUX가 Frame end packet을 감지
ATOMP_FE 232601418240 0x00000000800000000 ATOMP, FrameEnd 발행
ATOMP_FRAME_DONE 232601418848 0x0000000000000000 ATOMP/OFIF가 메모리로 전송 완료를 보고

CSI 수신, 패킷 분석, 데이터 라우팅, 메모리 전송, 완료 알림 등의 일련의 흐름이 있음을 알 수 있다. 또한 이미지 크기는 3280x2464 이므로 EOF가 예상대로 line number로 나와있는 것을 알 수 있다.

 

이와 같이 Trace 기능을 사용하는 것으로 V4L2나 ArgusAPI에서는 모르는 MIPI의 동작 정보를 알 수 있다.

 

NOTIFY

NOTIFY는 VI6의 블록 중 하나로 CSIMUX에서 메모리 쓰기까지의 이벤트를 모니터링하고 Falcon에 알림.

이 구현에 관한 정보는 tegra-rtcpu-trace.c 에 쓰여 있습니다. TRM에 명시되어 있는 태그의 종류는 다음과 같으며, tag의 숫자는 문자열로 대체되어 출력된다.

source event Desc
CSIMUX Frame start/end A/V 동기화에 사용할 수 있음 FS=tag:0 and FE=tag:1
CSIMUX Frame fault events 입력 오류가 발생한 경우 FS/FE 이벤트와 동시에 발생할 수 있음 tag:2
CSIMUX Stream fault 프레임과 연결할 수 없는 입력 오류의 경우 CSIMUX_STREAM=tag:3
CHANSEL {Start, end} of {frame, emb} frame=tag4, 5 emb=tag:6, 7
CHANSEL Line reached events line 타이머 조각 tag: 8
CHANSEL Single-channel fault CHANSEL_FAULT=tag:9 or 10
CHANSEL Many-channel faults tag: 11-14
ATOMP Surface packer overflow VI 아키텍처 팀에 문의하십시오. tag: 15
ATOMP {Start, end} of frame tag: 16, 17
ATOMP/OFIF Frame done / embedded data / PDAF data done tag:18, 19, 23
ATOMP/OFIF Frame partial completion tag: 20
ATOMP/OFIF Frame truncated / frame tossed tag: 21, 22
VGPIO VGPIO Interrupt tag: 29, 30
FML FM-Lite completion tag: 31

CSIMUX 오류는 주로 비정상적인 센서 출력으로 인해 발생하는 반면, ATOMP 오류는 VI6 구현으로 인해 발생할 가능성이 가장 높다.

 

센서를 사용하여 개발 중에 정상적인 이미지를 얻을 수 없는 경우 가능성이 가장 높은 오류는 ​​CHANSEL_FAULT이다.

 

CHASEL_FAULT는 태그의 데이터에 따라 에러 정보를 출력하고, HIGH 16비트 라인을 나타 내고, LOW 16비트 에러 코드를 사용합니다. Jetson 세대에 따라 달라질 가능성도 있으므로 TRM이나 소스 코드도 확인하는 것이 좋다.

 

CHASEL_FAULT

CHANSEL_FAULT bit example desc
LINE_NUMBER 16:31 0x00000001 0 line에서 SoF 감지
DTYPE_MISMATCH 15 0x00018000 1line에서 데이터 유형 불일치
EMBED_INFRINGE 14 0x00034000 3line에서 임베디드 데이터가 예상되지 않은 프레임에서 임베디드 데이터 수신
EMBED_LONG_LINE 13 0x00012000 embed data line이 예상보다 길다.
EMBED_SPURIOUS 12 0x00011000 line 시작없이 임베디드 데이터 시작
EMBED_RUNAWAY 11 0x00010800 embed data line 수가 많음
EMBED_MISSING_LE 10 0x00010400 포함된 데이터의 line end를 찾을 수 없음
PIXEL_SHORT_LINE 9 0x00010200 예상보다 적은 픽셀 수로 line이 끝났습니다.
PIXEL_LONG_LINE 8 0x00010100 line에서 예상보다 많은 픽셀 데이터가 발견되었습니다.
PIXEL_SPURIOUS 7 0x00010080 line start packet 없이 데이터 시작
PIXEL_RUNAWAY 6 0x00010040 픽셀 데이터가 예상보다 많은 line 수를 발견했습니다.
PIXEL_MISSING_LE 5 0x00010020 line end를 찾을 수 없음
PIXEL_LINE_TIMER 4 0x????0010 Timer
EMBED_EOF 3 0x00000008 0 line으로 임베디드 데이터 EoF 감지
EMBED_SOF 2 0x00000004 0 line으로 임베디드 데이터의 SoF 감지
PIXEL_EOF 1 0x14600002 5216 line에서 EoF 감지
PIXEL_SOF 0 0x00000001 0 line에서 SoF 감지

레지스터 설정과 디바이스 트리 설정에 불일치가 있는 경우는 위에 해당하는 에러가 나오게 된다.

kworker/0:2-1147  [000] ....   636.141074: rtcpu_vinotify_event: tstamp:20541218235 tag:CHANSEL_FAULT channel:0x23 frame:1 vi_tstamp:20541206603 data:0x023c0040

예를 들어 위와 같은 에러가 발생한 경우 bit를 확인해 보면 PIXEL_RUNAWAY 에러가 발생한 것을 알 수 있다.

CHANSEL_FAULT channel:0x023 … data:0x023c0040
(40 = 0100 0000)

 

bit [6]는 CHANSEL_FAULT : 0100 0000 = 4 -> PIXEL_RUNAWAY를 의미.

 

PIXEL_RUNAWAY는 VI가 예상보다 많은 줄을 수신한다는 것을 의미하는 것을 의미한다. (프레임이 너무 높음)

 

일반적인 해결 방법으로는 Device tree 및 드라이버 파일의 해상도가 일치하지 않기 때문에 발생한다. 그렇기 때문에 해상도 속성이 제대로 일치하는지 다시 확인이 필요하다.

 

추가로 발생하는 에러 중 CHANSEL_NOMATCH 가 있는데, 이 오류는 센서에서 출력하는 데이터 포맷과 Jetson VI 엔진이 예상하는 포맷이 일치하지 않으면 CHANSEL_NOMATCH가 발생할 수 있다.

 

CHANSEL_NOMATCH

bit 0 no_match - desc
bit 1-4 CTYPE 0x8 FS (Frame Start)
    0x1 FE (Frame End)
    0x4 LS (Line Start)
    0x2 LE (Line End)
    0x6 LS_LE (Line Start & Line End)
    0x9 DATA (데이터 패킷)
bit 5-10 DTYPE 0x00 NvCsiDataType_Unspecified
    0x19 NvCsiDataType_YUV420_10
    0x1A NvCsiDataType_LEG_YUV420_8
    0x18 NvCsiDataType_YUV420_8
    0x1C NvCsiDataType_YUV420CSPS_8
    0x1D NvCsiDataType_YUV420CSPS_10
    0x1E NvCsiDataType_YUV422_8
    0x1F NvCsiDataType_YUV422_10
    0x20 NvCsiDataType_RGB444
    0x21 NvCsiDataType_RGB555
    0x22 NvCsiDataType_RGB565
    0x23 NvCsiDataType_RGB666
    0x24 NvCsiDataType_RGB888
    0x28 NvCsiDataType_RAW6
    0x29 NvCsiDataType_RAW7
    0x2A NvCsiDataType_RAW8
    0x2B NvCsiDataType_RAW10
    0x2C NvCsiDataType_RAW12
    0x2D NvCsiDataType_RAW14
    0x2E NvCsiDataType_RAW16
    0x2F NvCsiDataType_RAW20
    0x30 NvCsiDataType_User_1
    0x31 NvCsiDataType_User_2
    0x32 NvCsiDataType_User_3
    0x33 NvCsiDataType_User_4
    0x34 NvCsiDataType_User_5
    0x35 NvCsiDataType_User_6
    0x36 NvCsiDataType_User_7
    0x37 NvCsiDataType_User_8
    0x40 NvCsiDataType_Unknown
kworker/1:7-140     [001] ....   103.731569: rtcpu_vinotify_error: tstamp:4064334189 cch:0 vi:0 tag:CHANSEL_NOMATCH channel:0x01 frame:1 vi_tstamp:130058641472 data:0x00000000000003c9

 

위 로그를 기준으로 분석해 보면 다음과 같다.

CHANSEL_NOMATCH channel:0x01 … data:0x00000000000003c9
(3c9 = 0011 1100 1001)

bit [0]은 no_match를 의미 : 1 -> 불일치 오류가 발생했음을 나타냅니다.
bit [1-4]는 CTYPE : 0100 = 4 -> LS를 의미.
bit [5-10]은 DTYPE: 11101 = 30 = NvCsiDataType_YUV422_8 -> 예상 형식을 의미.

 

일반적으로 해결 방법은 Device tree (csi_pixel_bit_depth, pixel_t 속성 등)및 드라이버 파일의 센서의 출력 포맷과 제대로 일치하는지 확인해야 한다.

 

그 외에도 다양한 에러가 존재하기 때문에 에러가 발생할 시 포럼에 해당 에러를 검색하면 다양한 해결 방법을 확인할 수 있다.


참고 :

https://developer.nvidia.com/downloads/orin-series-soc-technical-reference-manual/

 

https://elinux.org/Jetson/l4t/Camera_BringUp

 

Jetson/l4t/Camera BringUp - eLinux.org

Get Prepared 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_locke

elinux.org

 

728x90

'NVIDIA > Jetson' 카테고리의 다른 글

Jetson dynamic overlay  (0) 2024.11.26
Jetson Fan Control  (0) 2024.11.18
libgpiod  (0) 2024.10.06
JETSON UEFI DEBUG  (0) 2024.07.15
JETPACK 6 Flash  (0) 2024.06.23