STM32 Flash Memory에 대한 이야기

이번 포스팅에서는 STM32 내부 플래 메모리에 대한 이야기를 해보려고 합니다. VDD에 전원이 들어오거나 RESET를 통해 시스템이 동작을 시작할 때 코드를 인출하는 곳이 내부 플래시 메모리입니다.

MCU의 내부 플래시 메모리는 제품마다 전체, 섹터, 페이지 등의 크기가 다 다르기 때문에 어플리케이션에 적합한 제품을 골라야 비용을 절약 할 수 있습니다.

Flash Memory 속도

Datasheet 등에는 표시되어 있지 않지만 의외로 Core Clock에 비해 플래시 속도가 몇 배 느립니다. 어플리케이션의 성능이 Core 속도 만큼 나오지 않는 이유는 바로 이 때문입니다. 이를 극복하기 위해 ART Accelerator라는 STM32 자체 기술이 탑재되어 있긴 한데 Branch나 interrupt가 많은 어플리케이션에서는 RAM 상주 code를 구현하는게 더 낫습니다.

이처럼 플래시 속도와 Core 속도의 차이 때문에 플래시 Read access시에 Read access latency라는 것이 꼭 필요합니다. 만약 Read access latency 설정을 잘 못하면 어플리케이션은 fault에 빠지게 됩니다. 아래는 STM32G4의 Read access latency 설정 값입니다.

Flash 수명

EEPROM에 비해 플래시 메모리의 수명은 현저히 짧습니다. 이러한 짧은 수명 때문에 빈번한 데이터 수정을 하는 어플리케이션에서 Data flash로 사용하기엔 부족합니다. 이를 극복하기 위해서 STM32는 EEPROM Emul 이라는 소프트웨어 확장팩을 이용해 cycling issue를 해결하고 있습니다.

아래는 STM32G4의 수명입니다. 약 10K(만번)의 Erase 횟수 제한을 가지고 있습니다.

Flash Memory Write/Erase

제품마다 다르지만 플래시 메모리 Write/Erase 시 적합한 VDD Level이 있을 수 있으니 제품 데이터시트를 반드시 확인해야 합니다. 플래시 메모리 Write/Erase시 순간적으로 MCU 내부에서 높은 전압과 전류를 사용하기에 전원이 불안정하면 전압이 Drop 될 수 있으며 이는 불완전한 데이터가 쓰여지거나 Erase operation에 에러가 발생할 수도 있습니다. 이를 극복하기 위해 전원단에 Cap을 추가로 달 수도 있습니다.

제품마다 플래시의 Erase 단위가 다릅니다. 어떤 제품은 Sector 단위 어떤 제품은 Page 단위로 Erase가 가능합니다. 아래는 STM32G4의 예이며 이 제품은 Page 단위입니다.

각각의 Erase/Program 소요시간은 데이터시트에 상세히 적혀있으니 참고하시면 됩니다. 아래는 STM32G4의 소요시간입니다.

이상입니다.