SOLVED How to change cssc132 and ds90ub954 loading sequence?
-
Hi Team! I try to install FPD-LINK3-2RX(TX) with cs-132 camera on Jetson Xavier NX, JetPAck 35.1. For this I had to decompile DTB from nvidia_jetson_veye_bsp/dtbs/Xavier-NX/JetPack_5.0.1_DP_Linux_JETSON_XAVIER_NX_TARGETS/dts dtb/CS-MIPI-SC132-fpdlink directory to build new dtb with fpdlink option for 5.0.2 release. After that dmesg looks like:
jadmin@ubuntu:~$ sudo dmesg | grep ds90
[sudo] password for jadmin:
[ 11.406358] ds90ub954: loading out-of-tree module taints kernel.
[ 11.419885] ds90ub954: module verification failed: signature and/or required key missing - tainting kernel
[ 11.434714] i2c-ds90ub954 9-0030: ds90ub954_probe: start
[ 11.434724] i2c-ds90ub954 9-0030: ds90ub954_parse_dt: deserializer:
[ 11.434736] i2c-ds90ub954 9-0030: pass-gpio not found, ignoring
[ 11.434746] i2c-ds90ub954 9-0030: lock-gpio not found, ignoring
[ 11.434754] i2c-ds90ub954 9-0030: pdb-gpio not found, ignoring
[ 11.434761] i2c-ds90ub954 9-0030: ds90ub954_parse_dt: - csi-lane-count 2
[ 11.434770] i2c-ds90ub954 9-0030: ds90ub954_parse_dt: - csi-lane-speed 800
[ 11.434775] i2c-ds90ub954 9-0030: ds90ub954_parse_dt: - test-pattern disabled
[ 11.434780] i2c-ds90ub954 9-0030: ds90ub954_parse_dt: - discontinuous clock used
[ 11.434844] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: parsing serializers device tree:
[ 11.434853] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - serializer rx-channel: 0
[ 11.434859] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: -test-pattern disabled
[ 11.434864] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - csi-lane-count 2
[ 11.434872] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - gpio0-output-enable property not found
[ 11.434877] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: gpio0-output-enable to default val: 0
[ 11.434883] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - gpio1-output-enable property not found
[ 11.434888] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: gpio1-output-enable to default val: 0
[ 11.434893] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - gpio2-output-enable property not found
[ 11.434898] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: gpio2-output-enable to default val: 0
[ 11.434903] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - gpio3-output-enable property not found
[ 11.434909] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: gpio3-output-enable to default val: 0
[ 11.434915] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - gpio0-control property not found
[ 11.434920] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: gpio0-control to default val: 0b1000
[ 11.434925] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - gpio1-control property not found
[ 11.434930] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: gpio1-control to default val: 0b1000
[ 11.434936] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - gpio2-control property not found
[ 11.434940] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: gpio2-control to default val: 0b1000
[ 11.434946] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - gpio3-control property not found
[ 11.434951] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: gpio3-control to default val: 0b1000
[ 11.434956] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - hs-clk-div property not found
[ 11.434961] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - hs-clk-div set to default val: 0x2 (div by 4)
[ 11.434966] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - div-m-val property not found
[ 11.434972] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - div-m-val set to default val: 1
[ 11.434979] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - div-n-val property not found
[ 11.434984] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - div-n-val set to default val: 0x28
[ 11.434990] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - i2c-address: 0x19
[ 11.435147] i2c-ds90ub954 9-0030: ds90ub953_i2c_client init client done
[ 11.435195] i2c-ds90ub954 9-0030: ds90ub953_regmap_init init regmap done
[ 11.435442] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - num of slave alias pairs: 1
[ 11.435451] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - slave addr: 0x3B, alias addr: 0x3B
[ 11.435456] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - continuous clock enabled
[ 11.435461] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - i2c-pass-through-all disabled
[ 11.435467] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - virtual-channel-map property not found
[ 11.435472] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: - virtual-channel-map set to default val: 0xE4
[ 11.435478] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: serializer 0 successfully parsed
[ 11.435483] i2c-ds90ub954 9-0030: ds90ub953_parse_dt: done
[ 11.463257] i2c-ds90ub954 9-0030: ds90ub954_init starting
[ 11.472974] i2c-ds90ub954 9-0030: ds90ub954_init: device ID: 0x60, code:_UB954, revision: 0x20
[ 12.014236] i2c-ds90ub954 9-0030: ds90ub954_init: start init of serializer rx_port 0
[ 12.980513] i2c-ds90ub954 9-0030: ds90ub954_init: DEVICE STS: 0xdf, id=0 x 10ms
[ 12.980523] i2c-ds90ub954 9-0030: ds90ub954_init: backchannel is ready
[ 12.980881] i2c-ds90ub954 9-0030: ds90ub954_init: Successfully set TI954_REG_BC_GPIO_CTL0
[ 12.981058] i2c-ds90ub954 9-0030: ds90ub954_init: Successfully set TI954_REG_BC_GPIO_CTL1
[ 12.981234] i2c-ds90ub954 9-0030: ds90ub954_init: slave id 0: 0x3B
[ 12.981414] i2c-ds90ub954 9-0030: ds90ub954_init: alias id 0: 0x3B
[ 12.981588] i2c-ds90ub954 9-0030: ds90ub954_init: VC-ID 0 mapped to 0
[ 12.981595] i2c-ds90ub954 9-0030: ds90ub954_init: VC-ID 1 mapped to 1
[ 12.981600] i2c-ds90ub954 9-0030: ds90ub954_init: VC-ID 2 mapped to 2
[ 12.981605] i2c-ds90ub954 9-0030: ds90ub954_init: VC-ID 3 mapped to 3
[ 12.981610] i2c-ds90ub954 9-0030: ds90ub954_init: init of deserializer rx_port 0 successful
[ 12.982957] i2c-ds90ub954 9-0030: ds90ub954_probe: init ds90ub954_done
[ 13.504345] i2c 9-0019: ds90ub953_init: start
[ 13.511278] i2c 9-0019: ds90ub953_init: device ID: 0x30, code:_UB953
[ 13.536979] i2c 9-0019: ds90ub953_init: successful
[ 14.053384] i2c-ds90ub954 10-0030: ds90ub954_probe: start
[ 14.053392] i2c-ds90ub954 10-0030: ds90ub954_parse_dt: deserializer:
[ 14.053407] i2c-ds90ub954 10-0030: pass-gpio not found, ignoring
[ 14.053416] i2c-ds90ub954 10-0030: lock-gpio not found, ignoring
[ 14.053433] i2c-ds90ub954 10-0030: pdb-gpio not found, ignoring
[ 14.053438] i2c-ds90ub954 10-0030: ds90ub954_parse_dt: - csi-lane-count 2
[ 14.053441] i2c-ds90ub954 10-0030: ds90ub954_parse_dt: - csi-lane-speed 800
[ 14.053445] i2c-ds90ub954 10-0030: ds90ub954_parse_dt: - test-pattern disabled
[ 14.053449] i2c-ds90ub954 10-0030: ds90ub954_parse_dt: - discontinuous clock used
[ 14.053512] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: parsing serializers device tree:
[ 14.053520] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - serializer rx-channel: 0
[ 14.053524] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: -test-pattern disabled
[ 14.053528] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - csi-lane-count 2
[ 14.053532] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - gpio0-output-enable property not found
[ 14.053535] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: gpio0-output-enable to default val: 0
[ 14.053539] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - gpio1-output-enable property not found
[ 14.053542] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: gpio1-output-enable to default val: 0
[ 14.053546] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - gpio2-output-enable property not found
[ 14.053549] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: gpio2-output-enable to default val: 0
[ 14.053553] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - gpio3-output-enable property not found
[ 14.053556] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: gpio3-output-enable to default val: 0
[ 14.053560] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - gpio0-control property not found
[ 14.053563] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: gpio0-control to default val: 0b1000
[ 14.053567] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - gpio1-control property not found
[ 14.053571] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: gpio1-control to default val: 0b1000
[ 14.053575] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - gpio2-control property not found
[ 14.053578] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: gpio2-control to default val: 0b1000
[ 14.053582] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - gpio3-control property not found
[ 14.053585] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: gpio3-control to default val: 0b1000
[ 14.053591] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - hs-clk-div property not found
[ 14.053597] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - hs-clk-div set to default val: 0x2 (div by 4)
[ 14.053601] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - div-m-val property not found
[ 14.053605] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - div-m-val set to default val: 1
[ 14.053608] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - div-n-val property not found
[ 14.053612] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - div-n-val set to default val: 0x28
[ 14.053617] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - i2c-address: 0x19
[ 14.053768] i2c-ds90ub954 10-0030: ds90ub953_i2c_client init client done
[ 14.053821] i2c-ds90ub954 10-0030: ds90ub953_regmap_init init regmap done
[ 14.054055] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - num of slave alias pairs: 1
[ 14.054060] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - slave addr: 0x3B, alias addr: 0x3B
[ 14.054064] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - continuous clock enabled
[ 14.054068] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - i2c-pass-through-all disabled
[ 14.054072] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - virtual-channel-map property not found
[ 14.054075] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: - virtual-channel-map set to default val: 0xE4
[ 14.054080] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: serializer 0 successfully parsed
[ 14.054084] i2c-ds90ub954 10-0030: ds90ub953_parse_dt: done
[ 14.076345] i2c-ds90ub954 10-0030: ds90ub954_init starting
[ 14.080450] i2c-ds90ub954 10-0030: Cannot read register 0x00 (-121)!
[ 14.080457] i2c-ds90ub954 10-0030: ds90ub954_probe: error initializing ds90ub954
[ 14.080685] i2c-ds90ub954: probe of 10-0030 failed with error -121
jadmin@ubuntu:~$ sudo dmesg | grep cssc
[ 11.439729] cssc132 9-003b: probing v4l2 sensor
[ 11.440061] cssc132 9-003b: tegracam sensor driver:cssc132_v2.0.6
[ 11.454723] cssc132 9-003b: cs_sc132_board_setup: error during i2c read probe (-121)
[ 11.466415] cssc132 9-003b: board setup failed
[ 11.483284] cssc132: probe of 9-003b failed with error -121
[ 11.491350] cssc132 10-003b: probing v4l2 sensor
[ 11.493679] cssc132 10-003b: tegracam sensor driver:cssc132_v2.0.6
[ 11.497458] cssc132 10-003b: cs_sc132_board_setup: error during i2c read probe (-121)
[ 11.499640] cssc132 10-003b: board setup failed
[ 11.502453] cssc132: probe of 10-003b failed with error -121As I see the ds90ub954 loads first successfully on 9-0030 and 953 on 9-0019 i2c port. But camera cs132 try to load before 954 and that is why the probe failed. Would you please help me to solve how to change drivers loading sequence? Or probably there is another reason of camera probe fail?
-
@dmmoskalev
http://wiki.veye.cc/index.php/VEYE_CS_Camera_for_Jetson_TX2
Please refer to part 3.5.5.2 -
@veye_xumm Thank you for quick reply! I 'v seen this notes before and tried to run <insmod..> after boot, but failed. Now I removed cssc132.ko and ds90ub954.ko drivers from /lib/modules/5.10.104-tegra/kernel/drivers/media/i2c folder and ran <insmod> instructions manually. Now it works.
But I faced with the other problem: the picture is green))
According 4.2.1 Gstreamer Usage I try to preview 1280*1080@45 (CS-MIPI-SC132) with cmd:gst-launch-1.0 nvv4l2camerasrc ! "video/x-raw(memory:NVMM),format=(string)UYVY, width=(int)1280, height=(int)1080, framerate=(fraction)45/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nv3dsink sync=false
![result:]( image url)
And I tested the direct connection of cs132 with the same flat cable and NX board - it works fine. But with fpdlink i'v got the green screen and app termination. Suppose this is the sync problems. How to solve it? Thank you a lot in advance! -
@dmmoskalev What length of fpdlink cable are you using? Can you take a picture of your device's connection and I'll take a look.
-
@veye_xumm FPD Link cable is 5m length. The photo of connections:
On the week I made additional research and noticed that my CS-MIPI-SC132 has wrong values in memory. For example, I tried to read all settings according http://wiki.veye.cc/index.php/CS-MIPI-X_i2c (pp5.3 - 5.33) but returned values were only 1 or 257 (depends on one or two bytes: 0000 0001 0000 0001 were reading). I tried to write the proper values in registers and read it in next cmd. Write cmd report was successful, but read cmd returned wrong values again. So I suspect the firmware in my SC132 cam need to be updated.
My next assumption about ISP in SC132 board. I suppose in my case the ISP does not work properly and as a result it not generate H,V sync to FPD Link serializer that is why there is no synchronization on image. FFMPEG and GStreamer give the error messages about abnormal framerate. But when I connect the same SC132 with the same flat cable to Jetson NX directly the image is OK, because on the Jetson board the internal ISP module get camera stream and detect sync signals correct.
How do you think, can the SC132 firmware update solve the problem? -
noticed that my CS-MIPI-SC132 has wrong values in memory.
But when I connect the same SC132 with the same flat cable to Jetson NX directly the image is OK
Based on your two descriptions, I think the camera module itself is fine, including the isp part.
The suspected problem point, then, is the state of the fpdlink link.
Since you can get /dev/video0 after using the manual insmod cmd, this means that the i2c bus is read correctly.
But why are all your i2c parameters read incorrectly through the fpdlink link? Did you apply the -b parameter correctly to specify the i2c bus? -
@veye_xumm Hi Xumm, thank you for support!
You are right, I forgott to add <-b 9> option in my case. Now I rewrite little the cs_mipi_i2c.sh (60: changed I2C_DEV=9;). And camera began to response as expected. Thank you!
By the way, I noticed a read_videofmtcap() function does not work. Please look at line 408 and 429:
408 while(( $i<$fmtnum ))
...
429 let "i++"I suppose it should be like:
408 while [ $i -lt $fmtnum ]
....
429 i=$(( $i + 1 ))After these changes the function works perfect.
But as of FPD Link I still has no idea how to solve it. I tried to apply different power sources +12V to FPD-LINK3-2RX and measured 9.5V on J3 and J4. Looks OK. But sync is still bad. Gstream gives the next report:
$ gst-launch-1.0 nvv4l2camerasrc ! "video/x-raw(memory:NVMM),format=(string)UYVY, width=(int)1280, height=(int)1080, framerate=(fraction)45/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nv3dsink sync=false
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstNvV4l2CameraSrc:nvv4l2camerasrc0: Internal data stream error.
Additional debug info:
gstbasesrc.c(3072): gst_base_src_loop (): /GstPipeline:pipeline0/GstNvV4l2CameraSrc:nvv4l2camerasrc0:
streaming stopped, reason not-negotiated (-4)
Execution ended after 0:00:02.739304986
... -
@dmmoskalev I recorded the screen with bad sync during GStream running
[https://disk.yandex.ru/i/LfOs8kLEuRhICg](link url) -
@dmmoskalev
Please check the FFC cable connection between FPD-LINK3-TX and CS-MIPI-SC132 board. -
@veye_xumm I checked FFC by replacing by new one, it is OK.
-
@dmmoskalev Great!