Flash program memory and data EEPROM RM0016
44/449 Doc ID 14587 Rev 8
Refer to the option byte section in the datasheet for more information on option bytes, and to
the STM8 SWIM protocol and debug module user manual (UM0470) for details on how to
program them.
4.5 Memory protection
4.5.1 Readout protection
Readout protection is selected by programming the ROP option byte to 0xAA. When readout
protection is enabled, reading or modifying the Flash program memory and DATA area in
ICP mode (using the SWIM interface) is forbidden, whatever the write protection settings.
Furthermore, on medium and high density STM8S and STM8A, the debug module (DM)
cannot start code execution by the CPU when the readout protection is active, and the CPU
is stalled.
Even if no protection can be considered as totally unbreakable, the readout feature provides
a very high level of protection for a general purpose microcontroller.
Removing the readout protection
The readout protection can be disabled on the program memory, UBC, and DATA areas, by
reprogramming the ROP option byte in ICP mode. In this case, the Flash program memory,
the DATA area and the option bytes are automatically erased and the device can be
reprogrammed.
Refer to Table 6: Memory access versus programming method for details on memory
access when readout protection is enabled or disabled.
4.5.2 Memory access security system (MASS)
After reset, the main program and DATA areas are protected against unintentional write
operations. They must be unlocked before attempting to modify their content. This unlock
mechanism is managed by the memory access security system (MASS).
The UBC area specified in the UBC option byte is always write protected (see Section 4.4.3:
User boot area (UBC)).
Once the memory has been modified, it is recommended to enable the write protection
again to protect the memory content against corruption.
Enabling write access to the main program memory
After a device reset, it is possible to disable the main program memory write protection by
writing consecutively two values called MASS keys to the FLASH_PUKR register (see
Section 4.8.6: Flash program memory unprotecting key register (FLASH_PUKR)). These
programmed keys are then compared to two hardware key values:
● First hardware key: 0b0101 0110 (0x56)
● Second hardware key: 0b1010 1110 (0xAE)