SK-TDA4VM: SK-TDA4VM+fusion board+IMX390 i2c errors

Part Number: SK-TDA4VM
Other Parts Discussed in Thread: PCA9538

Tool/software:

I have a J721EXSKG01EVM to which I connected EVM577PFUSION, and to its zero port I connected D3CMC74N-106-085-S.
According to the guide provided here I downloaded Edge AI SDK 8.2, wrote it to an SD card, replaced the dts according to point 2 of the guide, and finally got that fusion board is detected, the serializer also seems to be fine, but the video sensor itself does not respond to i2c requests and consequently its initialization failed. Here is part of the system log:

[    7.664274] ds90ub960 8-0036: Successfully probed (rev/mask 40)
[    7.872756] ds90ub960 8-003d: Successfully probed (rev/mask 40)
...
[   10.568615] ds90ub953 8-0044: Found rev 2, mask 0
[   10.579265] imx390 10-0021: inck rate: 27000000 Hz
[   10.624362] imx390 10-0021: imx390_read: failed to read reg 0x0330: -121
[   10.631136] imx390: probe of 10-0021 failed with error -121
[   10.953166] ds90ub960 8-003d: RX0 STS2 error: 0xc
[   10.957891] ds90ub960 8-003d: RX0 CSI error: 0x2


Here is what I added to the uenv.txt file:
name_overlays=k3-j721e-edgeai-apps.dtbo k3-j721e-sk-fpdlink-fusion.dtbo k3-j721e-cpb-fpdlink-imx390-cm-0-0.dtbo


The camera is connected to port #0, if I connect it to any other port then I get a serializer initialization error, so it seems the configuration is correct but I can't understand why the camera doesn't work.

Can anyone suggest where I'm making a mistake?
Thanks.

  • Hi,

    I have assigned your thread to the expert who will be able to resolve your issue.

    Thanks,

    Neehar

  • Hi,

    Does the camera enumerate when running i2cdetect?

    Best,
    Jared

  • Hi,

    No, I don't see the camera being accessible. Maybe it has some kind of non-standard address?
    Best,
    Ihor Starnavskyi

  • Hi Ihor Starnavskyi,

    If the cameras don't appear on any of the I2C lines, then there is likely some issue with the connections between the boards and the cameras.

    Perhaps the fusion board isn't receiving power correctly, or the camera's loosely connected?

    Best,
    Jared

  • Hi Jared,

    I have already checked the connections several times, tried another camera (I have 2 identical cameras), and also checked the power supply of the fusion board.
    I can see the LED light on the fusion board, and I can also see it being successfully detected in dmesg. I'm using the complete 12V power supply that came with the kit.
    Given that the ub953 serializer is also detected on the bus and it's located in the camera, the cable connections are correct.
    Before writing to the forum, I had already tried all possible simple solutions. Before finding the startup guide for this camera, I tried it on one of the latest SDK versions, where no dtb changes were needed, but the problem was the same - the video sensor was not accessible via I2C.
    I think there might be an issue with the driver, possibly the video sensor is not receiving signals like XCLR/RESET correctly, or there's a problem with CLK or directly with the power supply of the video sensor itself.

    Best,
    Ihor Starnavskyi

  • Hi Ihor Starnavskyi,

    I assume there is some issue with the sensor's power supply itself if every other component enumerates on the I2C lines.

    Does your sensor have probe points?

    Best,
    Jared

  • Hi Jared,

    My sensor is located inside a D3CMC74N-106-085-S camera, this camera has a closed housing and externally I don't see any contacts available for probing. I have 2 such cameras and I've already tried the other one, the problem is the same. Can you confirm that my D3CMC74N-106-085-S camera is supported by my J721EXSKG01EVM + EVM577PFUSION kit and Edge AI SDK 8.2?

    Best,
    Ihor Starnavskyi

  • Hi Ihor Starnavskyi,

    It has not been tested. It is not supported within Vision Apps: https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/08_02_00_05/exports/docs/imaging/imaging_release_notes.html 

    Although, hypothetically, if it's supported through a Linux driver, there should be no issues.

    Additionally, can you migrate to SDK 11.0?

    Best,
    Jared

  • Hi Jared,

    Yes, I will try how it works on SDK 11.0 and will let you know about the result.

    Best,
    Ihor Starnavskyi

  • Hi Ihor Starnavskyi,

    Please let me know when you have any updates.

    Best,
    Jared

  • Hi Jared,

    I tried SDK 11.0, it didn't bring significant success, here is the system log:

    [   10.144845] ds90ub960 6-0036: supply vddio not found, using dummy regulator
    [   10.180374] ds90ub960 6-003d: supply vddio not found, using dummy regulator
    [   11.771731] ds90ub953 6-0044: Found ub953 rev/mask 0x20
    ...
    [   12.405702] imx390 10-0021: inck rate: 27027027 Hz
    [   12.451066] imx390 10-0021: imx390_read: failed to read reg 0x0330: -121
    [   12.491666] imx390 10-0021: probe with driver imx390 failed with error -121


    Also, I contacted D3 regarding this issue and received some hint:
    "If this is a generic IMX390 driver/devicetree provided by TI or another vendor (not coded specifically for D3 cameras), there is a slight difference in our hardware layout from typical cameras. On the serializer side, there is a PCA9538 GPIO expander at I2C address 0x70 (7-bit) which controls the sensor's reset GPIO. Here is an example devicetree from our NVIDIA Jetson support package to give you an idea of the connections (we provide custom FPD drivers on this platform so the devicetree is different):

    serializer {
    
          compatible = "d3,ub953";
    
          status = "okay";
    
          physical-addr = <0x18>;
    
          /* reg is carrier-board specific and is set by d3-ser-fpd-stub */
    
     
    
          gpio-line-names = \
    
                "EXP_INTERRUPT",
    
                "IMG_STROBE",
    
                "IMG_SHUTTER",
    
                "IMG_VSYNC";
    
    };
    
     
    eeprom {
    
          status = "okay";
    
          compatible = "st,24c64", "atmel,24c64";
    
          physical-addr = <0x54>;
    
          /* reg is carrier-board specific and is set by d3-ser-fpd-stub */
    
     
    
          label = "d3cm_eeprom";
    
          pagesize = <32>;
    
          read-only;
    
    };
    
     
    example_expander: expander {
    
          status = "okay";
    
          compatible = "nxp,pca9538";
    
          physical-addr = <0x70>;
    
          /* reg is carrier-board specific and is set by d3-ser-fpd-stub */
    
     
    
          gpio-controller;
    
          #gpio-cells = <2>;
    
     
    
          gpio-line-names = \
    
                "IMG_RST",
    
                "IMG_ERR0",
    
                "IMG_ERR1",
    
                "IMG_GPI_0",
    
                "IMG_GPI_1";
    
    };
    

     
    You will need to edit/add something like`reset-gpios = <&example_expander 0 GPIO_ACTIVE_HIGH>;` to the image sensor's node as well. Instead of physical-addr, you should probably use reg but again I am not sure how the TI platform handles FPD-Link in the devicetree."

    This explains why the sensor is unavailable on the bus, it seems that its reset signal always keeps it in a reset state and therefore it doesn't work. I'm somewhat confused, could you please tell me where I can find the device tree source codes to try to modify them? Isn't there any compilation/build guide?

    Best,
    Ihor Starnavskyi