Hi,
We are attempting to use the 720p 60fps SOC Camera in conjunction with the Lattice Crosslink FPGA doing SubLVDS to CSI conversion.
However, we are not able to solve a serious problem.
The problem is that the tx2 system does not receive the data perfectly.
After the number of mmap buffers (req.count = 8 in my case), the current frame data and the previous frame data were mixed.
1th YUV Data File (1280x720) - attached yuv.zip
9th YUV Data File (1280x720)
The following shows “Frame Buffer Data” (only the first 4 bytes and the last 4 bytes.)
Byte Data 1 and 3 is Pixel Count, and Byte Data 2,4 is Frame Count. In one frame data, the frame count is constant.
1/2/3/4____1_/2_/3_/4
H:01 06 00 06 T:00 00 00 00 - Frame is 6 and No data, Error
H:01 07 00 07 T:00 00 00 00 - Frame is 7 and No data, Error
H:01 08 00 08 T:00 00 00 00 - Frame is 8 and No data, Error
H:01 09 00 09 T:00 00 00 00 - Frame is 9 and No data, Error
H:01 0A 00 0A T:00 00 00 00 - Frame is A and No data, Error
H:01 0B 00 0B T:00 00 00 00 - Frame is B and No data, Error
H:01 0C 00 0C T:00 00 00 00 - Frame is C and No data, Error
H:01 0D 00 0D T:00 00 00 00 - Frame is D and No data, Error
H:01 0E 00 0E T:FF 06 FE 06 - Frame is E and 6, Error , After eight buffers have passed, the remaining data appears.
H:01 0F 00 0F T:FF 07 FE 07 - Frame is F and 7 , Error
H:01 10 00 10 T:FF 08 FE 08 - Frame is 10 and 8 , Error
H:01 11 00 11 T:FF 09 FE 09 - Frame is 11 and 9 , Error
H:01 12 00 12 T:FF 0A FE 0A - Frame is 12 and A , Error
H:01 13 00 13 T:FF 0B FE 0B - Frame is 13 and B , Error
H:01 14 00 14 T:FF 0C FE 0C
H:01 15 00 15 T:FF 0D FE 0D
H:01 16 00 16 T:FF 0E FE 0E
H:01 17 00 17 T:FF 0F FE 0F
H:01 18 00 18 T:FF 10 FE 10
H:01 19 00 19 T:FF 11 FE 11
In many test situations, I noticed one peculiar point.
If the system is busy, the data is received normally. Of course, data loss occurs.
The following shows “Frame Buffer Data” when the system is busy,
H:01 07 00 07 T:00 00 00 00 - Frame is 7 and No data
H:01 08 00 08 T:00 00 00 00 - Frame is 8 and No data
H:01 09 00 09 T:00 00 00 00 - Frame is 9 and No data
H:01 0A 00 0A T:00 00 00 00 - Frame is A and No data
H:01 0B 00 0B T:00 00 00 00 - Frame is B and No data
H:01 0C 00 0C T:00 00 00 00 - Frame is C and No data
H:01 0D 00 0D T:00 00 00 00 - Frame is D and No data
H:01 0E 00 0E T:00 00 00 00 - Frame is E and No data
H:01 0F 00 0F T:FF 07 FE 07 - Frame is F and 7, Error, After eight buffers have passed, the remaining data appears.
H:01 10 00 10 T:FF 10 FE 10 - Frame is 10 and 10, Good. When the system is busy, data is normally received.
H:01 11 00 11 T:FF 11 FE 11 - Frame is 11 and 11, Good.
H:01 12 00 12 T:FF 12 FE 12 - Frame is 12 and 12, Good.
H:01 13 00 13 T:FF 13 FE 13 - Frame is 13 and 13, Good.
H:01 14 00 14 T:FF 14 FE 14 - Frame is 14 and 14, Good.
H:01 15 00 15 T:FF 15 FE 15 , Good.
H:01 16 00 16 T:FF 16 FE 16 , Good.
H:01 17 00 17 T:FF 17 FE 17 , Good.
H:01 18 00 18 T:FF 18 FE 18 , Good.
H:01 19 00 19 T:FF 19 FE 19 , Good.
H:01 1A 00 1A T:FF 1A FE 1A , Good.
H:01 1B 00 1B T:FF 1B FE 1B , Good.
H:01 1D 00 1D T:FF 1D FE 1D , Good.
H:01 20 00 20 T:FF 20 FE 20 - Frame is 20 and 20, Because the system is busy, the frame is missing (Frame 1E & 1F missed).
H:01 22 00 22 T:FF 22 FE 22
H:01 26 00 26 T:FF 26 FE 26
H:01 28 00 28 T:FF 28 FE 28
H:01 2A 00 2A T:FF 2A FE 2A
The trace error log is here:
# entries-in-buffer/entries-written: 1153/1153 #P:6
#
# _-----=> irqs-off
# / _----=> need-resched
# | / _---=> hardirq/softirq
# || / _--=> preempt-depth
# ||| / delay
# TASK-PID CPU# |||| TIMESTAMP FUNCTION
# | | | |||| | |
kworker/3:2-2621 [003] ...1 2981.372705: rtos_queue_peek_from_isr_failed: tstamp:93356815067 queue:0x0b4a3c58
kworker/3:2-2621 [003] ...1 2981.372719: rtcpu_start: tstamp:93356817475
kworker/3:2-2621 [003] ...1 2981.532704: rtcpu_vinotify_handle_msg: tstamp:93361472157 tag:CSIMUX_STREAM channel:0xff frame:0 vi_tstamp:3167158420 data:0x00000100
kworker/3:2-2621 [003] ...1 2981.532718: rtcpu_vinotify_handle_msg: tstamp:93361545842 tag:CHANSEL_PXL_SOF channel:0x00 frame:0 vi_tstamp:3167232034 data:0x00000001
kworker/3:2-2621 [003] ...1 2981.532721: rtcpu_vinotify_handle_msg: tstamp:93361546109 tag:ATOMP_FS channel:0x00 frame:0 vi_tstamp:3167232044 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.532725: rtcpu_vinotify_handle_msg: tstamp:93361555465 tag:CHANSEL_LOAD_FRAMED channel:0x04 frame:0 vi_tstamp:3167241801 data:0x08000000
kworker/3:2-2621 [003] ...1 2981.532733: rtos_queue_peek_from_isr_failed: tstamp:93361816032 queue:0x0b4a3c58
kworker/3:2-2621 [003] ...1 2981.532736: rtcpu_vinotify_handle_msg: tstamp:93362045435 tag:CHANSEL_PXL_EOF channel:0x00 frame:0 vi_tstamp:3167731762 data:0x02cf0002
kworker/3:2-2621 [003] ...1 2981.532740: rtcpu_vinotify_handle_msg: tstamp:93362049577 tag:ATOMP_FE channel:0x00 frame:0 vi_tstamp:3167735877 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.532743: rtcpu_vinotify_handle_msg: tstamp:93362066672 tag:CHANSEL_PXL_SOF channel:0x00 frame:0 vi_tstamp:3167752884 data:0x00000001
kworker/3:2-2621 [003] ...1 2981.532746: rtcpu_vinotify_handle_msg: tstamp:93362066916 tag:ATOMP_FS channel:0x00 frame:0 vi_tstamp:3167752895 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.532749: rtcpu_vinotify_handle_msg: tstamp:93362076654 tag:CHANSEL_LOAD_FRAMED channel:0x04 frame:0 vi_tstamp:3167762975 data:0x08000000
kworker/3:2-2621 [003] ...1 2981.585334: rtcpu_vinotify_handle_msg: tstamp:93362566309 tag:CHANSEL_PXL_EOF channel:0x00 frame:0 vi_tstamp:3168252612 data:0x02cf0002
kworker/3:2-2621 [003] ...1 2981.585352: rtcpu_vinotify_handle_msg: tstamp:93362570426 tag:ATOMP_FE channel:0x00 frame:0 vi_tstamp:3168256727 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.585356: rtcpu_vinotify_handle_msg: tstamp:93362587537 tag:CHANSEL_PXL_SOF channel:0x00 frame:0 vi_tstamp:3168273735 data:0x00000001
kworker/3:2-2621 [003] ...1 2981.585360: rtcpu_vinotify_handle_msg: tstamp:93362587781 tag:ATOMP_FS channel:0x00 frame:0 vi_tstamp:3168273745 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.585364: rtcpu_vinotify_handle_msg: tstamp:93362593846 tag:CHANSEL_LOAD_FRAMED channel:0x04 frame:0 vi_tstamp:3168280171 data:0x08000000
kworker/3:2-2621 [003] ...1 2981.585368: rtcpu_vinotify_handle_msg: tstamp:93363087155 tag:CHANSEL_PXL_EOF channel:0x00 frame:0 vi_tstamp:3168773463 data:0x02cf0002
kworker/3:2-2621 [003] ...1 2981.585373: rtcpu_vinotify_handle_msg: tstamp:93363091278 tag:ATOMP_FE channel:0x00 frame:0 vi_tstamp:3168777578 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.585377: rtcpu_vinotify_handle_msg: tstamp:93363108388 tag:CHANSEL_PXL_SOF channel:0x00 frame:0 vi_tstamp:3168794586 data:0x00000001
kworker/3:2-2621 [003] ...1 2981.585381: rtcpu_vinotify_handle_msg: tstamp:93363108637 tag:ATOMP_FS channel:0x00 frame:0 vi_tstamp:3168794595 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.585385: rtcpu_vinotify_handle_msg: tstamp:93363115242 tag:CHANSEL_LOAD_FRAMED channel:0x04 frame:0 vi_tstamp:3168801573 data:0x08000000
kworker/3:2-2621 [003] ...1 2981.585390: rtcpu_vinotify_handle_msg: tstamp:93363608026 tag:CHANSEL_PXL_EOF channel:0x00 frame:0 vi_tstamp:3169294314 data:0x02cf0002
kworker/3:2-2621 [003] ...1 2981.585394: rtcpu_vinotify_handle_msg: tstamp:93363612141 tag:ATOMP_FE channel:0x00 frame:0 vi_tstamp:3169298427 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.585398: rtcpu_vinotify_handle_msg: tstamp:93363629245 tag:CHANSEL_PXL_SOF channel:0x00 frame:0 vi_tstamp:3169315436 data:0x00000001
kworker/3:2-2621 [003] ...1 2981.585402: rtcpu_vinotify_handle_msg: tstamp:93363629488 tag:ATOMP_FS channel:0x00 frame:0 vi_tstamp:3169315447 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.585406: rtcpu_vinotify_handle_msg: tstamp:93363635450 tag:CHANSEL_LOAD_FRAMED channel:0x04 frame:0 vi_tstamp:3169321773 data:0x08000000
kworker/3:2-2621 [003] ...1 2981.585411: rtcpu_vinotify_handle_msg: tstamp:93364128838 tag:CHANSEL_PXL_EOF channel:0x00 frame:0 vi_tstamp:3169815164 data:0x02cf0002
kworker/3:2-2621 [003] ...1 2981.585414: rtcpu_vinotify_handle_msg: tstamp:93364132996 tag:ATOMP_FE channel:0x00 frame:0 vi_tstamp:3169819279 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.585419: rtcpu_vinotify_handle_msg: tstamp:93364150115 tag:CHANSEL_PXL_SOF channel:0x00 frame:0 vi_tstamp:3169836286 data:0x00000001
kworker/3:2-2621 [003] ...1 2981.585423: rtcpu_vinotify_handle_msg: tstamp:93364150403 tag:ATOMP_FS channel:0x00 frame:0 vi_tstamp:3169836297 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.585427: rtcpu_vinotify_handle_msg: tstamp:93364155879 tag:CHANSEL_LOAD_FRAMED channel:0x04 frame:0 vi_tstamp:3169842209 data:0x08000000
kworker/3:2-2621 [003] ...1 2981.636673: rtcpu_vinotify_handle_msg: tstamp:93364649703 tag:CHANSEL_PXL_EOF channel:0x00 frame:0 vi_tstamp:3170336014 data:0x02cf0002
kworker/3:2-2621 [003] ...1 2981.636683: rtcpu_vinotify_handle_msg: tstamp:93364653828 tag:ATOMP_FE channel:0x00 frame:0 vi_tstamp:3170340129 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.636687: rtcpu_vinotify_handle_msg: tstamp:93364670927 tag:CHANSEL_PXL_SOF channel:0x00 frame:0 vi_tstamp:3170357137 data:0x00000001
kworker/3:2-2621 [003] ...1 2981.636690: rtcpu_vinotify_handle_msg: tstamp:93364671163 tag:ATOMP_FS channel:0x00 frame:0 vi_tstamp:3170357147 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.636693: rtcpu_vinotify_handle_msg: tstamp:93364677907 tag:CHANSEL_LOAD_FRAMED channel:0x04 frame:0 vi_tstamp:3170364243 data:0x08000000
kworker/3:2-2621 [003] ...1 2981.636696: rtcpu_vinotify_handle_msg: tstamp:93365170549 tag:CHANSEL_PXL_EOF channel:0x00 frame:0 vi_tstamp:3170856865 data:0x02cf0002
kworker/3:2-2621 [003] ...1 2981.636699: rtcpu_vinotify_handle_msg: tstamp:93365174676 tag:ATOMP_FE channel:0x00 frame:0 vi_tstamp:3170860979 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.636702: rtcpu_vinotify_handle_msg: tstamp:93365191782 tag:CHANSEL_PXL_SOF channel:0x00 frame:0 vi_tstamp:3170877987 data:0x00000001
kworker/3:2-2621 [003] ...1 2981.636705: rtcpu_vinotify_handle_msg: tstamp:93365192030 tag:ATOMP_FS channel:0x00 frame:0 vi_tstamp:3170877998 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.636708: rtcpu_vinotify_handle_msg: tstamp:93365198573 tag:CHANSEL_LOAD_FRAMED channel:0x04 frame:0 vi_tstamp:3170884911 data:0x08000000
kworker/3:2-2621 [003] ...1 2981.636711: rtcpu_vinotify_handle_msg: tstamp:93365691383 tag:CHANSEL_PXL_EOF channel:0x00 frame:0 vi_tstamp:3171377716 data:0x02cf0002
kworker/3:2-2621 [003] ...1 2981.636714: rtcpu_vinotify_handle_msg: tstamp:93365695532 tag:ATOMP_FE channel:0x00 frame:0 vi_tstamp:3171381830 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.636718: rtcpu_vinotify_handle_msg: tstamp:93365712645 tag:CHANSEL_PXL_SOF channel:0x00 frame:0 vi_tstamp:3171398837 data:0x00000001
kworker/3:2-2621 [003] ...1 2981.636721: rtcpu_vinotify_handle_msg: tstamp:93365712909 tag:ATOMP_FS channel:0x00 frame:0 vi_tstamp:3171398849 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.636724: rtcpu_vinotify_handle_msg: tstamp:93365717814 tag:CHANSEL_LOAD_FRAMED channel:0x04 frame:0 vi_tstamp:3171404138 data:0x08000000
kworker/3:2-2621 [003] ...1 2981.688695: rtcpu_vinotify_handle_msg: tstamp:93366212258 tag:CHANSEL_PXL_EOF channel:0x00 frame:0 vi_tstamp:3171898566 data:0x02cf0002
kworker/3:2-2621 [003] ...1 2981.688705: rtcpu_vinotify_handle_msg: tstamp:93366216377 tag:ATOMP_FE channel:0x00 frame:0 vi_tstamp:3171902681 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.688709: rtcpu_vinotify_handle_msg: tstamp:93366233490 tag:CHANSEL_PXL_SOF channel:0x00 frame:0 vi_tstamp:3171919688 data:0x00000001
kworker/3:2-2621 [003] ...1 2981.688712: rtcpu_vinotify_handle_msg: tstamp:93366233746 tag:ATOMP_FS channel:0x00 frame:0 vi_tstamp:3171919698 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.688715: rtcpu_vinotify_handle_msg: tstamp:93366238446 tag:CHANSEL_LOAD_FRAMED channel:0x04 frame:0 vi_tstamp:3171924771 data:0x08000000
kworker/3:2-2621 [003] ...1 2981.688718: rtcpu_vinotify_handle_msg: tstamp:93366733109 tag:CHANSEL_PXL_EOF channel:0x00 frame:0 vi_tstamp:3172419416 data:0x02cf0002
kworker/3:2-2621 [003] ...1 2981.688721: rtcpu_vinotify_handle_msg: tstamp:93366737229 tag:ATOMP_FE channel:0x00 frame:0 vi_tstamp:3172423531 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.688724: rtcpu_vinotify_handle_msg: tstamp:93366754321 tag:CHANSEL_PXL_SOF channel:0x00 frame:0 vi_tstamp:3172440539 data:0x00000001
kworker/3:2-2621 [003] ...1 2981.688728: rtcpu_vinotify_handle_msg: tstamp:93366754548 tag:ATOMP_FS channel:0x00 frame:0 vi_tstamp:3172440549 data:0x00000000
kworker/3:2-2621 [003] ...1 2981.688731: rtcpu_vinotify_handle_msg: tstamp:93366759651 tag:CHANSEL_LOAD_FRAMED channel:0x04 frame:0 vi_tstamp:3172445990 data:0x08000000
When does CHANSEL_LOAD_FRAMED occur in the log?
If CHANSEL_LOAD_FRAMED means that the system will take the buffer,
Should CHANSEL_LOAD_FRAMED be followed by CHANSEL_PXL_EOF or ATOMP_FE?
- Operation Sequence ( by tstamp )
- SOF : Start of Frame
- FS : Frame Start
- LOAD : Load Frame
- EOF : End of Frame
- FE
Suggested Operation Sequence
- SOF : Start of Frame
- FS : Frame Start
- EOF : End of Frame
- FE:
- LOAD : Load Frame
I have summarized the contents above. (is same with the attached file)
Device tree is here:
/ {
host1x {
vi@15700000 {
status = "okay";
num-channels = <1>;
ports {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
port@0 {
status = "okay";
reg = <0>;
fusion_camera_vi_in0: endpoint {
status = "okay";
csi-port = <2>;
bus-width = <2>;
remote-endpoint = <&fusion_camera_csi_out0>;
};
};
};
};
nvcsi@150c0000 {
status = "okay";
num-channels = <1>;
#address-cells = <1>;
#size-cells = <0>;
channel@0 {
status = "okay";
reg = <0>;
ports {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
/* port@0 - module ports*/
port@0 {
status = "okay";
reg = <0>;
ir_csi_in0: endpoint@0 {
csi-port = <2>;
bus-width = <2>;
remote-endpoint = <&fusion_camera_out0>;
};
};
/* port@1 -> vi endpoint*/
port@1 {
status = "okay";
reg = <1>;
fusion_camera_csi_out0: endpoint@1 {
remote-endpoint = <&fusion_camera_vi_in0>;
};
};
};
};
};
};
i2c@3180000 {
status = "okay";
crosslink_camera_c@7c {
status = "okay";
compatible = "nvidia,crosslink_camera";
reg = <0x7c>;
physical_w = "3.674";
physical_h = "2.738";
sensor_model ="crosslink_camera";
devnode = "video0";
avdd-reg = "vana";
iovdd-reg = "vif";
post_crop_frame_drop = "0";
mode0 {
mclk_khz = "24000";
num_lanes = "2";
tegra_sinterface = "serial_c";
discontinuous_clk = "yes";
dpcm_enable = "false";
cil_settletime = "0";
active_w = "1280";
active_h = "720";
pixel_t = "uyvy";
readout_orientation = "0";
line_length = "2560";
inherent_gain = "1";
mclk_multiplier = "17.0";
pix_clk_hz = "288000000";
min_gain_val = "1.0";
max_gain_val = "16";
min_hdr_ratio = "1";
max_hdr_ratio = "64";
min_framerate = "1.816577";
max_framerate = "60";
min_exp_time = "17";
max_exp_time = "275192";
embedded_metadata_height = "0";
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
fusion_camera_out0: endpoint {
status = "okay";
csi-port = <2>;
bus-width = <2>;
remote-endpoint = <&ir_csi_in0>;
};
};
};
};
};
crosslink_3cam_lens_model1@P5V27C {
min_focus_distance = "0.0";
hyper_focal = "0.0";
focal_length = "2.67";
f_number = "2.0";
aperture = "2.0";
};
tegra-camera-platform {
compatible = "nvidia, tegra-camera-platform";
num_csi_lanes = <2>;
max_lane_speed = <1500000>;
min_bits_per_pixel = <10>;
vi_peak_byte_per_pixel = <2>;
vi_bw_margin_pct = <25>;
max_pixel_rate = <160000>;
isp_peak_byte_per_pixel = <5>;
isp_bw_margin_pct = <25>;
modules {
module0 {
badge = "crosslink_camera_front_P5V27C";
position = "rear";
orientation = "1";
drivernode0 {
/* Declare PCL support driver (classically known as guid) */
pcl_id = "v4l2_sensor";
/* Driver v4l2 device name */
devname = "crosslink_camera 2-007c";
/* Declare the device-tree hierarchy to driver instance */
proc-device-tree = "/proc/device-tree/i2c@3180000/crosslink_camera_c@7c";
};
drivernode1 {
/* Declare PCL support driver (classically known as guid) */
pcl_id = "v4l2_lens";
proc-device-tree = "/proc/device-tree/crosslink_3cam_lens_model1@P5V27C/";
};
};
};
};
};
Tx2_FrameError.pdf (187 KB)
yuv.zip (12.1 KB)