임베디드 기초강좌 6 - MCU 의 내장 메모리

임베디드 기초강좌 6 - MCU 의 내장 메모리 

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]

 

안녕하세요. 고명호 입니다.

지난번에는 모든 전자기기의 필수적인 요소인 클럭에 관해서 알아 보았습니다.

이번 강좌에서는 임베디드에 사용되는 각종 메모리 혹은 내장 메모리의 종류및 

사용법을 알아보고 부록 강좌에서는 일반적인 메모리의 역사및 종류에 대해서 

알아보겠습니다.

 

임베디드에 사용되는 각종 메모리는 크게 두종류로 나뉩니다.

첫번째로 전원을 차단하면 그 내용이 지워지는 램(RAM - random access memory)과 

전원이 차단 되어도 지워지지 않는 롬(ROM - read only memory)이 

바로 그 두 종류 입니다.

 

임베디드 MCU에는 램과 롬을 동시에 내장하여 추가로 부가적인 램과 롬을 

MCU의 외부에 장착하지 않고도 원하는 프로그램을 실행 시킬수 있는 장점이 있습니다. 

그렇지만 램과 롬의 용량이 부족해 지는 경우에는 어떻게 하면 될까요?

첫번째로 MCU의 외부에 메모리를 추가로 장착하면 됩니다. 

 

그렇게 하면 메모리를 액세스 하기위해서  I/O 핀이 추가로 필요해 지게 됩니다.

(제어와 데이터의 이동에 사용되는 핀이 필요하기 때문입니다.)

 

두번째로 더 간단한 방법인데요. 

스펙문서를 살펴 보시면 같은 종류의 MCU라 하더라도 램과 롬의 용량이 각각 다른 

MCU가 존재 합니다. 이러한 경우에는 좀더 상위의 MCU를 사용하여 프로그래밍을 

하면 됩니다.

 

MCU 제조회사에서는 대개 같은 패밀리의 MCU중 메모리의 용량만 다른 경우에 

똑같은 스펙문서를 공유합니다. 

따라서 같은 스펙 문서를 보고 좀더 상위의 MCU를 사용하시면 됩니다. 

이러한 상위의 MCU도 없다면 비슷한 패밀리의 MCU를 대치하여 사용하면 됩니다. 

이때 각 핀들이 MCU마다 각각 다를수 있으므로 스펙문서를 보고 핀의 위치를 변경하는

추가적인 작업이 필요할 수도 있습니다.

 

예를 들어 보겠습니다.

다음사이트의 스펙 문서를 참고해 주세요

http://www.atmel.com/images/doc8161.pdf

atmel AVR 시리즈의 스펙 문서 입니다.

하나의 스펙 문서에 4종류의 MCU를 기술하고 있습니다.

 


(그림1)

 

스펙문서에는 각각의 MCU는 서로 핀 호환이 되며 3종류의 내장 메모리 크기만이 

다른것을 알 수 있습니다.

 


(그림2 - 스펙문서에 기술한 4종류의 MCU의 핀아웃은 동일합니다.) 

 

 

이 경우에 프로그래밍은 가장 작은 용량의 MCU로 시작해서 점차 기능이 추가되는경우 

상위의 칩을 사용하면 원본 프로그램을 거의 수정하지 않고도 원하는 기능을 

추가 할 수 있는 장점이 있습니다.

(완전히 수정할 필요가 없는것은 아닙니다.  스택포인터 조정을 위해서 한두개의 

명령어는 수정할 필요가 있습니다. 그렇지만 아두이노의 경우에는 부트로더에서 

이러한 일을 수행해 주므로 아두이노의 코드는 거의 수정없이 사용할 수 있습니다.)

 

자 그럼 이번에는 핀조정이나 기판 레이아웃이 달라지는 경우의 예를 살펴 보겠습니다

다음 주소를 참조해 주세요.

http://ww1.microchip.com/downloads/en/devicedoc/39632c.pdf

마이크로칩의 PIC18F2550으로 프로그램을 작성했다고 가정해 보겠습니다.

 

 

(그림 3)

 

PIC18F2550과 PIC18F4550은 내부 메모리의 크기가 다르지만 

또한 핀아웃도 다릅니다. 핀의 갯수가 다르네요..

(그림 4) 

 

대개 상위칩은 하위칩의 모든 기능을 가지고 있는 경우가 많습니다. 

따라서 18F2550으로 회로를 설계 하였다면 이경우에는 좀더 큰 용량의 칩으로 

바꾸면서 추가적으로 회로의 변경이 필요해 집니다.

 

위의 경우만 비교해 본다면 AVR시리즈가 좀더 migration이 편리한 듯 보입니다만, 

각 칩 제조사의 제품군이 매우 다양하기 때문에 어떤경우에는 MICROCHIP의 

제품의 micration이 더 편리한 경우도 있습니다.

 

하나하나 따져보고 추후 코드의 추가가 될 수 있는지 여부를 확인해 보아야 하겠습니다.

 

위의 두 스펙문서를 보시면 

High Endurance Non-volatile Memory Segments

– 4/8/16/32K Bytes of In-System Self-Programmable Flash progam memory

(ATmega48PA/88PA/168PA/328P)

