Part Number: TMDS273GPEVM
I'm developing CSIRX function with TMDS273GPEVM.
sysconfig is as below.
And I'm following the step of programming model in technical reference manual.
However I'm having trouble with the program.
I can see the CSI2_COMPLEXIO_CFG1.PWR_STATE doesn't reach the Power On state.
/**
* 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 "AM273x" --package "ZCE" --part "Default" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM273x.evmAM273x@09.01.00"
* @versions {"tool":"1.18.0+3266"}
*/
/**
* Import the modules used in this configuration.
*/
const flash = scripting.addModule("/board/flash/flash", {}, false);
const flash1 = flash.addInstance();
const csirx = scripting.addModule("/drivers/csirx/csirx", {}, false);
const csirx1 = csirx.addInstance();
const gpio = scripting.addModule("/drivers/gpio/gpio", {}, false);
const gpio1 = gpio.addInstance();
const gpio2 = gpio.addInstance();
const gpio3 = gpio.addInstance();
const gpio4 = gpio.addInstance();
const i2c = scripting.addModule("/drivers/i2c/i2c", {}, false);
const i2c1 = i2c.addInstance();
const rti = scripting.addModule("/drivers/rti/rti", {}, false);
const rti1 = rti.addInstance();
const uart = scripting.addModule("/drivers/uart/uart", {}, false);
const uart1 = uart.addInstance();
const clock = scripting.addModule("/kernel/dpl/clock");
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 default_linker = scripting.addModule("/memory_configurator/default_linker", {}, false);
const default_linker1 = default_linker.addInstance();
const general = scripting.addModule("/memory_configurator/general", {}, false);
const general1 = general.addInstance();
const region = scripting.addModule("/memory_configurator/region", {}, false);
const region1 = region.addInstance();
const section = scripting.addModule("/memory_configurator/section", {}, false);
const section1 = section.addInstance();
const section2 = section.addInstance();
const section3 = section.addInstance();
const section4 = section.addInstance();
const section5 = section.addInstance();
const section6 = section.addInstance();
const section7 = section.addInstance();
const section8 = section.addInstance();
const section9 = section.addInstance();
const section10 = section.addInstance();
const section11 = section.addInstance();
const section12 = section.addInstance();
/**
* Write custom configuration values to the imported modules.
*/
flash1.$name = "CONFIG_FLASH0";
flash1.peripheralDriver.$name = "CONFIG_QSPI0";
csirx1.$name = "CONFIG_CSIRX0";
csirx1.phyEnable = true;
csirx1.instance = "CSIRX B";
csirx1.dphy.$name = "CONFIG_CSIRX_DPHY0";
csirx1.dphy.ddrClockInHz = 150000000;
csirx1.dphy.isClockMissingDetectionEnabled = false;
csirx1.complexio.$name = "CONFIG_CSIRX_COMPLEXIO0";
csirx1.complexio.dataLane2_position = "CSIRX_LANE_POSITION_LANE_NOT_USED";
csirx1.complexio.dataLane3_position = "CSIRX_LANE_POSITION_LANE_NOT_USED";
csirx1.common.$name = "CONFIG_CSIRX_COMMON0";
csirx1.common.commonCallback = "App_csirxCommonCallback";
csirx1.common.combinedEndOfFrameCallback = "App_csirxEndOfFrameCallback";
csirx1.common.isOcpError = true;
csirx1.common.isOneBitShortPacketErrorCorrect = true;
csirx1.common.isGenericShortPacketReceive = true;
csirx1.common.isMoreThanOneBitShortPacketErrorCannotCorrect = true;
csirx1.common.isComplexioError = true;
csirx1.common.isFifoOverflow = true;
csirx1.context[0].$name = "CONFIG_CSIRX_CONTEXT0";
csirx1.context[0].isFrameEndCodeDetect = true;
csirx1.context[0].format = "CSIRX_FORMAT_RAW12";
csirx1.context[0].numLinesForIntr = 64;
csirx1.context[0].isEndOfFramePulseEnabled = true;
csirx1.context[0].isLineEndCodeDetect = true;
csirx1.context[0].isGenerateIntrEveryNumLinesForIntr = false;
csirx1.context[0].isNumLines = true;
csirx1.context[0].isPayloadChecksumMismatch = true;
csirx1.context[0].isLineStartCodeDetect = true;
csirx1.context[0].isFramesToAcquire = true;
csirx1.context[0].isFrameStartCodeDetect = true;
csirx1.context[0].isLongPacketOneBitErrorCorrect = true;
gpio1.pinDir = "OUTPUT";
gpio1.$name = "MLX_RESETN";
gpio1.MSS_GPIO.gpioPin.$assign = "PAD_DP";
gpio2.$name = "MLX_TRIG";
gpio2.pinDir = "OUTPUT";
gpio2.MSS_GPIO.gpioPin.$assign = "PAD_DQ";
gpio3.$name = "VCSEL_EN";
gpio3.pinDir = "OUTPUT";
gpio3.MSS_GPIO.gpioPin.$assign = "PAD_DR";
gpio4.$name = "V1_2_EN";
gpio4.pinDir = "OUTPUT";
gpio4.MSS_GPIO.gpioPin.$assign = "PAD_DZ";
i2c1.$name = "I2CB_MLX";
i2c1.instance = "RCSS_I2CB";
i2c1.advanced = true;
i2c1.RCSS_I2C.$assign = "RCSS_I2CB";
i2c1.RCSS_I2C.SCL.pull = "pu";
i2c1.RCSS_I2C.SCL.$assign = "PAD_CW";
i2c1.RCSS_I2C.SDA.pull = "pu";
i2c1.RCSS_I2C.SDA.$assign = "PAD_CV";
rti1.$name = "CONFIG_RTI0";
rti1.counter0Enable = true;
rti1.compare0Enable = true;
rti1.eventCallback0 = "rtiEvent0";
rti1.enableIntr0 = true;
uart1.$name = "CONFIG_UART0";
const edma = scripting.addModule("/drivers/edma/edma", {}, false);
const edma1 = edma.addInstance({}, false);
edma1.$name = "CONFIG_EDMA0";
flash1.peripheralDriver.edmaConfig = edma1;
uart1.edmaConfig = edma1;
edma1.edmaRmDmaCh[0].$name = "CONFIG_EDMA_RM0";
edma1.edmaRmQdmaCh[0].$name = "CONFIG_EDMA_RM1";
edma1.edmaRmTcc[0].$name = "CONFIG_EDMA_RM2";
edma1.edmaRmParam[0].$name = "CONFIG_EDMA_RM3";
edma1.edmaRmReservedDmaCh[0].$name = "CONFIG_EDMA_RM4";
mpu_armv71.$name = "CONFIG_MPU_REGION0";
mpu_armv71.attributes = "Device";
mpu_armv71.allowExecute = false;
mpu_armv72.$name = "CONFIG_MPU_REGION1";
mpu_armv72.size = 14;
mpu_armv73.$name = "CONFIG_MPU_REGION2";
mpu_armv73.baseAddr = 0x80000;
mpu_armv73.size = 14;
mpu_armv74.$name = "CONFIG_MPU_REGION3";
mpu_armv74.baseAddr = 0x10200000;
mpu_armv74.size = 20;
mpu_armv75.$name = "CONFIG_MPU_REGION4";
mpu_armv75.baseAddr = 0x102E0000;
mpu_armv75.size = 16;
mpu_armv75.attributes = "NonCached";
mpu_armv75.allowExecute = false;
default_linker1.$name = "memory_configurator_default_linker0";
general1.$name = "CONFIG_GENERAL0";
general1.linker.$name = "TIARMCLANG0";
region1.$name = "MEMORY_REGION_CONFIGURATION0";
region1.memory_region.create(10);
region1.memory_region[0].$name = "R5F_VECS";
region1.memory_region[0].size = 0x40;
region1.memory_region[0].auto = false;
region1.memory_region[1].$name = "R5F_TCMA";
region1.memory_region[1].size = 0x3FC0;
region1.memory_region[2].type = "TCMB_R5F";
region1.memory_region[2].size = 0x4000;
region1.memory_region[2].$name = "R5F_TCMB";
region1.memory_region[3].type = "MSS_L2_R5F";
region1.memory_region[3].$name = "MSS_L2";
region1.memory_region[3].auto = false;
region1.memory_region[3].manualStartAddress = 0x10260000;
region1.memory_region[3].size = 0x40000;
region1.memory_region[4].type = "DSS_L3_ALL";
region1.memory_region[4].isShared = true;
region1.memory_region[4].shared_cores = ["c66ss0","r5fss0-1"];
region1.memory_region[4].$name = "DSS_L3";
region1.memory_region[4].size = 0x390000;
region1.memory_region[5].type = "MSS_L2_R5F";
region1.memory_region[5].auto = false;
region1.memory_region[5].manualStartAddress = 0x102E8000;
region1.memory_region[5].size = 0x4000;
region1.memory_region[5].$name = "USER_SHM_MEM";
region1.memory_region[5].isShared = true;
region1.memory_region[5].shared_cores = ["r5fss0-1"];
region1.memory_region[6].type = "MSS_L2_R5F";
region1.memory_region[6].$name = "LOG_SHM_MEM";
region1.memory_region[6].isShared = true;
region1.memory_region[6].shared_cores = ["r5fss0-1"];
region1.memory_region[6].size = 0x4000;
region1.memory_region[7].type = "CUSTOM_ALL";
region1.memory_region[7].$name = "RTOS_NORTOS_IPC_SHM_MEM";
region1.memory_region[7].isShared = true;
region1.memory_region[7].shared_cores = ["c66ss0","r5fss0-1"];
region1.memory_region[7].auto = false;
region1.memory_region[7].manualStartAddress = 0xC5000000;
region1.memory_region[7].size = 0x1F40;
region1.memory_region[8].type = "CUSTOM_ALL";
region1.memory_region[8].auto = false;
region1.memory_region[8].$name = "MAILBOX_HSM";
region1.memory_region[8].isShared = true;
region1.memory_region[8].shared_cores = ["c66ss0","r5fss0-1"];
region1.memory_region[8].manualStartAddress = 0x44000000;
region1.memory_region[8].size = 0x3CE;
region1.memory_region[9].type = "CUSTOM_ALL";
region1.memory_region[9].auto = false;
region1.memory_region[9].manualStartAddress = 0x44000400;
region1.memory_region[9].size = 0x3CE;
region1.memory_region[9].$name = "MAILBOX_R5F";
region1.memory_region[9].isShared = true;
region1.memory_region[9].shared_cores = ["c66ss0","r5fss0-1"];
section1.$name = "Vector Table";
section1.group = false;
section1.load_memory = "R5F_VECS";
section1.output_section.create(1);
section1.output_section[0].$name = ".vectors";
section1.output_section[0].palignment = true;
section2.$name = "Code and Read-Only Data";
section2.load_memory = "MSS_L2";
section2.output_section.create(2);
section2.output_section[0].$name = ".text";
section2.output_section[0].palignment = true;
section2.output_section[1].$name = ".rodata";
section2.output_section[1].palignment = true;
section3.$name = "Data Segment";
section3.load_memory = "MSS_L2";
section3.output_section.create(1);
section3.output_section[0].$name = ".data";
section3.output_section[0].palignment = true;
section4.$name = "Memory Segments";
section4.load_memory = "MSS_L2";
section4.output_section.create(3);
section4.output_section[0].$name = ".bss";
section4.output_section[0].palignment = true;
section4.output_section[0].output_sections_start = "__BSS_START";
section4.output_section[0].output_sections_end = "__BSS_END";
section4.output_section[1].$name = ".sysmem";
section4.output_section[1].palignment = true;
section4.output_section[2].$name = ".stack";
section4.output_section[2].palignment = true;
section5.$name = "Stack Segments";
section5.load_memory = "MSS_L2";
section5.output_section.create(5);
section5.output_section[0].$name = ".irqstack";
section5.output_section[0].output_sections_start = "__IRQ_STACK_START";
section5.output_section[0].output_sections_end = "__IRQ_STACK_END";
section5.output_section[0].input_section.create(1);
section5.output_section[0].input_section[0].$name = ". = . + __IRQ_STACK_SIZE;";
section5.output_section[1].$name = ".fiqstack";
section5.output_section[1].output_sections_start = "__FIQ_STACK_START";
section5.output_section[1].output_sections_end = "__FIQ_STACK_END";
section5.output_section[1].input_section.create(1);
section5.output_section[1].input_section[0].$name = ". = . + __FIQ_STACK_SIZE;";
section5.output_section[2].$name = ".svcstack";
section5.output_section[2].output_sections_start = "__SVC_STACK_START";
section5.output_section[2].output_sections_end = "__SVC_STACK_END";
section5.output_section[2].input_section.create(1);
section5.output_section[2].input_section[0].$name = ". = . + __SVC_STACK_SIZE;";
section5.output_section[3].$name = ".abortstack";
section5.output_section[3].output_sections_start = "__ABORT_STACK_START";
section5.output_section[3].output_sections_end = "__ABORT_STACK_END";
section5.output_section[3].input_section.create(1);
section5.output_section[3].input_section[0].$name = ". = . + __ABORT_STACK_SIZE;";
section5.output_section[4].$name = ".undefinedstack";
section5.output_section[4].output_sections_start = "__UNDEFINED_STACK_START";
section5.output_section[4].output_sections_end = "__UNDEFINED_STACK_END";
section5.output_section[4].input_section.create(1);
section5.output_section[4].input_section[0].$name = ". = . + __UNDEFINED_STACK_SIZE;";
section6.$name = "Initialization and Exception Handling";
section6.load_memory = "MSS_L2";
section6.output_section.create(3);
section6.output_section[0].$name = ".ARM.exidx";
section6.output_section[0].palignment = true;
section6.output_section[1].$name = ".init_array";
section6.output_section[1].palignment = true;
section6.output_section[2].$name = ".fini_array";
section6.output_section[2].palignment = true;
section7.$name = "BSS DSS L3";
section7.load_memory = "DSS_L3";
section7.group = false;
section7.output_section.create(1);
section7.output_section[0].$name = ".bss.dss_l3";
section7.output_section[0].alignment = 0;
section8.$name = "User Shared Memory";
section8.load_memory = "USER_SHM_MEM";
section8.type = "NOLOAD";
section8.group = false;
section8.output_section.create(1);
section8.output_section[0].$name = ".bss.user_shared_mem";
section8.output_section[0].alignment = 0;
section9.$name = "Log Shared Memory";
section9.type = "NOLOAD";
section9.load_memory = "LOG_SHM_MEM";
section9.group = false;
section9.output_section.create(1);
section9.output_section[0].$name = ".bss.log_shared_mem";
section9.output_section[0].alignment = 0;
section10.$name = "IPC Shared Memory";
section10.type = "NOLOAD";
section10.load_memory = "RTOS_NORTOS_IPC_SHM_MEM";
section10.group = false;
section10.output_section.create(1);
section10.output_section[0].alignment = 0;
section10.output_section[0].$name = ".bss.ipc_vring_mem";
section11.$name = "SIPC HSM Queue Memory";
section11.type = "NOLOAD";
section11.load_memory = "MAILBOX_HSM";
section11.group = false;
section11.output_section.create(1);
section11.output_section[0].alignment = 0;
section11.output_section[0].$name = ".bss.sipc_hsm_queue_mem";
section12.$name = "SIPC R5F Queue Memory";
section12.type = "NOLOAD";
section12.group = false;
section12.load_memory = "MAILBOX_R5F";
section12.output_section.create(1);
section12.output_section[0].alignment = 0;
section12.output_section[0].$name = ".bss.sipc_r5f_queue_mem";
/**
* 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.
*/
flash1.peripheralDriver.MSS_QSPI["0"].$suggestSolution = "PAD_AL";
flash1.peripheralDriver.MSS_QSPI["1"].$suggestSolution = "PAD_AM";
flash1.peripheralDriver.MSS_QSPI["2"].$suggestSolution = "PAD_AN";
flash1.peripheralDriver.MSS_QSPI["3"].$suggestSolution = "PAD_AO";
flash1.peripheralDriver.MSS_QSPI.$suggestSolution = "MSS_QSPI0";
flash1.peripheralDriver.MSS_QSPI.CLK.$suggestSolution = "PAD_AP";
flash1.peripheralDriver.MSS_QSPI.CS.$suggestSolution = "PAD_AQ";
gpio1.MSS_GPIO.$suggestSolution = "MSS_GPIO0";
gpio2.MSS_GPIO.$suggestSolution = "MSS_GPIO0";
gpio3.MSS_GPIO.$suggestSolution = "MSS_GPIO0";
gpio4.MSS_GPIO.$suggestSolution = "MSS_GPIO0";
rti1.MSS_RTI.$suggestSolution = "MSS_RTIC";
uart1.MSS_UART.$suggestSolution = "MSS_UARTA";
uart1.MSS_UART.RX.$suggestSolution = "PAD_AJ";
uart1.MSS_UART.TX.$suggestSolution = "PAD_AK";
below is my user log
CS2 process start
CS2_SYSCONFIG.MSTANBY MODE <= 0x02
Interrupt enable -> skip
CSI2_IRQSTATUS: 00000000
CSI2_IRQENABLE: 00000000
complex io Interrupt enable -> skip
CSI2_COMPLEXIO1_IRQSTATUS: 00000000
CSI2_COMPLEXIO1_IRQENABLE: 00739CE7
set CSI2_COMPLEXIO_CFG1.PWR_CMD to ON state
CSI2_COMPLEXIO_CFG1: 48000213
CSI2_COMPLEXIO_CFG1: 48000213
CSI2_COMPLEXIO_CFG1: 48000213
What I should check for this problem.
If you have example code for CSIRX with actual image sensor not debug loopback mode,
please provide me.
Thank you