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.

TMS570LS3137: TMS570 Safety Library pbistRun() SCI1 DMA

Part Number: TMS570LS3137
Other Parts Discussed in Thread: HALCOGEN

Hello to everyone,

we have a very special problem with the safety library in connection with bootloader and an application.

We use a slightly modified form of the generated code from HALCoGen, therefore the initialization should be correct so far.

In the bootloader we call pbistRun() for two dual port memories (VIM RAM and DMA RAM).
In the application we want to use SCI1 TX and DMA.

This leads to the problem that no byte, or sometimes only the first byte is transferred. Furthermore there is only 0xC3 in the DMA RAM or if we do a memory init of the DMA RAM there is 0x00 in it.

But if we don't call pbistRun() for DMA RAM, the transmission via SCI1 and DMA works perfectly. In addition, the necessary data for the transmission are also available in the DMA RAM.


So, can someone help us, please?

Thanks and regards,


Johann

  • Hello Johann,

    If you only do the PBIST at startup, it should affect the DMA usage in main(). Please disable the PBIST clock and disable the memory selftest after doing PBIST (success or fail).

    Please initialize the memory after PBIST.
  • Hello QJ Wang,

    thanks for your answer!

    The pbist check for Dual port memory only runs at boat time.

    After that, we disable the pbist exactly as it suggests or generates halcogen.

    When the test is finished, we call pbistStop().

    I also tried a memoryInit() afterwards and later, at the start of the application.

    In both cases the DMA RAM is initialized with 0, but writing into it is no longer possible.

    This are our calls:

    pbistRun( (uint32)0x00000800U       /* DMA RAM */
            | (uint32)0x00000200U              /* VIM RAM */
            , (uint32) PBIST_March13N_DP);

    memoryInit( (uint32)((uint32)1U << 1U)    /* DMA RAM */
             | (uint32)((uint32)1U << 2U)             /* VIM RAM */
             );

    PS: We have no compiler optimization enabled (waiting loops).

    Do you have any idea what else it could be or what we need to look out for?

    Thanks and regards

    Johann

  • Now, our problems have been solved. This thread served as a solution and for further information:
    e2e.ti.com/.../1547314

    Thanks and regards
    Johann