This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Access ETM without using a debug kit

Hi

i'm using Nucleo board F401RE.

i want to access to ETM with code.

i'm using IAR Embedded Workbench

My code:

#define ETM_CR 0xE0041000 // Address of ETM_CR

#define ETM_LAR 0xE0041FB0 // Address of  ETM_LAR

#define UNLOCK 0xC5ACCE55 // Value to unlock the ETM

int main (void)

{

unsigned int *pointer_1 = (unsigned int *) ETM_LAR;  //  The pointer_1 will point to the address contained in the variable ETM_LAR
                                                                                     
*pointer_1 = UNLOCK;  // Cheque UNLOCK to the contents of the memory address ETM_LAR

unsigned int *pointer_2 = (unsigned int *) ETM_CR;  //  The pointer_2 will point to the address contained in the variable ETM_CR

unsigned int var = 0x0;  // I initialize a variable called var

var = *pointer_1;   // I assign the contents of pointer_1 to the variable var


while (1)
{

printf("Il contenuto in esadecimale è: %p\n", *pointer_1);  // I expect to see on the terminal the value of UNLOCK

}

}

Parents
  • I took a look at https://www.st.com/en/evaluation-tools/nucleo-f401re.html is this your board?

    If it is, this board uses the LQFP64 package. Looking at the SoC data sheet (https://www.st.com/resource/en/datasheet/stm32f401re.pdf) only the UFBGA100 package presents the TRACECLK, TRACED[0..3] to the outside world.

    The ETM watches what the core is doing and converts its execution history into a compressed trace data stream which it then has to send somewhere. Two common options are:

    • Internal RAM or to special trace RAM
    • External trace port via TRACECLK, TRACED[0..3] (You then need an external trace capture device to collect the trace data)

    The ST design only provides the second option and the SoC package on your board does not bring these pins out. So I dont think it is possible for you to make use of the ETM to look at execution history - which I presume is the 'ETM logs' you are referring to. In any case, you would always need an external trace capture device - you cant view the ETM output 'in your code'.

    What the ST device (and package) does have, is SWO output (sometimes called SWV). I suggest you take a look at https://www.st.com/resource/en/application_note/dm00354244.pdf and see if using printf style output in your code can help with the problem you are trying to address.

    Regards Tony

Reply
  • I took a look at https://www.st.com/en/evaluation-tools/nucleo-f401re.html is this your board?

    If it is, this board uses the LQFP64 package. Looking at the SoC data sheet (https://www.st.com/resource/en/datasheet/stm32f401re.pdf) only the UFBGA100 package presents the TRACECLK, TRACED[0..3] to the outside world.

    The ETM watches what the core is doing and converts its execution history into a compressed trace data stream which it then has to send somewhere. Two common options are:

    • Internal RAM or to special trace RAM
    • External trace port via TRACECLK, TRACED[0..3] (You then need an external trace capture device to collect the trace data)

    The ST design only provides the second option and the SoC package on your board does not bring these pins out. So I dont think it is possible for you to make use of the ETM to look at execution history - which I presume is the 'ETM logs' you are referring to. In any case, you would always need an external trace capture device - you cant view the ETM output 'in your code'.

    What the ST device (and package) does have, is SWO output (sometimes called SWV). I suggest you take a look at https://www.st.com/resource/en/application_note/dm00354244.pdf and see if using printf style output in your code can help with the problem you are trying to address.

    Regards Tony

Children