This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[FAQ] SK-TDA4VM: How do I enable and debug IMX390 + fusion board not working with Edge AI SDK

Part Number: SK-TDA4VM

I have connected the SK-TDA4VM board with fusion board and IMX390. I am following the SDK documentation on enabling the camera: https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-sk-tda4vm/08_02_00/exports/docs/getting_started.html#imx390-raw-sensor.

However, I cannot get camera stream from the IMX390. What can I check?

  • Here is the recommended flow to debug SK-TDA4VM+fusion board+IMX390 camera enablement. Note: This FAQ was created with Edge AI SDK 8.2 version: https://www.ti.com/tool/download/PROCESSOR-SDK-LINUX-SK-TDA4VM/08.02.00.02 

    Unlike J721E EVM, SK board does not have a connector for powering up fusion board. Fusion board can be powered up externally using the following on SK board. They plug into the same power supply used by J721E EVM (not the USB-C for SK).

    Power connector for fusion board:

    Power supply for J721E EVM (recommended in EVM userguide: https://www.ti.com/lit/ug/spruis4d/spruis4d.pdf?ts=1662476448612): 

    • SDI65-12-U-P6-ND

    Power connector for fusion board:

    Connection to fusion board (which also has 1x IMX390 camera connected in picture):

    Connection to SK board using 40-pin Samtec connector on underside of SK board:

    1. Check if fusion board is detected by board by looking at boot logs with dmesg | grep ds90.

    • The fusion board should be detected as ds90ub960, and logs should show something like ds90ub960 8-0036: Successfully probed (rev/mask 40) if successful.
    • If nothing is printed out, please check SDK documentation, and make sure uenv.txt is updated with device tree overlay for fusion board.
    • If below is printed and 8-0036 and 8-003d are also the same, either the fusion board is not powered on, or not connected.

    root@tda4vm-sk:/opt/edge_ai_apps# dmesg | grep ds90
    [ 7.440259] ds90ub960 8-0036: ub960_write: cannot write register 0x01 (-121)!
    [ 7.454994] ds90ub960 8-0036: ub960_read: cannot read register 0x01 (-121)!
    [ 7.462114] ds90ub960 8-0036: ub960_read: cannot read register 0x03 (-121)!
    [ 7.471952] ds90ub960 8-0036: Cannot read first register (-121), abort
    [ 7.505439] ds90ub960: probe of 8-0036 failed with error -121
    [ 7.521081] ds90ub960 8-003d: ub960_write: cannot write register 0x01 (-121)!
    [ 7.586269] ds90ub960 8-003d: ub960_read: cannot read register 0x01 (-121)!
    [ 7.593461] ds90ub960 8-003d: ub960_read: cannot read register 0x03 (-121)!
    [ 7.600768] ds90ub960 8-003d: Cannot read first register (-121), abort
    [ 7.614264] ds90ub960: probe of 8-003d failed with error

    • If an error like the following shows up, trying switching the order of the dtbo files such that fusion board comes before camera's dtbo file:

    ERROR: Did not find a cmdline Flattened Device Tree
    Could not find a valid device tree

    2. If different values are printed for 8-0036 and 8-003d, please check I2C addresses using i2cdetect -y -r 0x8

    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- 36 -- -- -- -- -- -- 3d -- --
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: UU -- -- -- -- -- -- --

    • If different addresses show up like below, please unplug SK board and fusion board, so that everything is completely powered down. Plug in power supply for fusion board first, and SK board second. Different addresses may show up since fusion board's I2C address is determined by voltage level.

    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- 32 -- -- -- -- -- -- -- 3a -- -- -- -- --
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: UU -- -- -- -- -- -- --

    3. If fusion board is detected, but cameras are not detected properly, a message similar to below will print out:

    Unable to setup formats: Invalid argument (22)
    CSI Camera 0 detected
        device = /dev/video2
        name = ds90ub960 8-003d
        format =  
        subdev_id = 2
        isp_required = 

    • Please ensure the correct camera's dtbo file is used in uenv.txt. Things to check are RCM vs CM, and position of camera on the fusion board.

    4. Once fusion board and cameras are detected properly, a message will print out saying cameras are detected. Expected output is:

    [ 21.521662] init_script.sh[1164]: IMX390 Camera 0 detected
    [ 21.540467] init_script.sh[1164]: device = /dev/video20
    [ 21.540641] init_script.sh[1164]: name = imx390 10-001a
    [ 21.540726] init_script.sh[1164]: format = [fmt:SRGGB12_1X12/1936x1100 field: none]
    [ 21.540801] init_script.sh[1164]: subdev_id = /dev/v4l-subdev7
    [ 21.540868] init_script.sh[1164]: isp_required = yes
    [ 21.540930] init_script.sh[1164]: ldc_required = yes

    5. To test camera, please edit the imx390_cam_example.yaml configuration file with printed out device and subdev_id, and run our out-of-box demo, app_edgeai using the configuration file. Alternatively, using v4l2-ctl and specifying input resolution and format should print out fps if camera is set up and detected: v4l2-ctl -d2 --set-fmt-video=width=1936,height=1100,pixelformat=RG12  --stream-mmap