Registered User mNo edit summary |
Registered User Tag: 2017 source edit |
||
(11 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
{{ApplicableFor | |||
|MPUs list=STM32MP13x, STM32MP15x | |MPUs list=STM32MP13x, STM32MP15x, STM32MP25x | ||
|MPUs checklist=STM32MP13x, STM32MP15x | |MPUs checklist=STM32MP13x, STM32MP15x, STM32MP25x | ||
}}</noinclude> | }} | ||
<noinclude></noinclude> | |||
== ROM trace analysis procedure == | == ROM trace analysis procedure == | ||
When the device is in [[STM32_MPU_ROM_code_overview#Life_cycle|OPEN state]], it is possible to access to the trace buffer located in a non-secure area of an embedded SRAM, and analyze ROM code execution traces. | When the device is in [[STM32_MPU_ROM_code_overview#Life_cycle|OPEN state]], it is possible to access to the trace buffer located in a non-secure area of an embedded SRAM, and analyze ROM code execution traces. | ||
=== On {{MicroprocessorDevice | device=1}} === | |||
To analyze ROM code traces: | To analyze ROM code traces: | ||
Line 15: | Line 18: | ||
:<syntaxhighlight lang="bash"> | :<syntaxhighlight lang="bash"> | ||
python3 rom_trace_analyzer.py traces.bin | python3 rom_trace_analyzer.py traces.bin | ||
</syntaxhighlight>. | </syntaxhighlight> | ||
Note that traces are not preserved by firmware running after ROM code. Retrieving traces should typically be done when the boot process stops in ROM code itself, when, for example, boot fails due to a wrong configuration. Otherwise, you should put a breakpoint at the beginning of the firmware. | |||
== Procedure to dump traces == | ==== Procedure to dump traces ==== | ||
=== On {{MicroprocessorDevice | device=13}} === | ===== On {{MicroprocessorDevice | device=13}} ===== | ||
:Traces are stored in SRAM1 at address ranges [0x30001638-0x30002638] | :Traces are stored in SRAM1 at address ranges [0x30001638-0x30002638] | ||
:<syntaxhighlight lang="bash"> | :<syntaxhighlight lang="bash"> | ||
Line 24: | Line 29: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== On {{MicroprocessorDevice | device=15}} === | ===== On {{MicroprocessorDevice | device=15}} ===== | ||
:Traces are stored in SYSRAM at address ranges [0x2ffc1c00-0x2ffC2400] | :Traces are stored in SYSRAM at address ranges [0x2ffc1c00-0x2ffC2400] | ||
:The command below gives an example of how to perform this with the "openocd" tool on a DK2 board. | :The command below gives an example of how to perform this with the "openocd" tool on a DK2 board. | ||
Line 32: | Line 37: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Scripts to analyze traces == | ==== Scripts to analyze traces ==== | ||
=== On {{MicroprocessorDevice | device=13}} === | ===== On {{MicroprocessorDevice | device=13}} ===== | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
# | # | ||
Line 555: | Line 560: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== On {{MicroprocessorDevice | device=15}} === | ===== On {{MicroprocessorDevice | device=15}} ===== | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
Line 1,024: | Line 1,029: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== On {{MicroprocessorDevice | device=2}} === | |||
ROM code traces cannot be downloaded directly. The process to get traces consists to use a special FSBL that will print the traces on UART. | |||
Here is a link where to download the FSBL binary, depending on the UART used : | |||
https://github.com/STMicroelectronics/wiki-stm32mp-addons/tree/main/MP2RomTracesDump | |||
These binaries permit to display MP25/MP23 bootrom traces on UART @115200 bauds, 8bits, 1 stop bit, no parity, no CTS/RTS. | |||
According to used binary, the traces are output on the designated UART and GPIO pin of filename. | |||
For each MP2ROMtracesdump, 2 binaries are available. | |||
Files with .stm32 extension are binary with header, unsigned, to be run on a CLOSED_UNLOCKED chip. | |||
Files with .bin extension are binary without header to be signed by customer to be run on CLOSED_LOCKED_PROVD chip. | |||
This binary has to be flashed on flash device (SD card, EMMC, Parallel NAND, SNOR, SNAND or HYPERFLASH) or it can be used with serial fallback. | |||
On flash device, it can be flashed in FSBL1 position or in FSBL2 position as backup FSBL in case of FSBL1 failed loading. | |||
This binary can only be used on CA35 Aarch64 TDCID, it cannot be executed on CM33. | |||
The command below gives an example how to use it with serial fallback: | |||
:<syntaxhighlight lang="bash"> | |||
STM32_Programmer_CLI -c port=usb1 -p -w MP2ROMtracesdump_USART2_PA4.stm32 0x01 -s | |||
</syntaxhighlight> | |||
When booting on this binary, the traces are directly output on the UART pin in plain text. | |||
<noinclude> | <noinclude> | ||
[[Category:ROM code|0]] | [[Category:ROM code|0]] | ||
{{PublicationRequestId | 24127 | 2022-07-27| 17361 2020-09-11 Philip Sage}} | {{PublicationRequestId | 24127 | 2022-07-27| 17361 2020-09-11 Philip Sage}} | ||
</noinclude> | </noinclude> |
Latest revision as of 18:08, 7 November 2024
1. ROM trace analysis procedure[edit | edit source]
When the device is in OPEN state, it is possible to access to the trace buffer located in a non-secure area of an embedded SRAM, and analyze ROM code execution traces.
1.1. On STM32MP1 Series[edit | edit source]
To analyze ROM code traces:
- Copy the rom_trace_analyzer_py script from chapter #Scripts to analyze traces and paste it into a script file, in this example rom_trace_analyzer.py.
- Connect the debugger and use it to download trace buffer address range in binary format into a file (for example traces.bin). See chapter #Procedure to dump traces.
- Launch the following command:
python3 rom_trace_analyzer.py traces.bin
Note that traces are not preserved by firmware running after ROM code. Retrieving traces should typically be done when the boot process stops in ROM code itself, when, for example, boot fails due to a wrong configuration. Otherwise, you should put a breakpoint at the beginning of the firmware.
1.1.1. Procedure to dump traces[edit | edit source]
1.1.1.1. On STM32MP13x lines
[edit | edit source]
- Traces are stored in SRAM1 at address ranges [0x30001638-0x30002638]
'init;halt;dump_image traces.bin 0x30001638 4096;resume;shutdown'
openocd -f board/stm32mp13x_dk.cfg -c
1.1.1.2. On STM32MP15x lines
[edit | edit source]
- Traces are stored in SYSRAM at address ranges [0x2ffc1c00-0x2ffC2400]
- The command below gives an example of how to perform this with the "openocd" tool on a DK2 board.
'init;cortex_a smp off;halt;dump_image traces.bin 0x2ffc1c00 2048;resume;shutdown'
openocd -f board/stm32mp15x_dk2.cfg -c
1.1.2. Scripts to analyze traces[edit | edit source]
1.1.2.1. On STM32MP13x lines
[edit | edit source]
#
# rom_trace_analyzer_py : script to analyze STM32MP13 ROM code traces
#
import os
import sys
import struct
import argparse
levels = (
'INFO',
'WARN',
'ERR ',
'DEBUG',
)
def level2str(level):
try:
return levels[level]
except IndexError:
return "UNKNOWN"
tags = {
0x90000001 : "NAND_DetectionFailed",
0x90000002 : "NAND_InitFailed",
0x90000003 : "NAND_NotInitialized",
0x90000004 : "NAND_NotOnfiOrNotDetected",
0x90000005 : "NAND_TransferFailed",
0x90000006 : "NAND_ImageTooBig",
0x90000007 : "NAND_OnlyBadBlocks",
0x90000008 : "NAND_UncorrectableEccErr",
0x90000009 : "NAND_NotGPTFound",
0x9000000A : "NAND_TryingSECBL1",
0x9000000B : "NAND_TryingSECBL2",
0x9000000C : "NAND_SecblFirstValidBlock",
0x9000000E : "NAND_EccErrorsDetected",
0x9000000F : "NAND_EccErrorCorrected",
0x90000010 : "NAND_EccErrorNotInDataArea",
0x90000011 : "NAND_SecblsFoundInGPT",
0x90000012 : "NAND_ReadColAddr",
0x90000013 : "NAND_ResetFailed",
0x90000014 : "NAND_NoOnfiParameterPage",
0x90000015 : "NAND_GetParamFromOtp",
0x90000016 : "NAND_EccBitsNbForcedByOtp",
0x90000017 : "NAND_NoValidBlockFound",
0x90000018 : "NAND_GptFound",
0x90000019 : "NAND_DirectFsblFound",
0x9000001A : "NAND_TryingDirectFSBL",
0x9000001B : "NAND_WrongFsblOffsetsInGPT",
0x9000001C : "NAND_EndOfNandReached",
0x90000101 : "NANDCORE_DetectionFailed",
0x90000102 : "NANDCORE_InitFailed",
0x90000103 : "NANDCORE_NotInitialized",
0x90000104 : "NANDCORE_NotOnfiOrNotDetected",
0x90000105 : "NANDCORE_TransferFailed",
0x90000106 : "NANDCORE_ImageTooBig",
0x90000107 : "NANDCORE_OnlyBadBlocks",
0x90000108 : "NANDCORE_UncorrectableEccErr",
0x90000109 : "NANDCORE_NotGPTFound",
0x9000010A : "NANDCORE_TryingSECBL1",
0x9000010B : "NANDCORE_TryingSECBL2",
0x9000010E : "NANDCORE_EccErrorsDetected",
0x9000010F : "NANDCORE_EccErrorCorrected",
0x90000110 : "NANDCORE_EccErrorNotInDataArea",
0x9000010C : "NANDCORE_SecblFirstValidBlock",
0x90000111 : "NANDCORE_SecblsFoundInGPT",
0x90000112 : "NANDCORE_ReadColAddr",
0x90000113 : "NANDCORE_ResetFailed",
0x90000114 : "NANDCORE_NoOnfiParameterPage",
0x90000115 : "NANDCORE_GetParamFromOtp",
0x90000116 : "NANDCORE_EccBitsNbForcedByOtp",
0x90000117 : "NANDCORE_NoValidBlockFound",
0x90000118 : "NANDCORE_GptFound",
0x90000119 : "NANDCORE_DirectFsblFound",
0x9000011A : "NANDCORE_TryingDirectFSBL",
0x9000011B : "NANDCORE_WrongFsblOffsetsInGPT",
0x9000011C : "NANDCORE_EndOfNandReached",
0x9000020E : "FMC_NAND_LL_EccErrorsDetected",
0x9000020F : "FMC_NAND_LL_EccErrorCorrected",
0x90000210 : "FMC_NAND_LL_EccErrorNotInDataArea",
0x90000251 : "QSPI_NAND_LL_NoEccErrorOrCorrected",
0x90000252 : "QSPI_NAND_LL_UncorrectableEccErr",
0x40000001 : "MMC_AcknowledgeErr",
0x40000002 : "MMC_AcknowledgeTimeout",
0x40000003 : "MMC_CardNotDetected",
0x40000004 : "MMC_DataCrcErr",
0x40000005 : "MMC_DataTimeout",
0x40000007 : "MMC_DmaTransferErr",
0x40000008 : "MMC_CmdTimeoutErr",
0x40000009 : "MMC_CmdCrcErr",
0x4000000A : "MMC_AddAlignErr",
0x4000000B : "MMC_NotEnoughBootDataRxErr",
0x4000000C : "MMC_ImageCopiedIsNotComplete",
0x4000000D : "MMC_ImageCopiedHeaderSizeZero",
0x4000000E : "MMC_AttemptBootDespiteErrors",
0x4000000F : "MMC_GotDataEndFlagWithNoErrors",
0x40000010 : "MMC_NbBytesCopiedInRam",
0x40000011 : "MMC_ImageCopiedHeaderNotFound",
0x40000012 : "MMC_VDDSD1RDYNotAsserted",
0x40000013 : "MMC_VDDSD2RDYNotAsserted",
0xCC000001 : "HASHDRV_Timeout",
0xCC000002 : "HASHDRV_BadState",
0xCC000003 : "HASHDRV_AccumulateSizeNotMultOf4",
0xCC000040 : "HASHDRV_TestPass",
0xCC000041 : "HASHDRV_TestAccumulateError",
0xCC000042 : "HASHDRV_TestComputeError",
0xCC000043 : "HASHDRV_TestFinishError",
0xCC000044 : "HASHDRV_TestCompareError",
0x80000001 : "QSPI_TryingSECBL1",
0x80000002 : "QSPI_TryingSECBL2",
0x80000003 : "QSPI_TryingSingleMode",
0x80000004 : "QSPI_TryingDualMode",
0x80000005 : "QSPI_FoundGpt",
0x80000006 : "QSPI_FoundMagicAtDefaultLocation",
0x80000007 : "QSPI_UseOffsets",
0x80000008 : "QSPI_WrongImageLen",
0x80000009 : "QSPI_Timeout",
0x0000000A : "BOOTCORE_HwResetPOR",
0x0000000B : "BOOTCORE_HwResetBOR",
0x0000000C : "BOOTCORE_HwResetPadNrst",
0x0000000D : "BOOTCORE_HwResetHcssRst",
0x0000000E : "BOOTCORE_HwResetVCore",
0x0000000F : "BOOTCORE_HwResetMpSysRst",
0x00000010 : "BOOTCORE_HwResetIwdg1",
0x00000011 : "BOOTCORE_HwResetIwdg2",
0x00000012 : "BOOTCORE_HwResetStdby",
0x00000013 : "BOOTCORE_HwResetMpup0Rst",
0x0000001B : "BOOTCORE_LogicalResetRmaReq",
0x0000001C : "BOOTCORE_LogicalResetLocalMpuCore0Reset",
0x0000001D : "BOOTCORE_LogicalResetStdbyExit",
0x0000001E : "BOOTCORE_LogicalResetSystem",
0x00000025 : "BOOTCORE_ChipModeSecOpen",
0x00000026 : "BOOTCORE_ChipModeSecOpenEngiBoot",
0x00000027 : "BOOTCORE_ChipModeSecClosed",
0x00000028 : "BOOTCORE_ChipModeSecClosedRmaOngoing",
0x0000002F : "BOOTCORE_OtpModeOtpSecured",
0x00000035 : "BOOTCORE_BootActionLocalMpuCore0ResetProcess",
0x00000038 : "BOOTCORE_BootActionRmaReqProcess",
0x00000039 : "BOOTCORE_BootActionRmaProcess",
0x0000003A : "BOOTCORE_BootActionSecureBootProcess",
0x0000003B : "BOOTCORE_BootActionWakeupStdby",
0x0000003D : "BOOTCORE_BootActionEngiBoot",
0x00000043 : "BOOTCORE_DebugCfgExitValue",
0x00000044 : "BOOTCORE_BsecJtagInValue",
0x00000045 : "BOOTCORE_BootCfgOtpWordValue",
0x00000046 : "BOOTCORE_BootCfgAfmuxOtpWord1Value",
0x00000047 : "BOOTCORE_BootCfgAfmuxOtpWord2Value",
0x00000048 : "BOOTCORE_BootCfgAfmuxOtpWord3Value",
0x00000049 : "BOOTCORE_BootCfgHseValue",
0x00000051 : "BOOTCORE_NoUsbDpPullupOtpBitValue",
0x00000052 : "BOOTCORE_NoCpuPllOtpBitValue",
0x00000057 : "BOOTCORE_BootCfgFsblDecryptPrio",
0x00000061 : "BOOTCORE_ReOpenDebugValue",
0x00000062 : "BOOTCORE_ReOpenSecNSecDebugValue",
0x00000063 : "BOOTCORE_ReOpenSecOnlyDebugValue",
0x00000064 : "BOOTCORE_ReOpenDbgSwEnableAndHdp",
0x00000065 : "BOOTCORE_DebugCloseAllButDbgenAndDeviceen",
0x0000006E : "BOOTCORE_RmaRequestValue",
0x0000006F : "BOOTCORE_RmaStatusValue",
0x00000074 : "BOOTCORE_NoDataCacheBitValue",
0x00000075 : "BOOTCORE_WakeupFromCSTANDBY",
0x00000076 : "BOOTCORE_WakeupFromSTANDBY",
0x00000079 : "BOOTCORE_WkUpActiveFlags",
0x00000091 : "BOOTCORE_MpuCpuPowerStateHasBeenInCStandby",
0x00000092 : "BOOTCORE_SystemPowerStateHasBeenInStandby",
0x00000093 : "BOOTCORE_BootModeNOBOOTENGIBOOT",
0x00000094 : "BOOTCORE_BootModeNOBOOTNOTENGIBOOTREQBYBOOTPINS",
0x00000095 : "BOOTCORE_BootModeNOBOOT",
0x00000096 : "BOOTCORE_BootModeSECUREBOOT",
0x00000097 : "BOOTCORE_EndBootROMGPIONotification",
0x00000098 : "BOOTCORE_NOBOOTLoop",
0x000000BF : "BOOTCORE_BootTimerSrcSoftCnt",
0x000000C0 : "BOOTCORE_BootTimerSrcGenTimer",
0x000000CF : "BOOTCORE_OtpBootSrcDisableMaskVal",
0x000000D0 : "BOOTCORE_OtpBootUartInstanceDisableMaskVal",
0x000000D1 : "BOOTCORE_EnabledSrcMaskVal",
0x000000E8 : "BOOTCORE_SafMemPwrUp",
0x000000E9 : "BOOTCORE_SafMemPwrDown",
0x000000EC : "BOOTCORE_EndBootGPIOEngiTesterStarted",
0x000000ED : "BOOTCORE_BootFAILED",
0x00000100 : "BOOTCORE_ARM_EXCEPTION_UNDEF",
0x00000101 : "BOOTCORE_ARM_EXCEPTION_PREFETCH_ABORT",
0x00000102 : "BOOTCORE_ARM_EXCEPTION_DATA_ABORT",
0x00000103 : "BOOTCORE_ARM_EXCEPTION_HYP",
0x00000104 : "BOOTCORE_ARM_EXCEPTION_IRQ",
0x00000105 : "BOOTCORE_ARM_EXCEPTION_FIQ",
0x00000106 : "BOOTCORE_ARM_EXCEPTION_SVC",
0x00000107 : "BOOTCORE_ARM_EXCEPTION_SMC_FROM_SECURE_WORLD_ERROR",
0x00000120 : "BOOTCORE_UartTraceEntryOnHwInstance",
0x00000130 : "BOOTCORE_Pll12StartBegin",
0x00000131 : "BOOTCORE_Pll12StartEnd",
0x00000132 : "BOOTCORE_Pll12StartDisabledByOtpBit",
0x00000133 : "BOOTCORE_Pll12StartNotDisabledByOtpBit",
0x00000134 : "BOOTCORE_Pll1Started",
0x00000135 : "BOOTCORE_Pll1Locked",
0x00000136 : "BOOTCORE_Pll1LockTimeout",
0x00000137 : "BOOTCORE_CkMpuSsSwitchedOnPll1",
0x00000138 : "BOOTCORE_Pll2Started",
0x00000139 : "BOOTCORE_Pll2Locked",
0x0000013A : "BOOTCORE_Pll2LockTimeout",
0x0000013B : "BOOTCORE_CkAxiSsSwitchedOnPll2",
0x0000013C : "BOOTCORE_Pll12StartReqStatusPllNotStarted",
0x0000013D : "BOOTCORE_Pll12StartReqStatusPllStarted",
0x0000013E : "BOOTCORE_Pll12StartDisabledByCompilationDirective",
0x00000140 : "BOOTCORE_BootSrcPeriphLoadLoopDisabled",
0x0000014E : "BOOTCORE_Pll4Started",
0x0000014F : "BOOTCORE_Pll4Locked",
0x00000150 : "BOOTCORE_Pll4LockTimeout",
0x00000151 : "BOOTCORE_HseNotReady",
0x00000152 : "BOOTCORE_StartupWaitTime",
0x00000153 : "BOOTCORE_PllUsbLocked",
0x00000154 : "BOOTCORE_PllUsbLockTimeout",
0x00000155 : "BOOTCORE_BootRomVer",
0x00000156 : "BOOTCORE_BootRomChipVer",
0x00000157 : "BOOTCORE_BootRomCutVer",
0x00000158 : "BOOTCORE_BootRomForRtlVer",
0x00000159 : "BOOTCORE_BootRomTargetPlatform",
0x0000015A : "BOOTCORE_BootRomMaskVer",
0x0000015D : "BOOTCORE_McuSecPerimeterRccTzenValue",
0x00000160 : "BOOTCORE_BootModeNOBOOTWithSignalingFromNsec",
0x00000161 : "BOOTCORE_NoBootTogglePa13Nsec",
0x000001C0 : "BOOTCORE_OtpEcdsaKeyCounterMonotonicVal",
0x000001C1 : "BOOTCORE_EcdsaKeyCounterVal",
0x000001C2 : "BOOTCORE_EcdsaKeyCounterNewProgVal",
0x000001D0 : "BOOTCORE_ImageVersionCounterNewProgVal",
0x000001D1 : "BOOTCORE_ImageVersionTooBig",
0x00000200 : "BOOTCORE_ConfigureSRAMsForBlockingFailure",
0x00000201 : "BOOTCORE_ConfigureSRAMsForDownload",
0x00000202 : "BOOTCORE_ConfigureSRAMsSecure",
0x00000203 : "BOOTCORE_ClearDownloadAreas",
0x00001000 : "BOOTCORE_BootPinsFirstSelNone",
0x00001001 : "BOOTCORE_BootPinsFirstSelSerial",
0x00001002 : "BOOTCORE_BootPinsFirstSelQspiNor",
0x00001003 : "BOOTCORE_BootPinsFirstSelSd",
0x00001004 : "BOOTCORE_BootPinsFirstSelEmmc",
0x00001005 : "BOOTCORE_BootPinsFirstSelFmc",
0x00001006 : "BOOTCORE_BootPinsFirstSelEngiBoot",
0x00001007 : "BOOTCORE_BootPinsFirstSelUnknown",
0x00001008 : "BOOTCORE_BootPinsOverridesOtp",
0x00001017 : "BOOTCORE_BootPinsFirstSelQspiNand",
0x00001009 : "BOOTCORE_OtpPrimarySrcForceFmc",
0x0000100A : "BOOTCORE_OtpPrimarySrcForceQspiNor",
0x0000100B : "BOOTCORE_OtpPrimarySrcForceEmmc",
0x0000100C : "BOOTCORE_OtpPrimarySrcForceSd",
0x0000100D : "BOOTCORE_OtpPrimarySrcForceQspiNand",
0x0000100E : "BOOTCORE_OtpPrimarySrcForceNothing",
0x0000100F : "BOOTCORE_OtpPrimarySrcForceUnknown",
0x00001010 : "BOOTCORE_OtpSecondarySrcForceFmc",
0x00001011 : "BOOTCORE_OtpSecondarySrcForceQspiNand",
0x00001012 : "BOOTCORE_OtpSecondarySrcForceQspiNor",
0x00001013 : "BOOTCORE_OtpSecondarySrcForceEmmc",
0x00001014 : "BOOTCORE_OtpSecondarySrcForceSd",
0x00001015 : "BOOTCORE_OtpSecondarySrcForceNothing",
0x00001016 : "BOOTCORE_OtpSecondarySrcForceUnknown",
0x00001020 : "BOOTCORE_TampForceSerialBoot",
0x00001030 : "BOOTCORE_BootPinsValueRead",
0x00002001 : "BOOTCORE_AuthWrongImageVersion",
0x00002002 : "BOOTCORE_AuthHashAreaStartAdd",
0x00002003 : "BOOTCORE_AuthImageLength",
0x00002004 : "BOOTCORE_AuthImageSizeToHash",
0x00002005 : "BOOTCORE_AuthImageEntryPoint",
0x00002006 : "BOOTCORE_AuthEccAlgoP256NIST",
0x00002007 : "BOOTCORE_AuthEccAlgoBrainPool256",
0x00002008 : "BOOTCORE_AuthEccAlgoUnknown",
0x00002009 : "BOOTCORE_AuthSignCheckValue",
0x0000200A : "BOOTCORE_AuthEntryPointOutOfRange",
0x0000200B : "BOOTCORE_AuthPubKHashFailStart",
0x0000200C : "BOOTCORE_AuthPubKHashFailFinish",
0x0000200D : "BOOTCORE_AuthPubKHashCompareError",
0x0000200E : "BOOTCORE_AuthPubKHashCompareOk",
0x0000200F : "BOOTCORE_AuthImageHashFailStart",
0x00002010 : "BOOTCORE_AuthImageHashFailFinish",
0x00002011 : "BOOTCORE_AuthImageSignatureFromHeaderECCDecryptStarted",
0x00002012 : "BOOTCORE_AuthImageSignatureKo",
0x00002013 : "BOOTCORE_AuthImageSignatureOk",
0x00002014 : "BOOTCORE_AuthDecisionIsJumpToImage",
0x00002015 : "BOOTCORE_AuthWrongImageHeaderVersion",
0x00002016 : "BOOTCORE_AuthWrongMagicNumber",
0x00002017 : "BOOTCORE_AuthImageLengthTooSmall",
0x00002018 : "BOOTCORE_AuthImageLengthTooBig",
0x00002019 : "BOOTCORE_AuthWrongImageChecksum",
0x0000201A : "BOOTCORE_AuthIsAuthenticationMandatory",
0x0000201B : "BOOTCORE_AuthIsAuthenticationSkipRequestedAndAllowed",
0x00002020 : "BOOTCORE_AuthImageEncrypted",
0x00002021 : "BOOTCORE_AuthImageNotEncrypted",
0x00002022 : "BOOTCORE_AuthImageDecryptionSucceed",
0x00002023 : "BOOTCORE_AuthImageDecryptionFailed",
0x00002024 : "BOOTCORE_AuthCryptoDisabledError",
0x00002025 : "BOOTCORE_AuthenticationExtensionHeaderMissing",
0x00002026 : "BOOTCORE_AuthMemoryVerifError",
0x00002040 : "BOOTCORE_AuthAuthenticationHeaderNotFound",
0x00002041 : "BOOTCORE_AuthPubKHashTableNotEqualToRef",
0x00002042 : "BOOTCORE_AuthPubKHashTableCheckSpecialSspStage3",
0x00002043 : "BOOTCORE_AuthInvalidKeyIndex",
0x00002044 : "BOOTCORE_AuthPublicKeyIsRevoked",
0x00002045 : "BOOTCORE_AuthPublicKeyNotRevoked",
0x00002046 : "BOOTCORE_AuthPublicKeyHashVerificationError",
0x00002047 : "BOOTCORE_AuthPubKeyVerifFailed",
0x00002048 : "BOOTCORE_AuthPubKeyVerifOk",
0x00002060 : "BOOTCORE_AuthFuseEcdsaKeyCounterRequired",
0x00002061 : "BOOTCORE_AuthFuseEcdsaKeyCounterNotRequired",
0x00002062 : "BOOTCORE_VerifyErrorWhileProgrammingEcdsaKeyCounter",
0x00002063 : "BOOTCORE_AuthNewEcdsaKeyCounterProgSuccess",
0x00002064 : "BOOTCORE_AuthMaxEcdsaKeyCounterReachedRevokNotPossible",
0x00002080 : "BOOTCORE_DecryptOptionHeaderNotFound",
0x00002081 : "BOOTCORE_DecryptWrongKeySize",
0x00002082 : "BOOTCORE_DecryptDerivKeyCalcError",
0x00002083 : "BOOTCORE_DecryptImageDecryptError",
0x00002084 : "BOOTCORE_DecryptHashIntegrityError",
0x00002085 : "BOOTCORE_DecryptOtpSecretKeyReadError",
0x00002086 : "BOOTCORE_DecryptUsingCrypDriver",
0x00002087 : "BOOTCORE_DecryptUsingSaesDriver",
0x00002088 : "BOOTCORE_DecryptOtpAesDriverError",
0x00002089 : "BOOTCORE_DerivKey128UsingSaesDriver",
0x0000208A : "BOOTCORE_DerivKey256UsingSaesDriver",
0x0000208B : "BOOTCORE_DerivKey128UsingCrypDriver",
0x0000208C : "BOOTCORE_DerivKey256UsingCrypDriver",
0x00002400 : "BOOTCORE_HseFrequencyDetected",
0x00002401 : "BOOTCORE_HseDigBypassDetected",
0x00002402 : "BOOTCORE_HseAnalogBypassDetected",
0x00002403 : "BOOTCORE_HseNoBypass",
0x00002404 : "BOOTCORE_HseFreqDetectDisabled",
0x00002405 : "BOOTCORE_HseBypassDetectDisabled",
0x00002406 : "BOOTCORE_eMmcUseSingle128KBytesBootPartition",
0x00002410 : "BOOTCORE_WkAroundEXTIResetValues",
0x00002503 : "BOOTCORE_FingerPrintOverflow",
0x00002504 : "BOOTCORE_FingerPrintValue",
0x00002505 : "BOOTCORE_FingerPrintCoef",
0x50000000 : "USB_Init",
0x50000001 : "USB_Loop",
0x50000002 : "USB_Selection",
0x50000003 : "USB_CallingAuthAndGo",
0x50000004 : "USB_DFU_DownloadComplete",
0x50000005 : "USB_DFU_GetStatus",
0x50000006 : "USB_DFU_GetStatus_GoTo_Idle",
0x50000007 : "USB_DFU_END_OF_DNLOAD",
0x50000008 : "USB_DFU_DNLOAD",
0x50000009 : "USB_DFU_UPLOAD",
0x5000000A : "USB_DFU_GETSTATUS",
0x5000000B : "USB_DFU_CLRSTATUS",
0x5000000C : "USB_DFU_GETSTATE",
0x5000000D : "USB_DFU_ABORT",
0x5000000E : "USB_DFU_DETACH",
0x5000000F : "USB_DFU_LEAVE",
0x50000010 : "USB_DFU_DataOut",
0x50000011 : "USB_DFU_GetStatusMedia",
0x50000012 : "USB_DFU_SRAMWrite",
0x50000013 : "USB_DFU_SRAMWrite_CRC",
0x50000014 : "USB_DFU_SRAMWrite_imgL",
0x50000015 : "USB_DFU_Init",
0x50000016 : "USB_DFU_SET_INTERFACE",
0x50000017 : "USB_DFU_SET_INTERFACE_ERR",
0x50000018 : "USB_DFU_Get_INTERFACE",
0x50000019 : "USB_DFU_LEAVE_EP0_TxReady",
0x50000020 : "USB_ClockTree_Failed",
0x50000021 : "USB_WrongDataTransfer",
0x50000022 : "USB_DataTransfered",
0x50000030 : "USB_DFU_DetachComplete",
0x60000001 : "UART_Selection",
0x60000002 : "UART_PeripheralSerialBootLoopStart",
0x60000003 : "UART_PacketNumber",
0x60000004 : "UART_PacketSize",
0x60000005 : "UART_PacketXor",
0x60000006 : "UART_ImageLength",
0x60000007 : "UART_Cursor",
0x60000008 : "UART_NACK",
0x60000009 : "UART_Abort",
0x6000000A : "UART_ActivityDetected",
0x6000000B : "UART_ActivityDetecting",
0x6000000C : "UART_ReceivedByte",
0x6000000D : "UART_DownloadFinished",
0x6000000E : "UART_Start",
0x30000001 : "SD_InitFailed",
0x30000002 : "SD_TransferFailed",
0x30000003 : "SD_CardDetected",
0x30000004 : "SD_NoCardResponse",
0x30000005 : "SD_TrySecBL1",
0x30000006 : "SD_FailedSecBL1TrySecBL2",
0x30000007 : "SD_InitDetailedErrorDesc",
0x30000008 : "SD_ImageTooBig",
0x30000009 : "SD_ImageLengthZero",
0x3000000A : "SD_StdCapacityCardV11",
0x3000000B : "SD_StdCapacityCardV20",
0x3000000C : "SD_HighCapacityCardSDHCOrSDXC",
0x3000000D : "SD_UnknownCapacityCard",
0x3000000E : "SD_OverallRetryCnt",
0x3000000F : "SD_ImageHeaderNotFound",
0x30000010 : "SD_NotGPTFound",
0x30000011 : "SD_FsblsFound",
0x30000012 : "SD_GPTFound",
0x30000013 : "SD_NotFSBLFound",
0x30000014 : "SD_RamCopyAddr",
0x30000015 : "SD_BufLen",
0x30000016 : "SD_ReadAddrInCard",
0x30000017 : "SD_NbFullBlocks",
0x30000018 : "SD_BytesRemainingInLastBlock",
0x30000019 : "SD_InFullBlocksRead",
0x3000001A : "SD_InLastIncompleteBlockRead",
0x30000020 : "SD_VDDSD1RDYNotAsserted",
0x30000021 : "SD_VDDSD2RDYNotAsserted",
0xC4000002 : "DWNLDMGR_WrongMagicNumber",
0xC4000003 : "DWNLDMGR_ImageLengthTooSmall",
0xC4000004 : "DWNLDMGR_ImageLengthTooBig",
0xC4000005 : "DWNLDMGR_EntryPointOutOfRange",
0xC4000006 : "DWNLDMGR_WrongImageChecksum",
0xC4000007 : "DWNLDMGR_WrongHeaderVersion",
0xC4000008 : "DWNLDMGR_UnknownExtensionHeader",
0xC4000009 : "DWNLDMGR_FoundFsblDecryptionHeader",
0xC400000A : "DWNLDMGR_FoundPkhAuthenticationHeader",
0xC400000B : "DWNLDMGR_WrongExtensionHeaderLength",
0xC400000C : "DWNLDMGR_WrongCipherKeySize",
0xC400000D : "DWNLDMGR_ExtensionFlagsMismatch",
0xC400000E : "DWNLDMGR_WrongNumberOfPublicKeyHash",
0xC400000F : "DWNLDMGR_WrongPublicKeyIndex",
0xC4000010 : "DWNLDMGR_FoundPaddingHeader",
}
def tag2str(tag):
try:
return tags[tag]
except KeyError:
return None
class Trace(object):
def __init__(self, timestamp, level, tag, data ):
self.timestamp = timestamp
self.level = level
self.tag = tag
self.data = data
def dump(self):
level_str = level2str(self.level)
tag_str = tag2str(self.tag)
if tag_str:
print( "< @ %08d | [%s] - %s" % (self.timestamp, level_str, tag_str), end='' )
if len(self.data) > 0:
print (" (", end='')
for d in self.data[:-1]:
print (" 0x%08X," % (d), end='')
print (" 0x%08X )" % (self.data[-1]), end='')
print (" >")
class TraceAnalyzer(object):
START_WORD = 0xFFDDBB00
def __init__(self):
pass
def _next_word_(self):
word = self._file.read(4)
if len(word):
return struct.unpack('<L',word)[0]
else:
raise StopIteration('END OF FILE')
def _look_for_start_word_(self):
while True:
if self._next_word_() == self.START_WORD:
return True
def parse(self,file_):
self._file = file_
return iter(self)
def __iter__(self):
return self
def __next__(self):
self._look_for_start_word_()
size = self._next_word_()
timestamp = self._next_word_()
size -= 4
level = self._next_word_()
size -= 4
tag = self._next_word_()
size -= 4
data = []
while size > 0:
data.append(self._next_word_())
size -= 4
return Trace(timestamp, level, tag, data)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='STM32MPU15 Bootrom trace decoder')
parser.add_argument("trace_file",
action="store",
type=argparse.FileType('rb'),
help="Name of binary trace file",
metavar="FILE.BIN")
args = parser.parse_args()
traces_analyzer = TraceAnalyzer()
traces = traces_analyzer.parse(args.trace_file)
for trace in traces:
trace.dump()
1.1.2.2. On STM32MP15x lines
[edit | edit source]
#
# rom_trace_analyzer_py : script to analyze STM32MP15 ROM code traces
#
import os
import sys
import struct
import argparse
levels = (
'INFO',
'WARN',
'ERR ',
'DEBUG',
)
def level2str(level):
try:
return levels[level]
except IndexError:
return "UNKNOWN"
tags = {
0x90000001 : "NAND_DetectionFailed",
0x90000002 : "NAND_InitFailed",
0x90000003 : "NAND_NotInitialized",
0x90000004 : "NAND_NotOnfiOrNotDetected",
0x90000005 : "NAND_TransferFailed",
0x90000006 : "NAND_ImageTooBig",
0x90000007 : "NAND_OnlyBadBlocks",
0x90000008 : "NAND_UncorrectableEccErr",
0x90000009 : "NAND_NotGPTFound",
0x9000000A : "NAND_TryingSECBL1",
0x9000000B : "NAND_TryingSECBL2",
0x9000000C : "NAND_SecblFirstValidBlock",
0x9000000E : "NAND_EccErrorsDetected",
0x9000000F : "NAND_EccErrorCorrected",
0x90000010 : "NAND_EccErrorNotInDataArea",
0x90000011 : "NAND_SecblsFoundInGPT",
0x90000012 : "NAND_ReadColAddr",
0x90000013 : "NAND_ResetFailed",
0x90000014 : "NAND_NoOnfiParameterPage",
0x90000015 : "NAND_GetParamFromOtp",
0x90000016 : "NAND_EccBitsNbForcedByOtp",
0x90000017 : "NAND_NoValidBlockFound",
0x90000018 : "NAND_GptFound",
0x90000019 : "NAND_DirectFsblFound",
0x9000001A : "NAND_TryingDirectFSBL",
0x9000001B : "NAND_WrongFsblOffsetsInGPT",
0x9000001C : "NAND_EndOfNandReached",
0x90000101 : "NANDCORE_DetectionFailed",
0x90000102 : "NANDCORE_InitFailed",
0x90000103 : "NANDCORE_NotInitialized",
0x90000104 : "NANDCORE_NotOnfiOrNotDetected",
0x90000105 : "NANDCORE_TransferFailed",
0x90000106 : "NANDCORE_ImageTooBig",
0x90000107 : "NANDCORE_OnlyBadBlocks",
0x90000108 : "NANDCORE_UncorrectableEccErr",
0x90000109 : "NANDCORE_NotGPTFound",
0x9000010A : "NANDCORE_TryingSECBL1",
0x9000010B : "NANDCORE_TryingSECBL2",
0x9000010E : "NANDCORE_EccErrorsDetected",
0x9000010F : "NANDCORE_EccErrorCorrected",
0x90000110 : "NANDCORE_EccErrorNotInDataArea",
0x9000010C : "NANDCORE_SecblFirstValidBlock",
0x90000111 : "NANDCORE_SecblsFoundInGPT",
0x90000112 : "NANDCORE_ReadColAddr",
0x90000113 : "NANDCORE_ResetFailed",
0x90000114 : "NANDCORE_NoOnfiParameterPage",
0x90000115 : "NANDCORE_GetParamFromOtp",
0x90000116 : "NANDCORE_EccBitsNbForcedByOtp",
0x90000117 : "NANDCORE_NoValidBlockFound",
0x90000118 : "NANDCORE_GptFound",
0x90000119 : "NANDCORE_DirectFsblFound",
0x9000011A : "NANDCORE_TryingDirectFSBL",
0x9000011B : "NANDCORE_WrongFsblOffsetsInGPT",
0x9000011C : "NANDCORE_EndOfNandReached",
0x9000020E : "FMC_NAND_LL_EccErrorsDetected",
0x9000020F : "FMC_NAND_LL_EccErrorCorrected",
0x90000210 : "FMC_NAND_LL_EccErrorNotInDataArea",
0x90000251 : "QSPI_NAND_LL_NoEccErrorNoEccErrorOrCorrected",
0x90000252 : "QSPI_NAND_LL_UncorrectableEccErr",
0x40000001 : "MMC_AcknowledgeErr",
0x40000002 : "MMC_AcknowledgeTimeout",
0x40000003 : "MMC_CardNotDetected",
0x40000004 : "MMC_DataCrcErr",
0x40000005 : "MMC_DataTimeout",
0x40000007 : "MMC_DmaTransferErr",
0x40000008 : "MMC_CmdTimeoutErr",
0x40000009 : "MMC_CmdCrcErr",
0x4000000A : "MMC_AddAlignErr",
0x4000000B : "MMC_NotEnoughBootDataRxErr",
0x4000000C : "MMC_ImageCopiedIsNotComplete",
0x4000000D : "MMC_ImageCopiedHeaderSizeZero",
0x4000000E : "MMC_AttemptBootDespiteErrors",
0x4000000F : "MMC_GotDataEndFlagWithNoErrors",
0x40000010 : "MMC_NbBytesCopiedInSysram",
0x40000011 : "MMC_ImageCopiedHeaderNotFound",
0x80000001 : "QSPI_TryingSECBL1",
0x80000002 : "QSPI_TryingSECBL2",
0x80000003 : "QSPI_TryingSingleMode",
0x80000004 : "QSPI_TryingDualMode",
0x80000005 : "QSPI_FoundGpt",
0x80000006 : "QSPI_FoundMagicAtDefaultLocation",
0x80000007 : "QSPI_UseOffsets",
0x80000008 : "QSPI_WrongImageLen",
0x80000009 : "QSPI_Timeout",
0x0000000A : "BOOTCORE_HwResetPOR",
0x0000000B : "BOOTCORE_HwResetBOR",
0x0000000C : "BOOTCORE_HwResetPadNrst",
0x0000000D : "BOOTCORE_HwResetHcssRst",
0x0000000E : "BOOTCORE_HwResetVCore",
0x0000000F : "BOOTCORE_HwResetMpSysRst",
0x00000010 : "BOOTCORE_HwResetMcSysRst",
0x00000011 : "BOOTCORE_HwResetIwdg1",
0x00000012 : "BOOTCORE_HwResetIwdg2",
0x00000013 : "BOOTCORE_HwResetWwdg1",
0x00000014 : "BOOTCORE_HwResetStdby",
0x00000015 : "BOOTCORE_HwResetCStdby",
0x00000016 : "BOOTCORE_HwResetMpu0Rst",
0x00000017 : "BOOTCORE_HwResetMpu1Rst",
0x00000018 : "BOOTCORE_HwResetInvalid",
0x0000001A : "BOOTCORE_LogicalResetLocalMpuCore0Reset",
0x0000001B : "BOOTCORE_LogicalResetRmaOrRmaRelockReq",
0x0000001C : "BOOTCORE_LogicalResetCStdbyExit",
0x0000001D : "BOOTCORE_LogicalResetStdbyExit",
0x0000001E : "BOOTCORE_LogicalResetSystem",
0x0000001F : "BOOTCORE_LogicalResetInvalid",
0x00000025 : "BOOTCORE_ChipModeSecOpen",
0x00000026 : "BOOTCORE_ChipModeSecOpenEngiBoot",
0x00000027 : "BOOTCORE_ChipModeSecFinalNormal",
0x00000028 : "BOOTCORE_ChipModeSecFinalRmaOngoing",
0x00000029 : "BOOTCORE_ChipModeSecFinalRmaRelocked",
0x0000002B : "BOOTCORE_ChipModeInvalid",
0x00000031 : "BOOTCORE_BootActionLocalMpuCore0ResetProcess",
0x00000037 : "BOOTCORE_BootActionRmaReqProcess",
0x00000038 : "BOOTCORE_BootActionRmaProcess",
0x00000039 : "BOOTCORE_BootActionRmaRelockReqProcess",
0x0000003A : "BOOTCORE_BootActionColdBootProcess",
0x0000003B : "BOOTCORE_BootActionWakeupCStdby",
0x0000003C : "BOOTCORE_BootActionWakeupStdby",
0x0000003D : "BOOTCORE_BootActionInvalid",
0x0000003E : "BOOTCORE_BootActionEngiBoot",
0x00000045 : "BOOTCORE_BootCfgOtpWordValue",
0x00000046 : "BOOTCORE_BootCfgAfmuxOtpWord1Value",
0x00000047 : "BOOTCORE_BootCfgAfmuxOtpWord2Value",
0x00000048 : "BOOTCORE_BootCfgAfmuxOtpWord3Value",
0x00000049 : "BOOTCORE_BootCfgHseValue",
0x00000051 : "BOOTCORE_NoUsbDpPullupOtpBitValue",
0x00000052 : "BOOTCORE_NoCpuPllOtpBitValue",
0x00000061 : "BOOTCORE_ReOpenDebugValue",
0x00000062 : "BOOTCORE_ReOpenSecNSecDebugValue",
0x00000063 : "BOOTCORE_ReOpenSecOnlyDebugValue",
0x00000064 : "BOOTCORE_ReOpenDbgSwEnableAndHdp",
0x00000065 : "BOOTCORE_DebugCloseAllButDbgenAndDeviceen",
0x00000066 : "BOOTCORE_RmaOtpWordValue",
0x00000068 : "BOOTCORE_RmaTrialOver",
0x00000069 : "BOOTCORE_RmaTrialFoundFreeFuseBit",
0x0000006A : "BOOTCORE_FusedNewRmaTrial",
0x0000006B : "BOOTCORE_RmaPasswdMatch",
0x0000006C : "BOOTCORE_RmaPasswdError",
0x0000006D : "BOOTCORE_RmaRequestValue",
0x0000006E : "BOOTCORE_RmaStatusValue",
0x0000006F : "BOOTCORE_RmaRelockTrialOver",
0x00000070 : "BOOTCORE_RmaRelockTrialCurrentNb",
0x00000071 : "BOOTCORE_FusedNewRmaRelockTrial",
0x00000072 : "BOOTCORE_RmaRelockPasswdMatch",
0x00000073 : "BOOTCORE_RmaRelockPasswdError",
0x00000074 : "BOOTCORE_NoDataCacheBitValue",
0x00000075 : "BOOTCORE_WakeupFromCSTANDBY",
0x00000076 : "BOOTCORE_WakeupFromSTANDBY",
0x00000077 : "BOOTCORE_WakeupFromSTANDBYMpuBenMcuBen",
0x00000078 : "BOOTCORE_WakeupFromSTANDBYMcuSecPerimeterRccTzenRccMckProt",
0x00000079 : "BOOTCORE_WkUpActiveFlags",
0x0000007A : "BOOTCORE_McuRestartOk",
0x0000007B : "BOOTCORE_McuRestartKoNoHashWhileMandatory",
0x0000007C : "BOOTCORE_McuRestartKoWrongHash",
0x0000007D : "BOOTCORE_McuMcicOutOfRangeHashReq",
0x0000007E : "BOOTCORE_McuMcicHashDrvCallStart",
0x0000007F : "BOOTCORE_McuRestartKoErrorWhileHashing",
0x00000080 : "BOOTCORE_McuMcicHashFailStart",
0x00000081 : "BOOTCORE_McuMcicHashFailFinish",
0x00000082 : "BOOTCORE_McuCodeHashVerifReq",
0x00000083 : "BOOTCORE_McuNoCodeHashVerifReq",
0x00000084 : "BOOTCORE_McuCodeHashVerifPass",
0x00000085 : "BOOTCORE_McuSecurityPerimeterVerifPass",
0x00000086 : "BOOTCORE_McuSecurityPerimeterVerifFailed",
0x00000087 : "BOOTCORE_McuSecurityPerimeterVerifNotChecked",
0x00000088 : "BOOTCORE_WakeupFromCSTANDBYWithMcuNotRunning",
0x00000089 : "BOOTCORE_WakeupFromCSTANDBYWithMcuRunning",
0x0000008A : "BOOTCORE_WakeupFromCSTANDBYWithMcuSev",
0x0000008B : "BOOTCORE_WakeupFromCSTANDBYWithWwdg1Evt",
0x00000091 : "BOOTCORE_MpuCpuPowerStateHasBeenInCStandby",
0x00000092 : "BOOTCORE_SystemPowerStateHasBeenInStandby",
0x00000093 : "BOOTCORE_BootModeNOBOOTENGIBOOT",
0x00000094 : "BOOTCORE_BootModeNOBOOTNOTENGIBOOTREQBYBOOTPINS",
0x00000095 : "BOOTCORE_BootModeNOBOOT",
0x00000096 : "BOOTCORE_BootModeNOBOOTWITHENGIACCESS",
0x00000097 : "BOOTCORE_BootModeNOBOOTCSTANDBY",
0x00000098 : "BOOTCORE_BootModeCOLDBOOT",
0x00000099 : "BOOTCORE_WakeupFromCSTANDBYMcuSysRstReqEvt",
0x000000BF : "BOOTCORE_BootTimerSrcSoftCnt",
0x000000C0 : "BOOTCORE_BootTimerSrcGenTimer",
0x000000CF : "BOOTCORE_OtpBootSrcDisableMaskVal",
0x000000D0 : "BOOTCORE_OtpBootUartInstanceDisableMaskVal",
0x000000D1 : "BOOTCORE_EnabledSrcMaskVal",
0x000000E0 : "BOOTCORE_CSISwitchON",
0x000000E8 : "BOOTCORE_SafMemPwrUp",
0x000000E9 : "BOOTCORE_SafMemPwrDown",
0x000000EA : "BOOTCORE_FreezeIWDG12Clocks",
0x000000EB : "BOOTCORE_UnFreezeIWDG12Clocks",
0x000000ED : "BOOTCORE_BootFAILED",
0x00000120 : "BOOTCORE_UartTraceEntryOnHwInstance",
0x00000132 : "BOOTCORE_Pll12StartDisabledByOtpBit",
0x00000133 : "BOOTCORE_Pll12StartNotDisabledByOtpBit",
0x00000134 : "BOOTCORE_Pll1Started",
0x00000135 : "BOOTCORE_Pll1Locked",
0x00000136 : "BOOTCORE_Pll1LockTimeout",
0x00000137 : "BOOTCORE_CkMpuSsSwitchedOnPll1",
0x00000138 : "BOOTCORE_Pll2Started",
0x00000139 : "BOOTCORE_Pll2Locked",
0x0000013A : "BOOTCORE_Pll2LockTimeout",
0x0000013B : "BOOTCORE_CkAxiSsSwitchedOnPll2",
0x0000013C : "BOOTCORE_Pll12StartReqStatusPllNotStarted",
0x0000013D : "BOOTCORE_Pll12StartReqStatusPllStarted",
0x00000140 : "BOOTCORE_BootSrcPeriphLoadLoopDisabled",
0x0000014E : "BOOTCORE_Pll4Started",
0x0000014F : "BOOTCORE_Pll4Locked",
0x00000150 : "BOOTCORE_Pll4LockTimeout",
0x00000151 : "BOOTCORE_HseNotReady",
0x00000152 : "BOOTCORE_StartupWaitTime",
0x00000153 : "BOOTCORE_PllUsbLocked",
0x00000154 : "BOOTCORE_PllUsbLockTimeout",
0x00000155 : "BOOTCORE_BootRomVer",
0x00000156 : "BOOTCORE_BootRomChipVer",
0x00000157 : "BOOTCORE_BootRomCutVer",
0x00000158 : "BOOTCORE_BootRomForRtlVer",
0x00000159 : "BOOTCORE_BootRomTargetPlatform",
0x0000015A : "BOOTCORE_BootRomMaskVer",
0x0000015D : "BOOTCORE_McuSecPerimeterRccTzenValue",
0x0000015E : "BOOTCORE_McuSecPerimeterMckprotValue",
0x0000015F : "BOOTCORE_McuSecPerimeterExtiTzenr1Value",
0x00000160 : "BOOTCORE_McuSecPerimeterExtiTzenr2Value",
0x00000161 : "BOOTCORE_McuSecPerimeterExtiTzenr3Value",
0x00000162 : "BOOTCORE_McuMcicReadInTampOffsetInBytesOfCodeToHashInRETRAM",
0x00000163 : "BOOTCORE_McuMcicReadInTampSizeInBytesToHash",
0x00000164 : "BOOTCORE_McuMcicReadInTampSignatureWord",
0x00000165 : "BOOTCORE_McuSecPerimeterReadWriteSecureOnlyLastBackupIdx",
0x00000166 : "BOOTCORE_McuSecPerimeterWriteSecureOnlyLastBackupIdx",
0x00000167 : "BOOTCORE_BootModeNOBOOTWithSignalingFromNsec",
0x00000168 : "BOOTCORE_NoBootTogglePa13Nsec",
0x00000169 : "BOOTCORE_McuSecPerimeterTampSmcrVal",
0x0000017D : "BOOTCORE_BootModeENGIBOOTSysRamAllNsecInTZMA1",
0x00001000 : "BOOTCORE_BootPinsFirstSelNone",
0x00001001 : "BOOTCORE_BootPinsFirstSelSerial",
0x00001002 : "BOOTCORE_BootPinsFirstSelQspiNor",
0x00001003 : "BOOTCORE_BootPinsFirstSelSd",
0x00001004 : "BOOTCORE_BootPinsFirstSelEmmc",
0x00001005 : "BOOTCORE_BootPinsFirstSelFmc",
0x00001006 : "BOOTCORE_BootPinsFirstSelEngiBoot",
0x00001007 : "BOOTCORE_BootPinsFirstSelUnknown",
0x00001008 : "BOOTCORE_BootPinsOverridesOtp",
0x00001017 : "BOOTCORE_BootPinsFirstSelQspiNand",
0x00001009 : "BOOTCORE_OtpPrimarySrcForceFmc",
0x0000100A : "BOOTCORE_OtpPrimarySrcForceQspiNor",
0x0000100B : "BOOTCORE_OtpPrimarySrcForceEmmc",
0x0000100C : "BOOTCORE_OtpPrimarySrcForceSd",
0x0000100D : "BOOTCORE_OtpPrimarySrcForceQspiNand",
0x0000100E : "BOOTCORE_OtpPrimarySrcForceNothing",
0x0000100F : "BOOTCORE_OtpPrimarySrcForceUnknown",
0x00001010 : "BOOTCORE_OtpSecondarySrcForceFmc",
0x00001011 : "BOOTCORE_OtpSecondarySrcForceQspiNand",
0x00001012 : "BOOTCORE_OtpSecondarySrcForceQspiNor",
0x00001013 : "BOOTCORE_OtpSecondarySrcForceEmmc",
0x00001014 : "BOOTCORE_OtpSecondarySrcForceSd",
0x00001015 : "BOOTCORE_OtpSecondarySrcForceNothing",
0x00001016 : "BOOTCORE_OtpSecondarySrcForceUnknown",
0x00001020 : "BOOTCORE_TampForceSerialBoot",
0x00002001 : "BOOTCORE_AuthWrongImageVersion",
0x00002002 : "BOOTCORE_AuthHashAreaStartAdd",
0x00002003 : "BOOTCORE_AuthImageLength",
0x00002004 : "BOOTCORE_AuthImageSizeToHash",
0x00002005 : "BOOTCORE_AuthImageEntryPoint",
0x00002006 : "BOOTCORE_AuthEccAlgoP256NIST",
0x00002007 : "BOOTCORE_AuthEccAlgoBrainPool256",
0x00002008 : "BOOTCORE_AuthEccAlgoUnknown",
0x00002009 : "BOOTCORE_AuthNoSigCheckValue",
0x0000200A : "BOOTCORE_AuthEntryPointOutOfRange",
0x0000200B : "BOOTCORE_AuthPubKHashFailStart",
0x0000200C : "BOOTCORE_AuthPubKHashFailFinish",
0x0000200D : "BOOTCORE_AuthPubKHashCompareError",
0x0000200E : "BOOTCORE_AuthPubKHashCompareOk",
0x0000200F : "BOOTCORE_AuthImageHashFailStart",
0x00002010 : "BOOTCORE_AuthImageHashFailFinish",
0x00002011 : "BOOTCORE_AuthImageSignatureFromHeaderECCDecryptStarted",
0x00002012 : "BOOTCORE_AuthImageSignatureKo",
0x00002013 : "BOOTCORE_AuthImageSignatureOk",
0x00002014 : "BOOTCORE_AuthDecisionIsJumpToImage",
0x00002015 : "BOOTCORE_AuthWrongImageHeaderVersion",
0x00002016 : "BOOTCORE_AuthWrongMagicNumber",
0x00002017 : "BOOTCORE_AuthImageLengthTooSmall",
0x00002018 : "BOOTCORE_AuthImageLengthTooBig",
0x00002019 : "BOOTCORE_AuthWrongImageChecksum",
0x0000201A : "BOOTCORE_AuthIsAuthenticationMandatory",
0x0000201B : "BOOTCORE_AuthIsAuthenticationSkipRequestedAndAllowed",
0x00002400 : "BOOTCORE_HseFrequencyDetected",
0x00002401 : "BOOTCORE_HseDigBypassDetected",
0x00002402 : "BOOTCORE_HseAnalogBypassDetected",
0x00002403 : "BOOTCORE_HseNoBypass",
0x00002404 : "BOOTCORE_HseFreqDetectDisabled",
0x00002405 : "BOOTCORE_HseBypassDetectDisabled",
0x00002406 : "BOOTCORE_eMmcUseSingle128KBytesBootPartition",
0x50000000 : "USB_Init",
0x50000001 : "USB_Loop",
0x50000002 : "USB_Selection",
0x50000003 : "USB_CallingAuthAndGo",
0x50000004 : "USB_DFU_OperationComplete",
0x50000005 : "USB_DFU_GetStatus",
0x50000006 : "USB_DFU_GetStatus_GoTo_Idle",
0x50000007 : "USB_DFU_END_OF_DNLOAD",
0x50000008 : "USB_DFU_DNLOAD",
0x50000009 : "USB_DFU_UPLOAD",
0x5000000A : "USB_DFU_GETSTATUS",
0x5000000B : "USB_DFU_CLRSTATUS",
0x5000000C : "USB_DFU_GETSTATE",
0x5000000D : "USB_DFU_ABORT",
0x5000000E : "USB_DFU_DETACH",
0x5000000F : "USB_DFU_LEAVE",
0x50000010 : "USB_DFU_DataOut",
0x50000011 : "USB_DFU_GetStatusMedia",
0x50000012 : "USB_DFU_SRAMWrite",
0x50000013 : "USB_DFU_SRAMWrite_CRC",
0x50000014 : "USB_DFU_SRAMWrite_imgL",
0x50000015 : "USB_DFU_Init",
0x50000016 : "USB_DFU_SET_INTERFACE",
0x50000017 : "USB_DFU_SET_INTERFACE_ERR",
0x50000018 : "USB_DFU_Get_INTERFACE",
0x50000019 : "USB_DFU_LEAVE_EP0_TxReady",
0x50000020 : "USB_ClockTree_Failed",
0x50000021 : "USB_WrongDataTransfer",
0x50000022 : "USB_DataTransfered",
0x60000001 : "UART_Selection",
0x60000002 : "UART_PeripheralSerialBootLoopStart",
0x60000003 : "UART_PacketNumber",
0x60000004 : "UART_PacketSize",
0x60000005 : "UART_PacketXor",
0x60000006 : "UART_ImageLength",
0x60000008 : "UART_NACK",
0x60000009 : "UART_ABORT",
0x6000000A : "UART_ActivityDetected",
0x6000000B : "UART_ActivityDetecting",
0x30000001 : "SD_InitFailed",
0x30000002 : "SD_TransferFailedDuringSecBlHeaderRead",
0x30000003 : "SD_TransferFailedDuringSecBlPayloadRead",
0x30000004 : "SD_CardDetected",
0x30000005 : "SD_NoCardResponse",
0x30000006 : "SD_TrySecBL1",
0x30000007 : "SD_FailedSecBL1TrySecBL2",
0x30000008 : "SD_InitDetailedErrorDesc",
0x30000009 : "SD_ImageTooBig",
0x3000000A : "SD_ImageLengthZero",
0x3000000B : "SD_StdCapacityCardV11",
0x3000000C : "SD_StdCapacityCardV20",
0x3000000D : "SD_HighCapacityCardSDHCOrSDXC",
0x3000000E : "SD_UnknownCapacityCard",
0x3000000F : "SD_OverallRetryCnt",
0x30000010 : "SD_ImageHeaderNotFound",
0x30000011 : "SD_NotGPTFound",
0x30000012 : "SD_FsblsFound",
0x30000013 : "SD_GPTFound",
0x30000014 : "SD_NotFSBLFound",
}
def tag2str(tag):
try:
return tags[tag]
except KeyError:
return None
class Trace(object):
def __init__(self, timestamp, level, tag, data ):
self.timestamp = timestamp
self.level = level
self.tag = tag
self.data = data
def dump(self):
level_str = level2str(self.level)
tag_str = tag2str(self.tag)
if tag_str:
print( "< @ %08d | [%s] - %s" % (self.timestamp, level_str, tag_str), end='' )
if len(self.data) > 0:
print (" (", end='')
for d in self.data[:-1]:
print (" 0x%08X," % (d), end='')
print (" 0x%08X )" % (self.data[-1]), end='')
print (" >")
class TraceAnalyzer(object):
START_WORD = 0xFFDDBB00
def __init__(self):
pass
def _next_word_(self):
word = self._file.read(4)
if len(word):
return struct.unpack('<L',word)[0]
else:
raise StopIteration('END OF FILE')
def _look_for_start_word_(self):
while True:
if self._next_word_() == self.START_WORD:
return True
def parse(self,file_):
self._file = file_
return iter(self)
def __iter__(self):
return self
def __next__(self):
self._look_for_start_word_()
size = self._next_word_()
timestamp = self._next_word_()
size -= 4
level = self._next_word_()
size -= 4
tag = self._next_word_()
size -= 4
data = []
while size > 0:
data.append(self._next_word_())
size -= 4
return Trace(timestamp, level, tag, data)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='STM32MPU15 Bootrom trace decoder')
parser.add_argument("trace_file",
action="store",
type=argparse.FileType('rb'),
help="Name of binary trace file",
metavar="FILE.BIN")
args = parser.parse_args()
traces_analyzer = TraceAnalyzer()
traces = traces_analyzer.parse(args.trace_file)
for trace in traces:
trace.dump()
1.2. On STM32MP2 unknown microprocessor device[edit | edit source]
ROM code traces cannot be downloaded directly. The process to get traces consists to use a special FSBL that will print the traces on UART.
Here is a link where to download the FSBL binary, depending on the UART used :
https://github.com/STMicroelectronics/wiki-stm32mp-addons/tree/main/MP2RomTracesDump
These binaries permit to display MP25/MP23 bootrom traces on UART @115200 bauds, 8bits, 1 stop bit, no parity, no CTS/RTS. According to used binary, the traces are output on the designated UART and GPIO pin of filename.
For each MP2ROMtracesdump, 2 binaries are available. Files with .stm32 extension are binary with header, unsigned, to be run on a CLOSED_UNLOCKED chip. Files with .bin extension are binary without header to be signed by customer to be run on CLOSED_LOCKED_PROVD chip.
This binary has to be flashed on flash device (SD card, EMMC, Parallel NAND, SNOR, SNAND or HYPERFLASH) or it can be used with serial fallback. On flash device, it can be flashed in FSBL1 position or in FSBL2 position as backup FSBL in case of FSBL1 failed loading. This binary can only be used on CA35 Aarch64 TDCID, it cannot be executed on CM33.
The command below gives an example how to use it with serial fallback:
port=usb1 -p -w MP2ROMtracesdump_USART2_PA4.stm32 0x01 -s
STM32_Programmer_CLI -c
When booting on this binary, the traces are directly output on the UART pin in plain text.