오늘날 플래시 메모리는 프로그램 코드를 유지하는 데 사용되고 EEPROM (Electrically Erasable Read-only Memory)은 영구 데이터를 유지하는 데 사용됩니다. 약 30 년 전에 Flash가 등장하기 전에 EEPROM을 사용하여 프로그램 코드를 보관했습니다.
실제로 ROM (Read-Only Memory)이 먼저오고 PROM (Programmable ROM은 한 번만), EPROM (PROM Erasable with UV light), EEPROM 및 Flash가 마지막으로 나옵니다. ROM은 여전히 대량의 저렴한 응용 프로그램 (예 : 말하는 인사말 카드)에 사용됩니다.
현재 마이크로 컨트롤러와의 중요한 차이점은 일반적으로 EEPROM에서 코드를 실행할 수 없으며 프로그램이 플래시에 데이터를 저장하는 것이 어색하다는 것입니다. (예를 들어, 데이터 선언에 "const"키워드를 사용하거나 문자열을 정의 할 때 데이터가 플래시에 저장되지만 컴파일러와 링커가이를 뒤에서 처리합니다.)
EEPROM 영역은 마이크로 컨트롤러의 전원이 끊긴 후 전원이 켜진 경우를 포함하여 재부팅시 사용 가능한 구성 또는 기타 데이터를 보유하는 데 사용할 수 있습니다. 기능적으로 EEPROM을 매우 작은 하드 드라이브 또는 SD 카드로 생각할 수 있습니다.
EEPROM이없는 마이크로 컨트롤러에서는 영구 메모리를 플래시 메모리에 저장할 수 있지만 마이크로 컨트롤러는 실제로이를 위해 설계되지 않았기 때문에 어려워지고 프로그램 코드를 방해하지 않는 특별한 지점을 찾아야합니다. 링커와 함께. 또한 아래에서 언급 한 것처럼 일반적으로 플래시보다 EEPROM을 여러 번 업데이트 할 수 있습니다.
플래시에서 프로그램 데이터를 수행한다고해서 C 프로그램에서 변수로 데이터에 액세스 할 수 있다는 의미는 아닙니다. 컴파일러에서 변수에 코드의 위치를 알려줄 방법이 없기 때문입니다 (즉, const를 바인딩 할 수 없음) 이 플래시 영역에 대한 변수.) 따라서 읽기는 레지스터를 작성하는 데 사용되는 특수 레지스터 세트를 통해 수행해야합니다. 이 제한 사항은 EEPROM의 데이터에도 적용되므로 이와 관련하여 이점이 없습니다.
플래시 또는 EEPROM을 프로그래밍하려면 먼저 메모리 블록을 삭제해야합니다. 그런 다음 프로그래밍됩니다. 플래시의 경우 쓰기는 일반적으로 한 번에 한 블록 씩 수행됩니다. EEPROM의 경우 마이크로 컨트롤러에 따라 한 번에 블록 또는 바이트 단위로 수행 할 수 있습니다.
플래시와 EEPROM 모두 메모리를 닳기 전에 업데이트 할 수있는 최대 횟수가 있습니다. 이 숫자는 데이터 시트에 최소 보장 값으로 제공됩니다. 일반적으로 플래시 메모리보다 EEPROM이 훨씬 높습니다. 플래시의 경우 1000까지의 숫자를 보았습니다. EEPROM의 경우 1,000,000의 숫자를 보았습니다.
플래시에 비해 EEPROM의 장점 중 하나는 플래시를 지우는 것보다 여러 번 삭제할 수 있다는 것입니다.
"시스템 자체 프로그래밍 가능"은 마이크로 컨트롤러가 실행 중에 자체 플래시를 업데이트 할 수 있음을 의미합니다. 이 기능은 일반적으로 필드에서 코드를 업데이트하는 데 사용됩니다. 요점은 메인 프로그램이 업데이트되는 동안 부트로 더라고하는 시스템에 코드를 남겨 두어야한다는 것입니다. 이 방식은 Arduino 시스템에서 칩을 프로그래밍하는 데 사용됩니다.