플래시 및 EEPROM


14

Atmega16 데이터 시트에 따르면

a) 16KB In-System Self-programmable Flash 프로그램 메모리 및 b) 512 바이트 EEPROM.

마이크로 컨트롤러가 EEPROM 기술과 플래시 기술을 통해 프로그래밍 할 수있는 두 개의 별도 ROM을 가질 수 있습니까?

또는 데이터 시트에서 위와 같이 내 추론이 잘못 되었습니까?

우리 프로그램이 EEPROM이 필요한 이유보다 플래시 메모리에 저장되어 있다는 것을 알고 있습니다. 프로그램에 플래시 메모리가 있다면 어떻게 사용합니까?

또한 "시스템 내 자체 프로그래밍 가능"이라는 용어가 무엇인지 설명 할 수 있습니다.

내가 아는 것 : 플래시 기술은 프로그램을 데이터 블록으로 작성할 수있는 반면 EEPROM은 데이터를 바이트 단위로 쓸 수 있습니다.

답변:


21

오늘날 플래시 메모리는 프로그램 코드를 유지하는 데 사용되고 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 시스템에서 칩을 프로그래밍하는 데 사용됩니다.


답변 주셔서 감사합니다. EEPROM 내부에 데이터를 입력하려면 USBASP 프로그래머처럼 플래시 메모리 내부에 프로그램을 덤프하려면 EEPROM 프로그래머가 필요합니까? 맞습니다.
Jasser

1
@Jasser 아니요, 외부 프로그래머가 필요하지 않습니다. 프로그램 내에서 EEPROM에 액세스합니다. ATmega 내부에는 레지스터를 작성하여 EEPROM을 업데이트 할 수있는 레지스터 세트가 있습니다. EEPROM을 읽으려면이 레지스터를 사용해야합니다. 일반 주소 맵에는 표시되지 않기 때문입니다. EEPROM을 지우고 쓰고 쓰는 방법에 대한 정보는 칩의 데이터 시트에 있습니다.
tcrosley

우리는 마이크로 컨트롤러 내부의 EEPROM에서 쓰거나 읽을 수 있기 때문에 마이크로 컨트롤러는 EEPROM 내부에 데이터를 저장하는 회로를 가지고 있어야하며 이는 EEPROM 프로그래머와 유사해야합니다. 이것은 또 다른 질문으로 이어진다. EEPROM은 그 이후보다 약 10 만 번 작성 될 수 있기 때문에 레지스터를 통해 EEPROM에 데이터를 저장할 수 없을 수도있다. 이 진술은 의미가 있습니까? @tcrosley
재스퍼

1
@Jasser 맞습니다. EEPROM을 업데이트 할 수있는 횟수에는 제한이 있습니다. 일반적으로 플래시를 업데이트 할 수있는 횟수보다 훨씬 높습니다 (때로는 수십 배 이상). 나는 내 대답에서 그것을 언급하고 업데이트해야합니다. 인용 한 숫자는 칩 메이커가 보장하는 최소값입니다. 100,000 쓰기에 대해 지정된 칩으로 한 번 테스트를 수행했으며 오류가 감지되기 ​​전에 500,000 이상을 넘었습니다.
tcrosley

1
@Jasser 네, 플래시에서 데이터를 설정하는 것은 조금 더 어렵습니다. 또한 내 답변 업데이트에서 설명한 것처럼 EEPROM을 플래시보다 몇 배 더 (일반적으로 10 배) 지우고 다시 프로그래밍 할 수 있습니다.
tcrosley

4

@tcrosley의 훌륭한 답변에 더 많은 정보를 추가 할 것입니다.

ATmega16은 Harvard 아키텍처 , 즉 데이터 메모리가 프로그램 메모리와 분리되는 시스템 토폴로지를 구현합니다 . Atmega16 데이터 시트 에서 관련 단락 인용 (8 페이지) :

성능과 병렬 처리를 극대화하기 위해 AVR은 프로그램과 데이터를위한 별도의 메모리와 버스가있는 하버드 아키텍처를 사용합니다. 프로그램 메모리의 명령어는 단일 레벨 파이프 라이닝으로 실행됩니다. 하나의 명령이 실행되는 동안 프로그램 메모리에서 다음 명령이 프리 페치됩니다. 이 개념을 통해 모든 클록 사이클에서 명령을 실행할 수 있습니다. 프로그램 메모리는 In-System Reprogrammable Flash 메모리입니다.

하버드 아키텍처는 기존 PC 아키텍처 에서처럼 데이터와 명령어가 동일한 버스를 공유하지 않기 때문에 명령어 페치주기와 데이터 액세스주기간에 버스 경합이 없다는 장점이 있습니다.

따라서 플래시 메모리는 프로그램 메모리로 사용되는 반면 데이터 메모리는 SRAM (함수 호출 스택 및 힙과 같은 일시적인 데이터의 경우 C와 같이 프로그래밍하는 경우)과 EEPROM (영구 저장의 경우)간에 분할됩니다. .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.