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.

J722SXH01EVM: CSITX test failed

Part Number: J722SXH01EVM

Hi,

I am developing on J722SXH01EVM with sdk 11.01.00.

I have been trying to validate CSITX-related functionality, but failed.

So I tried to run the default test program provided by the official source, but still failed.

I tried to run vx_app_conformance_video_io.out, and found that it got stuck on csitx test case. the attachment is the console log of my test.

please help tell the cause of csitx failure. 

thanks.

csitx-test.log 

 

  • I tried to add log to debug line to see where it is blocked, and finally find it is blocked here:

    ...

    this is the remote log:

    csitx-debug-remote-log.log

  • Oh, I add more log and find that it actually got stuck at pixelIfReset instead of semaphoreP_pend...

    here is my debug code and runtime log:

  • Hi Haijun,

    That's strange. This is just asserting reset to the pixel interface.. is CSITX module power on? This seems to be the first access to register space, so if it is crashing/not accessible, most likely it is not powered on..

    Regards,

    Brijesh

  • yes, CSITX module is not powered on so it got stuck here.

    I tried to change syscfg to only one OLDI dss, and tried to power on CSITX and DPHY module, but failed to open DPHY module.

    this is the syscfg I used: 

    /**
     * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
     * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
     * @cliArgs --device "J722S_TDA4VEN_TDA4AEN_AM67" --package "AMW" --part "Default" --context "main-r5fss0-0" --product "MCU_PLUS_SDK_J722S@11.01.00"
     * @versions {"tool":"1.20.0+3587"}
     */
    
    /**
     * Import the modules used in this configuration.
     */
    const dss              = scripting.addModule("/drivers/dss/dss", {}, false);
    const dss1             = dss.addInstance();
    const i2c              = scripting.addModule("/drivers/i2c/i2c", {}, false);
    const i2c1             = i2c.addInstance();
    const i2c2             = i2c.addInstance();
    const mcspi            = scripting.addModule("/drivers/mcspi/mcspi", {}, false);
    const mcspi1           = mcspi.addInstance();
    const addr_translate   = scripting.addModule("/kernel/dpl/addr_translate", {}, false);
    const addr_translate1  = addr_translate.addInstance();
    const debug_log        = scripting.addModule("/kernel/dpl/debug_log");
    const mpu_armv7        = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false);
    const mpu_armv71       = mpu_armv7.addInstance();
    const mpu_armv72       = mpu_armv7.addInstance();
    const mpu_armv73       = mpu_armv7.addInstance();
    const mpu_armv74       = mpu_armv7.addInstance();
    const mpu_armv75       = mpu_armv7.addInstance();
    const mpu_armv76       = mpu_armv7.addInstance();
    const mpu_armv77       = mpu_armv7.addInstance();
    const mpu_armv78       = mpu_armv7.addInstance();
    const mpu_armv79       = mpu_armv7.addInstance();
    const mpu_armv710      = mpu_armv7.addInstance();
    const mpu_armv711      = mpu_armv7.addInstance();
    const dm_power_config  = scripting.addModule("/pdm_utils/tools/dm_power_config_tool/dm_power_config", {}, false);
    const dm_power_config1 = dm_power_config.addInstance();
    
    /**
     * Write custom configuration values to the imported modules.
     */
    dss1.$name       = "CONFIG_DSS0";
    dss1.DSS.$assign = "DSS0";
    
    i2c1.useWakeupDomainPeripherals = false;
    i2c1.bitRate                    = "100KHZ";
    i2c1.$name                      = "HDMI_AND_DSI_BRIDGE_I2C_CONFIG";
    i2c1.I2C.$assign                = "I2C1";
    
    i2c2.$name                      = "CONFIG_I2C2";
    i2c2.useWakeupDomainPeripherals = false;
    i2c2.I2C.$assign                = "I2C2";
    
    mcspi1.$name                 = "CONFIG_MCSPI0";
    mcspi1.SPI.$assign           = "SPI0";
    mcspi1.SPI.CLK.rx            = false;
    mcspi1.SPI.CLK.$assign       = "SPI0_CLK";
    mcspi1.SPI.D0.rx             = false;
    mcspi1.SPI.D0.$assign        = "SPI0_D0";
    mcspi1.SPI.D1.$assign        = "SPI0_D1";
    mcspi1.mcspiChannel[0].$name = "CONFIG_MCSPI_CH0";
    
    addr_translate1.$name      = "CONFIG_ADDR_TRANSLATE_REGION0";
    addr_translate1.localAddr  = 0xC0000000;
    addr_translate1.systemAddr = 0x900000000;
    
    debug_log.enableLogZoneWarning = false;
    debug_log.enableLogZoneError   = false;
    
    mpu_armv71.size         = 31;
    mpu_armv71.attributes   = "Device";
    mpu_armv71.allowExecute = false;
    mpu_armv71.$name        = "CONFIG_MPU_REGISTER";
    
    mpu_armv72.size       = 15;
    mpu_armv72.$name      = "CONFIG_MPU_TCMA";
    mpu_armv72.attributes = "NonCached";
    
    mpu_armv73.baseAddr   = 0x41010000;
    mpu_armv73.size       = 15;
    mpu_armv73.$name      = "CONFIG_MPU_TCMB";
    mpu_armv73.attributes = "NonCached";
    
    mpu_armv74.baseAddr = 0x60000000;
    mpu_armv74.size     = 26;
    mpu_armv74.$name    = "CONFIG_MPU_FLASH";
    
    mpu_armv75.baseAddr = 0x79100000;
    mpu_armv75.size     = 19;
    mpu_armv75.$name    = "CONFIG_MPU_MCU_MSRAM";
    
    mpu_armv76.baseAddr = 0x80000000;
    mpu_armv76.size     = 31;
    mpu_armv76.$name    = "CONFIG_MPU_DDR";
    
    mpu_armv77.baseAddr     = 0xA2000000;
    mpu_armv77.size         = 20;
    mpu_armv77.$name        = "LINUX_VRING";
    mpu_armv77.allowExecute = false;
    mpu_armv77.attributes   = "NonCached";
    
    mpu_armv78.baseAddr     = 0xA2100000;
    mpu_armv78.size         = 20;
    mpu_armv78.allowExecute = false;
    mpu_armv78.$name        = "RESOURCE_TABLE_AND_TRACE";
    mpu_armv78.attributes   = "NonCached";
    
    mpu_armv79.baseAddr     = 0xA5000000;
    mpu_armv79.size         = 24;
    mpu_armv79.allowExecute = false;
    mpu_armv79.$name        = "RTOS_IPC_VRING";
    mpu_armv79.attributes   = "NonCached";
    
    mpu_armv710.baseAddr     = 0xA7000000;
    mpu_armv710.size         = 24;
    mpu_armv710.allowExecute = false;
    mpu_armv710.$name        = "TIOVX_RUN_TIME_LOGGING1";
    mpu_armv710.attributes   = "NonCached";
    
    mpu_armv711.baseAddr     = 0xAB000000;
    mpu_armv711.size         = 24;
    mpu_armv711.allowExecute = false;
    mpu_armv711.$name        = "TIOVX_RUN_TIME_LOGGING2";
    mpu_armv711.attributes   = "NonCached";
    
    dm_power_config1.$name                           = "PowerConfig0";
    dm_power_config1.MAIN_R5FSS_1                    = 0;
    dm_power_config1.MCU_R5FSS_0                     = 0;
    dm_power_config1.MAIN_C71SS_0                    = 0;
    dm_power_config1.MAIN_C71SS_1                    = 0;
    dm_power_config1.MAIN_GPU_0                      = 0;
    dm_power_config1["MAIN_Video_Encoder/Decoder_0"] = 0;
    dm_power_config1.CSI_TX_ESC_CLK                  = 0;
    dm_power_config1.CSI_TX_MAIN_CLK                 = 0;
    dm_power_config1.MAIN_CSI_RX                     = ["TISCI_DEV_CSI_RX_IF0","TISCI_DEV_CSI_RX_IF1","TISCI_DEV_DPHY_RX0","TISCI_DEV_DPHY_RX1"];
    
    /**
     * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
     * version of the tool will not impact the pinmux you originally saw.  These lines can be completely deleted in order to
     * re-solve from scratch.
     */
    i2c1.I2C.SCL.$suggestSolution               = "I2C1_SCL";
    i2c1.I2C.SDA.$suggestSolution               = "I2C1_SDA";
    i2c2.I2C.SCL.$suggestSolution               = "GPMC0_CSn2";
    i2c2.I2C.SDA.$suggestSolution               = "GPMC0_CSn3";
    mcspi1.mcspiChannel[0].CSn.$suggestSolution = "SPI0_CS0";
    

    I add these 2 line to poweron CSITX module and DPHY module, but to open DPHY module.

    now, csitx app could run without error but there is no mipi clock observed at TP136, is it means that no MIPI signal was sent out to CSITX?

  • Hi Haijun,

    Is CSITX enabled in the control module? I think bit[1:0] in CTRL_MMR0_CFG0_DPHY_TX0_CTRL register needs to be set to 2 to enable CSITX output on these lanes..

    Regards,

    Brijesh

  • Hi,

    how can I set this register?

    I can not find the TRM about it

  • Hi haijun,

    DPHY is common between DSI and CSITX output, so this register is used to select DSI or CSITX output from DPHY. By default, it is set to DSI output, so it needs to be changed to get CSITX output. 

    You can refer to API appCsi2TxInit in vision apps to understand how this register can be set. Btw, this register should be set to value 0x1..

    Regards,

    Brijesh 

  • Hi,

    This register is set to 1, I can read it using devmem2 tool:

    but still DPHY_TX module poweron failed, and no MIPI Clock signals was emitted.

    this is my code to configure csitx and dphy:

    please help check this code. thanks very much!

  • Hello,

    any other ideas on this problem?

  • Hi Haijun,

    but still DPHY_TX module poweron failed,

    This is important, without powering on DPHY, it will not work.. I thought poweron is working.. 

    Are you following any sequence for powering it on? 

    MIPI Clock signals was emitted.

    Are you also sending out the data when you measure this MIPI clock output? Please note clock output will be available only when there is a data from CSITX.. 

    Regards,

    Brijesh

  • Are you following any sequence for powering it on? 

    sorry, I did not get you. the sequence has already been shown in this snapshot:

    any problem in my code?

  • Hi Haijun,

    But is this sequence failing? I mean, are you seeing any error printed for the above calls? 

    Regards,

    Brijesh

  • yes, failed to set DPHY module on.

  • Hi Haijun,

    We have tested CSITX, but at the mcu+ driver level. the API taskFxn in ti-processor-sdk-rtos-j722s-evm-11_01_00_04\mcu_plus_sdk_j722s_11_01_00_15\examples\drivers\csitx\csitx_transmit_test\j722s-evm\main-r5fss0-0_freertos\main_rtos.c  powers on the DPHY and CSITX and also sets up the additional clock. This is working example EVM. 

    Can you please check this example and compare the sequence followed in this example vs your code?

    Regards,

    Brijesh