A non-volatile memory system, comprising: a plurality of protectable memory sectors having contents accessible through a read command to the NVM system and being configured to store a protection code identifying at least one protected memory sector; a program-once memory area having contents not accessible through a read command to the NVM system and being configured to store a plurality of lockout codes and a plurality of associated lockout keys, each lockout key being associated to exactly one lockout code, each lockout code identifying at least one protectable memory sector as a protected memory sector, and each lockout key being used to control access to sectors identified by the associated lockout code; a merged protection register configured to store a merged lockout code; and an access control circuitry configured: to combine, at start-up, the protection code and the plurality of lockout codes into a merged protection code and to store the merged protection code in the merged protection register, to verify, upon receipt of a write access request, using the merged protection register, whether the sector being accessed is protected, and to allow, if the sector being accessed is protected, write access to the protected memory sector only if a lockout code and a lockout key that are received with the write access request match a lockout code and a lockout key stored in the program-once memory area. a plurality of protectable memory sectors having contents accessible through a read command to the NVM system and being configured to store a protection code identifying at least one protected memory sector; a program-once memory area having contents not accessible through a read command to the NVM system and being configured to store a plurality of lockout codes and a plurality of associated lockout keys, each lockout key being associated to exactly one lockout code, each lockout code identifying at least one protectable memory sector as a protected memory sector, and each lockout key being used to control access to sectors identified by the associated lockout code; a merged protection register configured to store a merged lockout code; and an access control circuitry configured: to combine, at start-up, the protection code and the plurality of lockout codes into a merged protection code and to store the merged protection code in the merged protection register, to verify, upon receipt of a write access request, using the merged protection register, whether the sector being accessed is protected, and to allow, if the sector being accessed is protected, write access to the protected memory sector only if a lockout code and a lockout key that are received with the write access request match a lockout code and a lockout key stored in the program-once memory area. to combine, at start-up, the protection code and the plurality of lockout codes into a merged protection code and to store the merged protection code in the merged protection register, to verify, upon receipt of a write access request, using the merged protection register, whether the sector being accessed is protected, and to allow, if the sector being accessed is protected, write access to the protected memory sector only if a lockout code and a lockout key that are received with the write access request match a lockout code and a lockout key stored in the program-once memory area.