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.

CSL_chipReadReg() blocked when booting from flash

Other Parts Discussed in Thread: TMS320C6670, SYSBIOS

Hi,

I’m using TMS320C6670 DSP and testing SPI boot from flash. The test code is an RTSC code, it is very simple, only lightening LEDs in main().  My log shows that boot succeeded and all the 4 cores entered main() correctly. But they blocked on a CSL function -- CSL_chipReadReg (CSL_CHIP_DNUM), which is used for acquiring core number. This problem does NOT exist when using emulator. I compared the code section on DDR3 between emulator mode and SPI boot mode, they are the same. I don’t know why CSL_chipReadReg() blocked when booting from flash and how to resolve.

Expecting your support, thanks~

  • Hi Chris,

    The only difference between the emulator and SPI boot method is, initialization sequence. The emulator uses the gel file to initialize the cores whereas SPI boot uses the IBL. Please ensure that the init sequence of the system is correct.

    1. Have you flashed IBL? Is it EVM or custom board?

    2. How you have ensured that the booting of all cores succeeded?

    3. Could you please share the log? Are you logging through serial console?

    Thanks.

  • Thanks Rajasekaran,

    Hi Rajasekaran,

    1. Yes I have. It is a custom board and I use chip build-in Bootloader. The boot parameter table is written in flash image file using utility hex6x.
    2. The value of boot complete register is 0xF that shows all the 4 cores booting completed. I use some global variables in DDR to trace the program running state. After power on and booting, I connect the emulator, check these variables and find they are assigned new value in main(). So I can be sure that all 4 cores find the right entrance of main().
    3. As is said above, the log is just some variables in DDR, monitored by memory browser of CCS.

    Further debugging shows that the program jumps to ti_sysbios_family_c64p_Hwi0 as long as it calls CSL_chipReadReg(). Instead, I use IPC function MultiProc_Self() to obtain core number, the problem is gone. It seems something wrong with the conflict of CSL and HWI. Do I have to do some initialization before calling any CSL function and BIOS function?