I’ve been mentioning the ROMTABLE in a previous post. So, what is going on with the ROMTABLE? At first I looked at the ARM Debug Interface Architecture Specifications, where it stated in the MEM-AP, the BASE register contains a pointer to the ROMTABLE. As this is only available to the debugger and not from within the microcontroller, I wouldn’t be able to know the address from within the microcontroller. As I’ve seen in my first post about the ROMTABLE, there were different addresses. Then the ARM Technical Reference Manual for ARMv6m and ARMv7m mention the address for the ROMTABLE to be 0xE00FF000 to 0xE00FFFFF. So, what is going on here?

I’ve been looking at what OpenOCD has to say about the ROMTABLE for various Cortex-M based microcontrollers I’ve laying around. For this, I have OpenOCD connected to the microcontroller, and then issue the “dap info” command.

For most microcontrollers we see MEM-AP BASE 0xe00ff003. So this agrees with the Technical Reference Manuals. However, some of the microcontrollers have this 0xf0000003 value, which is what I’ve seen on the PSoC before. Now, it seems the microcontrollers that use this value have a ROMTABLE with the vendor’s ID at this address, and point to a ROMTABLE at 0xe00ff003 which has the Cortex-M ROMTABLE identifier there.

Now, I’ve wondering about one thing. As I’ve seen the same address 0xf0000003 for all microcontrollers that do this linked table thing, is this address specified somewhere?

Attachment: ROMTABLES for various microcontrollers: romtables