TI forum,
We've developed a custom board that uses a C6713B DSP as a slave device to an Atmel ARM MCU. On power up, the MCU programs the DSP with the following process:
- Reset the DSP by holding the nRESET line on the DSP active for 100ms. Wait for 10ms after releasing the nRESET line for any bootloader initialization on the DSP.
- Initialize the DSP's EMIF registers over HPI
- Initialize the DSP's PLL registers over HPI
- Wait 500ms to allow the new PLL settings to take effect
- Initialize the DSP's EMIF registers again using the new PLL settings, again over HPI
- Copy over the DSP program from the MCU Flash to the DSP sector by sector. Read back each sector and verify CRC.
- Write to register for the DSP to reboot into the copied program, wait 1s for the DSP to run through initialization in the program.
- Read the results of a memory pattern test that the copied program performs on startup to verify that the program has started.
For our previous revision of boards, this algorithm worked essentially every time on all of our boards (~30 boards, power cycled ~daily). There were isolated instances (<1% of power cycles) of CRC failures in step 6 or memory pattern failures from step 8, but their frequency was within our acceptable error margin.
For our newest revision of boards, this algorithm does not work as-is. A delay must be inserted at the end of step 2 of ~20ms and the delay after PLL setup must be increased to 600ms. If these delays are not added, the algorithm fails nearly 100% of the time. The board layout has changed between board revisions, but no support hardware has been changed for the DSP, and no support hardware related to the HPI bus has been changed for the MCU. The minimum delays that allow the programming algorithm to succeed are large enough (order of milliseconds) that I do not suspect something like longer traces causing slower SDRAM throughput to be the root cause.
My question is, what could be the source of the additional delays needed?
Thanks in advance,
-Chris F.