– 256/512/512/1K Bytes EEPROM (ATmega48PA/88PA/168PA/328P)

– 512/1K/1K/2K Bytes Internal SRAM (ATmega48PA/88PA/168PA/328P)

– Write/Erase Cycles: 10,000 Flash/100,000 EEPROM

 

이런 글귀하고 

Program Memory Data Memory

Flash(bytes), # Single-Word Instructions

SRAM(bytes), EEPROM(bytes)

 

이런 문장이 있습니다. 

뭔가 메모리의 종류가 3종류가 되는것 같습니다.

공통적인 부분만을 뽑아내 보면 Flash programming memory, SRAM, EEPROM 

이렇게 3종류의 메모리가 내장되어 있다는 것을 알 수 있습니다.

 

자 그럼 왜 이렇게 다양한 종류의 메모리가 한꺼번에 내장되어 있을까요? 

그것은 각 종류의 메모리가 하는 역할이 각각 다르기 때문입니다.

 

맨 처음에 메모리는 크게 2종류로 나뉘어 진다고 말씀 드렸습니다. 램 혹은 롬 

위의 3종류의 메모리는 SRAM 은 램 종류이고, 

Flash programming memory, EEPROM 은 롬 종류입니다.

 

먼저 프로그램이 저장될 코드 메모리가 필요합니다. 

코드 메모리는 MCU의 전원이 꺼지더라도 지워지지 않아야 하기 때문에 

롬에 저장되며 FLASH라는 종류의 롬에 저장 됩니다.

그리고 또한 프로그램이 실행되는 중에 필요한 각종 정보를 저장하는데에도 메모리가 

필요할 것입니다. 이러한 메모리는 프로그램이 수행중에만 필요하므로 전원이 차단된 

경우 그 내용을 유지할 필요가 없습니다. 

이런 경우에는 램이 필요하고 MCU에는 SRAM이라는 종류의 램이 사용되었다는 

의미입니다.

 

그리고 마지막으로 프로그램이 수행중에 필요하기는 하지만 전원이 꺼진경우에도 

그 값을 저장할 필요가 있는경우에는 어떻게 해야 할까요?

예를 들자면 모니터의 밝기 정보같은 경우 

(매번 모니터를 켜자마자 밝기를 다시 조정하고 쓰는 분들은 없을 것입니다.)

이렇게 전원이 차단된 경우에도 정보를 가지고 있을 필요가 있는경우에는 

그 정보를 EEPROM에 저장을 합니다.

 

이렇게 3종류의 메모리가 1개의 MCU에 사용된 이유는 각 종류의 메모리의 액세스 속도가 다르고 쓰기 가능 횟수가 차이가 있기 때문에 그러합니다.

 

Flash programming memory, EEPROM 의 경우 각각 10,000 회 100,000 회의 기록을 

보장합니다. 즉 그 이상은 기록할 수 없는 것입니다. 내장 프로그램의 경우에는 최초 1번

기록이 되면 대개 (디버깅을 행하는 경우를 제외하고) 바꿀 필요가 없기 때문에 

10,000 회의 경우에도 넉넉합니다.

 

또한 EEPROM의 경우에도 100,000 회라면 MCU의 수명이 다하는 날까지 쓰더라도 

(하루에 100번 기록한다 하더라도 1000 일입니다.)

 

이것도 각 cell당 숫자이므로 모든 cell을 100,000회 이상 기록해서 쓰는 경우는 

많지 않을 것입니다.

 

- 모니터의 밝기를 하루에 100 번씩 바꾼다면 1000 일 후에는 모니터의 밝기 정보가 저장 되지 않겠네요.^ ^ -

그렇지만 매번 바뀌는 종류의 정보들 - 예를 들자면 모니터에서 표시되는 내용을 담고 

있는 메모리들 - 은 하루에도 수십만번 이상 그 내용이 바뀔 것입니다. 

이러한 정보들은 SRAM에 저장을 하며 모니터의 전원이 차단된후 다시 전원이 들어오면 

내부 프로그램에 의해서 다시 초기의 값들로 돌아오게 됩니다.

 

자 그럼 요약 하겠습니다.

 

 embedded MCU 의경우 대개 3종류의 메모리가 내장되어 있으며 

코드 프로그램의 메모리가 더 필요한 경우 FLASH memory 가 큰 것을 선택한다.

내장 프로그램의 실행시 임시 메모리가 부족한 경우 SRAM이 더 큰것을 선택한다.

내장 프로그램의 실행시 전원이 꺼져도 유지해야 하는 데이터가 더 필요한 경우 

EEPROM 이 더 큰것을 선택한다.

 

입니다. 

 

그렇지만 제조사는 아예 3종류의 메모리 전부가 더 큰 모델을 생산하므로 아무거나 

메모리가 부족하면 상위 모델로 대치하면 됩니다.

 

MCU의 내장 메모리에 대해서 약간의 감이 잡히셨나요.

 

이번시간에는 MCU의 메모리에 대해서 알아 봤습니다.

다음에는 일반적인 메모리의 종류가 어떤것이 있는지 알아 보겠습니다.

감사합니다.~~

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]

신고


티스토리 툴바