임베디드 강좌 6 부록 - 각종 메모리

임베디드 강좌 6 부록 - 각종 메모리

 

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

 

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

지난번에는 임베디드 MCU에 내장된 메모리의 종류및 용도에 관해서 알아보았습니다.

이번에는 임베디드 이외의 각종 전자기기에 쓰이는 메모리의 역사및 종류에 관해서 

알아 보겠습니다.

 

데스크탑에서는 다음과 같은 메모리 모듈이 사용됩니다. 메모리 여러개를 교체하기 

쉽도록 모듈로 구성한 것입니다.

 

 

(그림1 - 컴퓨터용 메모리 - 출처 wikipedia)

 

그렇지만 임베디드 메모리는 위의 램 하나하나를 각 부품형태 그대로 

판매하므로 칩형태로 판매됩니다.

ICBANQ의 메모리 카테고리를 살펴보면 다음과 같은 카테고리로 메모리가 분류되어 

있습니다.

(그림0 - icbanq 사이트의 메모리 카테고리)

 

다음은 컴퓨터에 사용되는 메모리를  종류를 나열한 표입니다.

https://ko.wikipedia.org/wiki/%EB%B0%98%EB%8F%84%EC%B2%B4_%EB%A9%94%EB%AA%A8%EB%A6%AC

메모리는 휘발성 메모리와, 비휘발성 메모리로 크게 나뉘어 지는데 각각 

RAM, ROM으로 불리웠었습니다.

 

대체적으로 RAM은 속도가 빠르며 그 수명이 반 영구적이고, ROM은 읽기 속도는 

RAM과 거의 비슷하지만 쓰기 속도가 느린 특징을 가지고 있습니다. 

그렇지만 현재는 RAM 이면서도 비휘발성인 메모리가 존재하며 (f-ram), ROM 이면서도 

쓰기 속도가 그다지 느리지 않은 메모리 (EEPROM Flash memory중 일부) 또한 

존재하기 때문에 휘발성 메모리, 비휘발성 메모리의 구분없이 그냥

ICBANQ 내부의 카테고리를 각각 설명드리겠습니다.

 

< DRAM >

휘발성 메모리의 대표적인 것이 dram 입니다. 

지난번에 설명드린 MCU에 사용된 휘발성 메모리는 sram 이었는데 어떤 차이가 있을까요?

DRAM 은 dynamic random access memory 의 약어이고, SRAM은 

static random access memory의 약어 입니다. dynamic vs static 의 차이네요..

둘다 전원을 차단하면 저장된 내용이 사라지는 공통점이 있습니다만 d-ram은 저장된 

내용을 유지하기 위해서 메모리를 끊임없이 계속적으로 액세스 해 줘야(dynamic) 하는 

반면에 s-ram은 저장된 내용을 유지하기 위해 외부에서 별도로 해 주어야 하는 작업이 

필요 없습니다. 

그렇다면 d-ram보다 s-ram이 항상 좋은것 같지만 그렇지는 않습니다. 

d-ram에 쓰이는 반도체는 다음회로처럼 1개의 capacitor와 1개의 TR이 필요합니다.

따라서 1 bit를 1cell 에 저장할 수 있으며 이때 capacitor 에 저장된 전하는 

시간이 지나면서 방전이 됩니다. 따라서 기록된 내용을 유지하기 위해서 

내부의 capacitor의 방전를 주기적으로 재 충전해 주는 refresh라는 작업이 필요합니다.

 

하지만 s-ram에 쓰이는 반도체는 다음회로에서처럼 6개의 TR이 필요합니다.

내부의 플립플롭에 1 비트가 저장이 되며 플립플롭은 외부 입력이 없이 저장된 비트를 

유지할 수 있습니다. 그렇지만 기록 밀도는 d-ram보다 낮습니다.

d-ram 은 외부에서 추가적인 회로가 필요하지만 같은 면적에 더 큰 용량을 만들수 

있으므로 일반적인 데스크탑 컴퓨터에서는 (더 큰 용량을 얻기 위해서) d-ram이 

많이 쓰입니다. 일부 속도가 필요한 경우에만 s-ram이 쓰이고 있습니다. 

물론 가격도 d-ram이 s-ram에 비해서 훨씬 저렴합니다.

 

그렇지만 MCU에서는 d-ram보다 s-ram이 주로 쓰입니다. (데스크탑 컴퓨터와 비교하여) 

MCU 자체의 크기가 작을 뿐만아니라 코드 프로그램의 크기도 작고, 

수행되는데 필요한 메모리의 용량도 크지 않기 때문에 사용하기 편리한 

s-ram 이 내장된 것입니다. 

 

램에 읽고 쓰는 작업은 MCU내부에서 일어나는 일이므로 외부에서 특별하게 부가해야 

하는 회로가 없기 때문에 MCU에서는 d-ram 보다 s-ram이 적합합니다.

 

d-ram은 데스크탑 컴퓨터의 발전과 더불어 발전을 하였습니다. 

위의 표에서 살펴본바와 같이 EDO DRAM, SDRAM, DDR SDRAM. DDR2 SDRAM. DDR3 SDRAM, DDR4 SDRAM 등이 있고,

 

각각은 EDO DRAM - Extended data out DRAMSDRAM - synchronous DRAMDDR SDRAM - double data rate synchronous dram 의 약어입니다. 

 

이 약어를 잘 유추해 보면 각각의 dram이 가진 특징을 알 수 있고, 그것이 각 램의 

특성이 되겠습니다.

edo dram의 경우 메모리에서 데이터가 출력되면서 다음데이터의 출력을 위한 어드레스 

입력을 받을수 있으므로 속도를 빠르게 할 수 있습니다. 

SDRAM 에서의 synchronous는 성능을 향상시키기 위해서 CPU의 클럭과 연동

(synchronoous)되어있다는 의미이고 DDR의 double data rate 라 함은 클럭과 연동되어 

있으며 전송 속도를 늘리기 위해서 클럭의 상승 및 하강 엣지에서 데이터가 입출력 되도록

한 d-ram 이므로 이론상 같은 클럭에서 sdram보다 2배의 성능향상이 있게 됩니다.

 

< EEPROM >

EEPROM은 Electrically Erasable Programmable Read-Only Memory의 약자로 전기적으로 지우고 새로 쓸수 있는 ROM 입니다.

지난 강좌에서도 설명드렸듯이 전원차단후에도 보존되어야 할 데이터를 

기록하는 용도의 메모리 입니다. 

 

EEPROM은 EPROM의 한 종류입니다. EPROM에는 EEPROM과 UVEEPROM이 있습니다.

 

< EPROM >

EPROM에는 OTP EPROM, EEPROM과 UVEEPROM이 있다고 설명드렸습니다.

예전의 ROM은 한번만 기록할 수 있거나 (OTP ROM) 기록된 내용을 지우려면 

자외선이 필요한 (UVEPROM) ROM 이었습니다.

OTP EPROM 은 one time eprom의 약어로 한번기록후에는 데이터를 지울수 없어 

딱 한번만 기록이 가능한 롬 입니다. 

마치 공씨디 처럼 1회 기록만 가능합니다.

또한 UVEPROM은 EPROM에 저장된 전하를 방전시키기 위해서 자외선을 사용합니다. 

메모리 반도체에 창문이 있는 반도체는 UVEPROM이 유일합니다.

불과 20여전 전에는 현재와 같은 EEPROM , FLASH memory가 상용화 되기 전이었기 

때문에 MCU의 코드 메모리에서도 UVEPROM이 쓰였습니다.  

즉 내용을 재 기입하기 위해서는 자외선 노출을 하고 이후에 재 기입을 해서 

새로운 프로그램을 구동시켰습니다. 

한눈에 봐도 딱 구별되는 외관입니다. 창문이 있는 MCU 반도체네요..^^

 

 

(그림 4 - PIC16C74)

 

그렇지만 EEPROM 및 FLASH memory 기술이 상용화 되면서 UVEPROM은 

현재는 별로 사용되지 않고 있습니다. 

단지 일부 구형 게임기의 롬 업그레이드를 위해서 필요할 뿐입니다. 

현재 생산은 중단되었으나 아직까지도 시중에서 구할 수는 있습니다.

http://www.icbanq.com/P000093113

엄청 비싸네요.. 하나에 오만원!!~ 

 

< FIFO >

FIFO는 first in first out 의 약자로 처음에 들어간 데이터가 처음에 나오는 반도체인데 

엄밀히 말하면 메모리의 종류는 아닙니다. 

UART 등의 데이터 버퍼로 사용되는데 이 카테고리에는 주로 SRAM 들이 있습니다.

 

< Flash Memory >

플래시 메모리는 2000년대부터 사용되기 시작된 비휘발성 반도체 입니다. 

비교적 저렴한 가격에 높은 기록 밀도를 가지고 있어서 현재의 메모리 반도체의 

주류이며 대용량 보조기억 저장매체로도 많이 쓰이고 있습니다.

워낙 종류가 많고 방대하기 때문에 다음에 다시 자세히 설명드리겠습니다.

 

아무튼 최근 임베디드 MCU의 내장 메모리는 거의 전부 Flash memory라 보심 됩니다.

임베디드 MCU등에서 EPROM이 사용된 모델은 대개 C(CMOS)의 약어를 쓰고 

Flash 기술을 사용한 반도체는 F(Flash)의 약어를 사용합니다. 

PIC16C72, PIC12F675 처럼 말이죠...

 

< FRAM >

FRAM (F-RAM) 은 Ferroelectric Random Access Memory 의 약자로 

d-ram의 단위 cell 에 사용되는 capacitor를 강 유전체 물질을 사용하여 

비휘발성을 가지도록 한 메모리로 비교적 최근에 개발되었으며 따라서 속도도 빠릅니다. 

물론 비교적 최근의 기술이라서 메모리당 가격도 비싸네요..

 

< NVRAM >

NVRAM 은 NVSRAM의 다른 말입니다. non-volatile static random-access memory의 

약어로 실제로는 s-ram 이지만 s-ram의 외부에 몇가지 부가 회로를 추가하여 

전원이 차단 되어도 기록된것이 유지되도록 하게 한 반도체 입니다.

따라서 s-ram과 동일한 동작속도를 가지며 데이터는 10년간 보존을 보증한다고 하네요..

이정도면 non volatile이라 불릴만 합니다.

 

반도체 칩의 내부에 S-ram과 EEPROM이 존재하네요.~ 따라서 전원이 차단되면 

s-ram의 내용을 EEPROM으로 옮겨 보존하고 전원이 들어오면 EEPROM의 내용을 다시 

s-ram으로 옮겨 옵니다. 뭔가 CPU나 MCU가 해야 할 일을 대신해 주는 편리한 ram 이네요

 

(그림 5) 

출처 http://www.cotsjournalonline.com/articles/print_article/100709


< SRAM >

S-RAM은 위에서 D-RAM을 설명드릴때 같이 설명드렸으므로 다시 설명드리지는 

않겠습니다.. 임베디드 MCU의 내부 레지스터나 내부 메모리로 많이 사용되며 

특수한 경우에(캐시 메모리) 데스크탑의 메인 메모리로도 사용됩니다.

 

< ROM >

위에서 ICBANQ 의 반도체 메모리 카테고리를 설명드리면서 비휘발성 메모리인 

ROM 종류도 포함하여 설명드렸으므로 다시 설명드리지는 않겠습니다.

 

메모리 반도체는 RAM, ROM의 구분외에도 액세스 방법에 따라 시리얼 메모리와 패러렐

메모리, I2C형, SPI형 등등이 있고, 전압, 속도에 따라서도 다양한 모델이 존재합니다.

따라서 최소한의 배선으로 최적의 메모리를 선택하기 위해서는

 

여러가지 요구사항들을 다 고려 해 보는것이 좋겠습니다.

devicemart 사이트에는 ICBANQ 사이트보다 카테고리별로 잘 세분화가 되어있으므로 

한번 참고해 보시면 좋을 것 같습니다.

http://www.devicemart.co.kr/goods/list.php?category=001021004

이번에는 임베디드 MCU의 외장 메모리 종류에 대해서 

간략히 알아 보았습니다.

메모리에대한 간략한 이해가 되셨는지요?

 

그럼 이번 강좌를 마치도록 하겠습니다. 

감사합니다~~

 

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


신고

임베디드 기초강좌 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 (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]

신고

임베디드 기초 강좌 5 부록 - 여러종류의 clock source

임베디드 기초 강좌 5 부록 - 여러종류의 clock source

 

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

 

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

 

 

글의 내용은 http://blog.naver.com/jimypage 에서도 확인하실수 있습니다.

 

 

지난번에는 임베디드 MPU를 다루는데 있어서 심장부가 되는 클럭에 대해서 알아보았습니다.

 

이번에는 임베디드 기기에서 클럭 소스로 사용될 수 있는 회로나 부품은 어떤것이 

 

있는지 알아보고 각각의 장단점을 살펴 보도록 하겠습니다.

 

될수있으면 고 정밀도의 고성능 부품을 사용하면 좋겠으나 각각 비용과 효율성 측면이 있으므로

 

여러가지를 다 알고 있다면 선택에 도움이 되리라 생각해서 글을 써 보았습니다.

 

 

 

 

클럭소스는 임베디드 보드에서의 프로그램이 일정한 시간으로 수행되는데 

 

필요한 클럭을 제공하는 발진 회로를 의미합니다.

 

CPU, MPU가 등장하면서 프로그램을 순차적으로 수행하는데 클럭은 필수적인 요소가 되었지만

 

임베디드 프로그래밍 또는 컴퓨터의 사용전에도 발진회로는 많은곳에서 쓰였습니다.

 

그중 대표적인것이 라디오 전파의 송 수신용도였습니다. 반송파를 만드는데 발진회로가 필요하기 

 

때문이었습니다.

 

 

 

 

최초의 발진소자는 수동소자의 성질에 의해서 발명이 되었습니다.

 

저항, 커패시터, 인덕터등의 수동소자들중 저항을 제외한 두 소자는 

 

각각 전압의 변화에 대해서 저항이 커지는 성질과 저항이 작아지는 성질을 가지고 

 

있습니다. 이러한 커패시터와 인덕터를 병렬로 배치한 후 전원이 차단되면 커패시터에서 

 

충전된 전하는 인덕터를 거치면서 자기장을 형성하여 유도 기전력을 만들고 

 

커패시터의 방전이 이루어진 경우 유도 기전력은 다시 커패시터를 충전시키는 현상을 

 

반복함으로써 발진을 하게 됩니다.

 

https://en.wikipedia.org/wiki/LC_circuit

 

 

 



 

 

이러한 현상을 이용하여 몇몇 발진기들이 발명되었는데 수동소자의 경우 에너지의 소모를 

 

보충할 방법이 없기 때문에 중간에 능동소자인 트랜지스터를 추가하여 계속적으로 발진하는

 

발진기를 만들 수 있었습니다. 

 

콜피츠 발진기, 클랩 발진기, 하틀리 발진기 등이 이러한 종류의 발진기에 속합니다.

 

 

 

 

 

 

 

 

http://www.wizmac.com/2015/lecture/board01_view.htm?No=4&Sub_No=8

 

(위의 사이트에서 그림을 가져왔습니다)

 

 

또한 멀티 바이브레이터 회로를 이용하여 발진을 시킬수도 있습니다.  이것은

 

두개의 트랜지스터가 각각 성질이 다르다는 점에 착안하여 각각의 트랜지스터가 

 

점멸을 반복하여 발진을 하게 됩니다.

 

 

 

 

 

 

 

http://efxkits.com/blog/multivibrators-types-and-thier-working/

 

 

그렇지만 수동소자를 사용하는 위의 발진기들의 경우에는 수동소자의 성질이나 온도등의 

 

변화에 민감해서 그 정밀도가 매우 떨어지는 단점이 있었습니다.

 

초기의 발진기는 라디오등의 방송에 사용되었는데 라디오 방송의 반송파의 주파수가 

 

정확하지 않아서 반송파의 정확한 발진 주기를 만드는 것이 큰 문제가 되었습니다.

 

그래서 이것을 튜닝해 주는것이 큰 문제였다고 합니다.

 

 

현대의 발진기가 발명된것은 1880년 압전현상의 발견으로 거슬러 올라갑니다. 

 

 

 

 

 

 

(압전 현상 - 출처 위키피디아)

 

 

 

 

압전 현상이란 물질에 물리적인 에너지가 가해지면 분극이 일어나는 현상으로 

 

물질에 전기에너지가 가해지면 물리적인 변형이 가해지며 이것이 되돌아가는 과정에서 공진

 

현상을 일으킬 수 있는데 수정(crystal)이 대표적인 물질입니다. 

 

https://en.wikipedia.org/wiki/Crystal_oscillator

 

수정 발진자의 경우 위에서 설명한 LC 공진기나 멀티바이브레이터 등과는 달리 온도나 주위환경과는 

 

무관하게 고유한 진동을 일으키며 이 진동의 진동수는 전적으로 수정편의 두께나 결정방향에 

 

의존합니다.  따라서 정밀한 클럭소스로 사용할수 있습니다.

 

 

 

 

 

시계에 사용되는 수정 발진자 

 

 

 

 

 

 

 

시골집이나 옛날 드라마에서 나오는 '괘종시계'는 태엽에 감긴 에너지를 진자의 움직임으로 

 

바꾸어 이것을 이용해서 시간을 표시하는 시계입니다. 

 

 

단지 진자의 기계적인 움직임으로 시간을 측정하는 장치였기 때문에 오차가 많다는 것은 

 

당연한 것이었습니다. 

 

 

그렇지만 수정 발진자가 상용화 되면서 이러한 괘종시계보다 정밀도가 우수한 '쿼츠 시계'가 

 

널리 사용되게 되었습니다. 

 

 

'쿼츠 시계'란 수정발진자를 이용해서 정확한 시간을 표시한 아날로그 시계를 의미합니다.

 

 

 
 

 

이러한 수정 발진기의 상업적인 이용은 1910년 후반부터 이루어 졌습니다.

 

최초의 수정발진자는 천연 수정을 얇게 잘라내어서 사용하였으나 

 

정확한 주파수를 생성하기 위해서 인공적으로 순수한 수정을 결정화 하는 기술이 발명되어서

 

오늘날의 수정 발진기는 전부 인공적인 수정으로 만들어 지고 있습니다.

 

 

 

 

 

 

 

(수정 발진자 그림)

 

 

따라서 주위환경의 변화에 무관하게 대단히 고 정밀도의 클럭을 얻을 수 있게 된것입니다.

 

그렇지만 수정 발진자에도 단점이 있는데 수정편을 무한정 얇게 만들수는 없으므로 

 

현재의 기술로는 50Mhz 정도까지가 발진 한계로 인식되고 있습니다.

 

수정발진자가 진짜 수정이 맞을까요?? 

 

뜯어보면..  

 

 

 

진짜로 수정 판이 들어 있네요.. ㅎㅎ

 

 

 

 

 

 

(수정발진자의 내부)

 

 

 

 

압전현상을 이용하는 또다른 발진기로는 세라믹 발진기 (ceramic resonator)가 있습니다.

 

세라믹의 경우에도 압전현상으로 발진을 일으키지만 수정 발진기보다는 좀 덜 정확합니다.

 

그러나 가격이 저렴하다는 장점이 있습니다.

 

 

 

 

 

 

(세라믹 레조네이터)

 

 

발진기의 발진을 일으키기 위해서는 계속적인 전기 자극이 필요합니다. 이러한 전기 자극을 

 

주기 위해서는 수정발진자 주위에 회로가 필요한데 이러한 회로를 하나로 패키지화하여 

 

모아 놓은것을 오실레이터라고 합니니다. 

 

 

 

(오실레이터 그림)

 

 

 

오실레이터는 주변 회로가 간단해지고, 정확하다는 장점이 있어 전자회로의 클럭소스로 

 

많이 쓰입니다.

 

 

 

우리가 임베디드에 사용하는 클럭의 경우에도 위의 여러가지 발진 회로를 사용할 수 있습니다.

 

대개는 수정 발진자를 사용하나 그밖에도 목적에 맞는 다양한 구성으로 클럭을 

 

생성할 수 있도록 하고 있습니다.

 

단지 클럭 입력핀의 양단에 각각 수정발진자나 기타 클럭원과 연결만 하면 

 

MPU 안에 내장되어 있는 나머지 부품과 함께 발진을 하기 때문에   

 

간단하게 클럭을 구성할 수 있습니다. 

 

 

 

AVR의 클럭 설정부분을 참고하면, 몇가지 종류의 클럭소스를 선택 할 수 있습니다.

 

(단 각각의 클럭 소스나 주파수에 따라서 사용되는 수동 소자가 다르기 때문에 

 

MPU의 퓨즈 비트에는 어떤 클럭소스가 사용되었는지 설정하는 비트가 존재 합니다.

 

주의 !! 퓨즈비트의 값을 잘못 설정하면 MPU는 작동을 하지 않습니다.)


클럭소스의 결정은 클럭이 발생하기 이전에 결정되어야 하는 것이기 때문에 

 

MPU 내부의 프로그램으로는 이것을 설정할 수 없고, 퓨즈비트라는 설정용 비트에 그 

 

종류가 설정되어 클럭의 소스로 사용됩니다.

 

http://www.electroschematics.com/9481/avr-clock-source-fuse-bits/

 

 

 

 

 

 

(AVR MPU의 다양한 클럭소스)


 

마찬가지로 AVR 이외의 다른종류의 임베디드 MPU의 경우에도 위에서 설명한 발진기들을 

 

포함한 다양한 클럭소스로부터 클럭을 생성해 낼수 있습니다. 

 

MPU 내부에 클럭 발진에 사용되는 회로를 

 

내장하고 있기 때문에 굳이 비싼 오실레이터를 쓰지 않고도 수정발진자만으로도 정밀한  

 

클럭을 생성할 수 있습니다.

 

(예전의 CPU들이나 MPU의 경우에 클럭 입력핀이 하나밖에 없는 경우가 있는데 이러한 

 

경우에는 수정발진자에 발진 회로를 구성하고 이 출력을 클럭 입력에 입력 해야 했습니다.

 

즉 부가회로가 더 필요했습니다.)


 

 

또한 최근의 MPU나 FPGA의 경우 RC 수동소자로 구성된 발진 회로가 이미 내장되어 있어서 

 

외부 클럭이 없이도 초기의 값을 읽어들이거나 프로그램을 실행할 수 있습니다. 이러한 경우에는 

 

MPU는 외부모듈이 하나도 없더라도 원하는 동작을 수행할 수 있습니다. 

 

- internal rc oscillator

 

ex) ATTiny 시리즈 혹은 PIC시리즈중 일부

 

 

 

MPU의 클럭은 상한선은 있으나 하한선은 거의 없기 때문에 

 

목적에 따라 필요한 클럭소스나 주파수를 선택할 수 있습니다.

 

대개는 레퍼런스에서 사용된 클럭 주파수를 사용하나 전원관리가 중요한 경우 

 

클럭을 좀더 낮추어 사용하기도 합니다.

 

 

 

 

클럭에대해서 어느정도 감이 잡히셨는지요?

 

이번에는 MPU의 클럭원으로 사용되어지는 다양한 발진회로에 대해서 알아 보았습니다.

 

읽어 주셔서 감사합니다.

 

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

 

관련 제품

 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P000360693

 

http://www.icbanq.com/P000362952/S

 

http://www.icbanq.com/P000541714

 

 

 

 

 

참고 사이트

 

https://www.sparkfun.com/tutorials/95

 

https://www.maximintegrated.com/en/app-notes/index.mvp/id/2154

 

 

신고

임베디드 기초 강좌 5 - clock


임베디드 기초 강좌 5 - clock

 

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


 

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

 이번에는 임베디드 MPU를 다루는데 있어서 심장부가 되는 클럭에 대해서 알아보겠습니다.

 일반적인 TTL등의 descrete IC를 이용하는 전자 기기에서는 클럭이 필요하지 않은 경우도 

 많이 있습니다만 임베디드 MPU를 제어하는데는 정해진 순서대로 프로그램이 

 수행되어야 하는데 이러한 프로그램이 정확한 시간에 수행되기 위해서 

 클럭은 필수적인 요소가 됩니다.

 

 

 

단순한 키트류의 부품또는 CPLD나 FPGA를 제외하고 프로그램이 수행되는 모든 전자기기에는

 클럭이 존재합니다. 

 

 

 

일반적으로 똑같은 MPU를 사용하는경우에 클럭이 빠르면 명령어의 수행이 

 더 빠르게 이루어 지게 됩니다. 즉 6Mhz로 동작하는 회로에서 12Mhz로 동작하도록 

 클럭을 변경하게되면 모든 작업들이 2배로 빨리 실행되게 됩니다.

 (그렇지만 MPU의 정해진 한계클럭이 존재하기 때문에 

 무한정 클럭을 올릴수는 없고 또한 클럭이 올라감과 더불어 소비전력도 비례하여 

 늘어나기 때문에 모바일 기기에서는 될수있으면 똑같은 작업을 하더라도 적은 클럭으로 

 작업을 수행하는 것이 유리합니다.) 

 

 

클럭의 소스로 쓰이는(클럭을 발생시킬수 있는) 부품에는 몇가지종류 또는 회로가 존재합니다.

 (다음회에는 클럭의 원천이 되는 몇 종류의 부품 또는 회로에 대해서 알아 보겠습니다)

 아두이노같이 이미 부품이 실장된 전자 회로의 경우 다음의 모양처럼 생긴 부품들을 본적이 

 있을 것입니다.  

 



 

(그림1. 세라믹 레조네이터 와 수정 크리스탈)

 

 

 

 

아두이노 uno등에서는 2종류의 클럭이 사용되고 있습니다. 

 (하나는 USB 통신용, 하나는 메인 칩용입니다.)

  



 

그림에서의 길고 흰모양의 부품이 Quartz crystal 이라고 하는것으로 비교적 정밀한

 주파수의 클럭을 얻을수 있는 부품인 반면에 ATMEGA chip 바로 위쪽의 작은 부품은 

 ceramic resonator 라 불리는 부품으로 Quartz crystal(수정발진자) 보다는 정밀도가 

 떨어지지만 RC, LC 발진회로보다는 비교적 정밀도가 높기 때문에 

 중등도 타이밍회로, 또는 정확한 타이밍이 요구되지 않는 전자 회로에서 많이 이용되는 

 부품입니다.

 

MPU에서 클럭은 명령을 수행할 때의 타이밍의 기준이 됩니다.

 MPU내부에서 명령을 가져오고 해석하여 최종적인 명령이 수행될때 각각 한클럭씩 소요가 되나

 최근의 MPU들은 명령 인식과 해석및 실행단계에 파이프라인이라는 처리과정을 거쳐서 

 - 각 파이프라인이 각각 독립적으로 작동하여- 파이프라인이 한클럭에 한꺼번에 실행됩니다.

 

 

  

 클럭   

   클럭   

           클럭   

     클럭  

    클럭

 명령을 가져옴

 명령의 해석 

 명령의 수행

 

 

 

 명령을 가져옴

 명령의 해석

 명령의 수행 

 

 

 

 명령을 가져옴

 명령의 해석

 명령의 수행

 

 

      <특정 순간>

 

 

 

 

위와 같은 과정이 무한히 반복됩니다.

 위처럼 3번째의 세로줄을 살펴보면 명령가져오고 해석과 수행이 한번에 이루어져서 

 거의 모든 명령이 한클럭에 실행이 되도록 하고 있습니다. 

 (단 MPU내에는 인터럽터 처리등의 회로가 부가되기 때문에 엄밀히는 위보다 더 많은 

 단계의 파이프라인 처리부분이 존재합니다. 

 

마찬가지로 코드의 분기명령어는 분기후 파이프라인이 재 설정되므로 이런 경우에는 명령이 

 한 클럭으로 완료되지 않습니다.)

 

 

아두이노에서 쓰이는 AVR 계열의 MPU는 레지스터 제어 명령이 1클럭에 수행이 되며 

 분기명령및 기타 메모리관련 명령은 2클럭에 수행됩니다.

 마이크로칩사의 PIC 계열의 경우에는 분기명령을 제외한 모든 명령이 4클럭에 수행이 되며 

 분기명령만 8클럭에 수행이 됩니다. 

 

(타이밍을 맞추는데는 AVR보다 PIC이 좀더 수월합니다. 하지만 PIC계열은 AVR보다 4배나 빠른 

 클럭을 사용해야 합니다.)

 

(물론 C 언어로 프로그래밍을 하는경우에는 각각 컴파일된 코드의 길이가 다르므로 

 정확한 타이밍이 요구되는 경우에는 AVR이던, PIC이던 직접 어셈블리로 

 코드를 작성하여 타이밍을 맞추어야 합니다.)

 

 MPU를 이용해서 일정한 주파수의 소리를 발생시킨다거나, 아니면 UART 시리얼 등으로 

 타 주변기기와의 통신을 하는경우에는 정확한 클럭이 필요하게 되는데, 이때 MPU는 

 클럭에서 발생된 기준클럭을 두배 혹은 세배, 아니면 n 배를 해서 기준클럭의 

 배수가 되는 더 느린 클럭을 만들어서 각종 내부 제어회로에 이용하게 됩니다.

  

MPU내부에서 클럭이 사용되는 경우는 일반적으로 다음과 같습니다.

 

UART, PWM, 카운터, 타이머

 이중 카운터 타이머의 경우에는 정해진 숫자의 값을 카운트 다운 또는 카운트 업 하여 

 정해진 숫자에 도달하면 인터럽트를 발생시켜 필요한 동작을 수행합니다.

 이렇게 하면 모든 IO 핀을 매번 모니터링 하거나 일일히 

 명령의 instruction cycle을 계산하지 않고도 정확한 시간에 정해진 작업을 수행할 수 있습니다.

 

즉 예를 들자면 아두이노등에서의 sleep명령처럼 아무일도 하지 않고 노는 시간에 다른 일을 

 할 수 있는것 입니다.

 

타이머는 대개 내부의 기준 클럭이 일정한 시간에 발생하는 클럭 펄스에 의해서 동작하며

카운터의 경우 외부의 펄스변화를 인식하여 각 펄스가 정해진 갯수가 되는 경우에 인터럽트가

발생합니다.

마찬가지로 UART의 경우에는 전송되는 데이터 값을 어느정도 시간동안 유지해야 하는지를 

결정하는데 클럭이 사용되며

PWM의 경우에는 펄스폭의 길이를 결정하는데 클럭이 이용됩니다. 

 

이때 기준 클럭보다 엄청나게 긴 시간동안의 카운팅이 일어나야 하는데 

프리스케일러라는 내부 회로를 두어서 클럭을 2배 4배 또는 심지어 256 배 정도 까지의 긴 

 

시간동안을 한 단위로 하여 타이밍을 맞추는 데 사용하고 있습니다.

 

설명을 위해서 다음과 같은 프로그램을 봅시다.

 

 

// the setup function runs once when you press reset or power the board

void setup() {

  // initialize digital pin 13 as an output.

  pinMode(13, OUTPUT);

}

 

// the loop function runs over and over again forever

void loop() {

  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)

  delay(1000);              // wait for a second

  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW

  delay(1000);              // wait for a second

}


 

 

위의 예제는 아두이노의 블링크 예제 입니다. 

 

LED를 점등하고 1초를 기다리고, 또 소등하고 1초를 기다리는 프로그램입니다.

 위 프로그램은 기다리는 동안 아두이노는 아무일도 못하고 단지 기다리기만 할 뿐입니다.

 (이러한 루프를 idle loop라고 부릅니다.)

 그렇지만 인터럽트를 이용하면 

 

 

 

// avr-libc library includes

#include

#include

#define LEDPIN 13

 

void setup()

{

pinMode(LEDPIN, OUTPUT);

// initialize Timer1

cli();         // disable global interrupts

TCCR1A = 0;    // set entire TCCR1A register to 0

TCCR1B = 0;    // set entire TCCR1B register to 0 

               // (as we do not know the initial  values) 

 

// enable Timer1 overflow interrupt:

TIMSK1 | = (1 << TOIE1); //Atmega8 has no TIMSK1 but a TIMSK register

 

// Set CS10 bit so timer runs at clock speed: (no prescaling)

TCCR1B |= (1 << CS10); // Sets bit CS10 in TCCR1B

// This is achieved by shifting binary 1 (0b00000001)

// to the left by CS10 bits. This is then bitwise

// OR-ed into the current value of TCCR1B, which effectively set

// this one bit high. Similar: TCCR1B |= _BV(CS10);

 

// enable global interrupts:

sei();

 

ISR(TIMER1_OVF_vect)

{

 

digitalWrite(LEDPIN, !digitalRead(LEDPIN));

// or use: PORTB ^= _BV(PB5);// PB5 =pin 19 is digitalpin 13

}


 

 

 

이렇게 작성할 수 있고, 뭔가 조금 복잡해 보이기는 해도 

 노는 시간동안 아두이노는 다른 유익한 일을 할 수가 있습니다.

 

 

임베디드 프로그래밍도 최적화를 잘 하면 더 상위의 MPU를 쓰지 않고도 원하는 작업이 가능합니다.

 즉 임베디드 하드웨어를 잘 이해하면 이해할 수록 효율적인 프로그래밍이 가능하다는 것입니다.

 

이야기가 길어져서 

 클럭 설명드리다가 인터럽트, 타이머까지 간단히 설명을 드리게 되었습니다.

 모든 제어회로의 기준 시간이 된다는 사실을 말씀드린것 이구요..

 

 

암튼 ..

 

결론적으로 말씀드리면 임베디드 기기에서는 클럭을 선정할때 전원의 소모, 프로그램의 수행시간, 

 그리고 심지어는 UART회로, PWM회로 타이머, 카운터의 거의 모든 회로가 영향을 받기 때문에

 기준클럭을 선정해야할 때 목적에 맞는 최적의 클럭을 선정하도록 해야 합니다.

 

  

예전에는 임베디드 프로그래밍을 할때는 UART통신을 하기 위해서 클럭이 바뀔때 마다 

 통신 제어 레지스터에 일일히 계산을 해서 계산된 값을 입력해 줘야하는 불편함이 있었습니다만

 요즘은 대개 정해진 클럭을 사용하는 상용화 제품들이 많고 (아두이노의 경우에 기준클럭은 16Mhz 

 입니다.) 또한 각 칩마다 클럭에 따라 각각의 계수들을 계산해 주는 도우미 어플리케이션이 

 많이 있어서 

 

(예를 들자면 PIC - http://www.nicksoft.info/el/calc/?ac=spbrg 

 AVR - http://wormfood.net/avrbaudcalc.php

 등의 사이트)

 

현재는 예전처럼 클럭 제어 레지스터를 직접 다루어야 하는 일은 많지 않아졌습니다.

  

이번에는 클럭을 바꿀때 프로그램도 바뀌어야 한다는 것만 알고 가시면 될것 같습니다.

  

도움이 되셨는지요 ??

  

많은 도움이 되셨기를 바라며 이번회의 강좌를 마치도록 하겠습니다.

  

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


 

 

참고 사이트

 

 

http://www.nicksoft.info/el/calc/?ac=spbrg 

 

http://wormfood.net/avrbaudcalc.php

 

https://www.arduino.cc/en/Tutorial/Blink

 

https://arduinodiy.wordpress.com/2012/02/28/timer-interrupts/

 

 

 

참고 부품

 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P000360693

 

http://www.icbanq.com/P001943166/S

신고

임베디드 기초 강좌 4 부록 - ARM MCU 실습해 보기..

 

 

 

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

되었습니다]

 

 

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

 

지난시간에는 임베디드 분야의 새로운 트렌드인 ARM 코어에 대해서 살펴 보았습니다. 

 

이번에는 ARM코어를 사용한 MCU를 간단히 리뷰해 보고, 

 

코딩하는 방법에 대해서 알아 보겠습니다.

 

ARM 코어가 내장된 시기는 이미 임베디드 분야에서도 MCU의 내장 메모리가 상당히 

 

커진 관계로 어셈블리 언어를 이용할 필요가 별로 없어 졌습니다. 

 

그래서 속도가 필요한 몇몇 루틴을 제외하고는 대부분의 코드를 C 또는 C++로 작성을 

 

하게 됩니다. 

 

예전에는 ARM 코어를 사용한 임베디드 보드를 이용해서 프로그래밍을 하기 위해서는

 

먼저 ARM코어 전용의 업로드 툴을 준비하고, 부트로더부터 작성하고 

 

그이후에 C 런타임 환경을 만든뒤에 C언어의 main루틴을 실행하였습니다.

 

대부분의 칩 제조사에서는 자사의 MCU나 CPU에 맞는 부트 코드를 제공해 주며 

 

또한 프로그래밍에 필요한 컴파일러나 디버깅 툴은 ARM사에서 제공을 해 주었습니다.

 

그런데 ARM사에서 발매한 컴파일러는 성능은 매우 뛰어나지만 가격또한 매우 비쌉니다.

 

마찬가지로 ARM사에서 판매하는 디버깅 도구인 TRACE32 역시 수천만원을 호가하는 

 

매우 고가의 장비라서 임베디드 프로그래밍이 초기투자에는 

 

윈도우 프로그래밍보다도 비용이 더 많이 들었습니다.

 

그렇지만, ATMEL 칩에서와 마찬가지로 GCC

 

(gnu compiler collection - gnu 에서 만든 컴파일러 셋입니다.)컴파일러가   

 

ARM용으로 개발이 되어 무료로 사용할 수 있게 되었고, 또한 저렴한 JTAG 디버거가 발매되어서 

 

개인 개발자도 고성능 임베디드 코어를 이용할 수 있게 되었습니다.

 

이번에 리뷰해볼 Nucleo-F401RE 개발보드는 STMicroelectronics에서 발매된 개발보드인데

 

http://www.icbanq.com/P005661371/S

 

 

 

 

 

 

 

가격이 무려 ... 

 

 

14000원입니다. -,.-

 

14만원이 아니에요.. 개발보드 안에 ST-LINK라는 디버깅및 업로드 툴까지 내장하고도 가격이 

 

저렇습니다.

 

32비트 ARM코어를 내장하고 디버거까지 내장된 개발보드가 아두이노보다 쌉니다.~ 

 

심지어는 아두이노 실드와 호환이 되는 female 핀까지 있어서 - 약간은 수고스러우나 - 

 

프로그래밍을 해 주면 아두이노 실드도 이용할 수 있습니다.

 

아두이노의 경우에는 디버거가 없어서 코드 추적이 불가능한데요... 

 

이것은 가능합니다. 변수 확인도 가능하죠..

 

그렇다면 개발환경이 열악하냐.. 하면 그것도 아닙니다.

 

https://developer.mbed.org/

 

개발도구를 설치할 필요도 없이 그냥 온라인으로 개발이 가능합니다. @.@

 

간단한 개발에는 도구를 설치하느라 걸리는 시간이 거의 없는것 입니다.

 

(물론 개발도구를 설치해서 오프라인으로 개발도 가능합니다. 

 

오프라인으로 개발을 하면 디버깅및 코드 추적이 가능해 집니다.)

 

이번에는 먼저 간단하게 온라인 개발도구를 이용해서 개발을 해 보도록 하겠습니다.

 

기본 사이트에 들어가시면 

 

http://www.mbed.org/

 



(그림1)

 

ARMmbed라고 써있네요. 예전에는 그냥 mbed만 써 있었는데...

 

(ARM사에서 mbed 사이트의 혁신적인 면을 보고서 파트너 쉽 관계를 맺었다고 합니다.)

 

그리고 오른쪽 위의 실제 개발자 사이트로 넘어가는 버튼을 누르면..

 

다음과 같은 개발자 화면이 나옵니다.

 

https://developer.mbed.org/

 

(그림2)

 

여기서 등록을 하시고, 왼쪽 위쪽의 platforms 항목을 눌러서 내가 가진 개발보드를 

 

추가하면 이 개발보드에 맞는 결과물을 얻을 수 있습니다.

 

 

한눈에 보기에도 많은 개발보드를 지원하는 것을 알 수 있습니다.

 

여기서 다시 오른쪽 위의 compiler 버튼을 클릭하면 온라인 IDE 개발도구를 실행시킬수 있습니다.

 

 

 

(그림4)

 

IDE개발도구에서는 내 컴퓨터에 설치된 일반 IDE개발도구를 쓰듯이 그냥.. 쓰시면 됩니다. 

 

NEW를 눌러서 새로운 프로젝트를 만들면 기본적인 템플리트를 지정해 줄 수 있습니다. 

 

 

저는 화면에서 보듯이 일단 LED를 깜박이기 위해서 neucleo_blink_led라는 항목을 선택했습니다만 

 

이 밖에도 I2C나 SPI및 PWM등의 제어에 필요한 예제들을 제공해 주므로 가장 적당한 템플리트로 

 

먼저 시작하시면 됩니다.

 

그리고 여기서 프로그램을 작성한 후 compile 버튼을 누르면 컴파일이 진행 되고 

 

 

 

 

 

 

(그림4)

 

(물밑에서 일어나는 작업들은 알 필요가 없습니다. 개발보드에 맞는 부팅 환경은 사이트에서

 

 다 알아서 해 주죠.)

 

브라우저에서 생성된 binary code 결과물을 다운로드 받게 됩니다. 

 

 

 

 

 

위에 다운로드 받은거 보이시죠??

 

이 결과물을 내가 가진 개발보드에 올리면 바로 실행이 가능합니다.

 

참 쉽죠?? ㅎ ㅎ 

 

처음에는 별로 안쉽더라도 몇번 해 보면 금방 쉬워질 겁니다. ㅡ,.ㅡ

 

쉬운 방법을 알아야 임베디드 개발의 좀더 깊은 곳으로 들어 갈 수 있습니다.

 

이번시간은 여기까지 마치겠습니다. 

 

위에 말씀드린 개발보드가 아니더라도 저렴한 개발보드를 하나 구입해서 실습 해 보시기를 

 

당부드립니다. 

 

감사합니다. ~~

 

 

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 

 

아이씨뱅큐의 지원을 받아 작성되었습니다]

 

 

신고

임베디드 기초 강좌 4 - 새로운 고성능 임베디드 mcu의 등장

임베디드 기초 강좌 4 - 새로운 고성능 임베디드 mcu의 등장

새로운 고성능 임베디드 mcu의 등장

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 

아이씨뱅큐의 지원을 받아 작성되었습니다]

 

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

지난번에는 본격적인 임베디드 강좌로 CPU의 개발및 MCU의 개발배경, 

그리고 부록 강좌에서는 예전에 사용되었던 AVR, PIC 칩의 대표적인 MCU를 살펴 보았습니다.

이번에는 비교적 최근의 CPU인 ARM의 등장 배경및 대표적인 CPU를 살펴보고 

다음 강좌에서는 실제적인 MCU의 사용을 해 보겠습니다. 

 

90년대 MCU들은 비교적 작은크기와 적은 메모리 그리고 몇 안되는 IO 개수로 단순했었지만

현세대의 MCU는 그 기능이 매우 많고 방대하여 전부 이해하는 것은 시간이 많이 걸리고 

어려운 일입니다.  간단한 작업을 하는데 고성능의 MCU를 쓸 이유는 없을 것입니다. 

그래서, ARM CPU의 등장배경과 현세대의 MCU의 경우 꼭 필요한 분야가 어디인지 

그리고 어떤 곳에서 쓰이고 있는지 간략히 살펴보는 것으로 마무리를 하겠습니다.

 

 

지난시간에는 인텔 4004 CPU 가 개발된 이후 8비트 CPU의 시조가 된 8080이 개발되었고 

이 8080 CPU 가 8비트 CPU의 대표격인 z80의 원조가 되었다는 말씀을 드렸습니다.

오늘은 그 다음의 이야기인 32비트 CPU와 RISC CPU의 개발 배경에 대해서 말씀드리고, 

현세대의 임베디드의 새로운 트렌드에 대해서 말씀드리겠습니다.

 

인텔은 8080개발이후 16비트인 8086 CPU를 개발하게 되었는데 이CPU가 IBM에서 쓰이면서 

시장을 장악하게 되었습니다. 

 

8086이후 속도를 향상시킨 80286 프로세서를 개발하게 되었고, 이후 32비트 CPU인 80386 를 

개발하면서 부터 32비트 CPU의 시대가 열리게 되었습니다.

 

데스크탑 CPU라 하면 거의 인텔 CPU라고 할정도로 개인용 컴퓨터에는 인텔 CPU가 쓰였습니다.

인텔의 CPU는 CISC라는 구조의 CPU인데 하위 호환을 위해서 CPU의 명령어의 길이가 가변이면서 

또한 상당히 많은 명령어 셋을 가지고 있는것이 특징입니다.

 

이러한 CISC구조는 CPU의 명령이 다양하다는 장점이 있지만 전력소비가 많고 

명령 디코딩에 쓰이는 로직이 복잡하기 때문에 소형화가 어렵다는 단점이 있었습니다.

따라서 전력 소모도 크고 발열량도 상당하다는 단점도 함께 존재 했습니다.

 

- CISC : complex instruction set computing - 

 

이때 컴퓨터공학자들이 그 시대의 CPU를 분석해 보니 실제로 코드에서 사용되는 명령어 중 

자주 쓰이는 것은 20% 미만이고 나머지 80%는 거의 안쓰이거나 낮은 빈도로 쓰이고 있다는 

것을 발견하게 됩니다. 

 

그리하여 명령어의 갯수를 줄인 CPU를 개발하게 되었는데 이것이 RISC CPU입니다. 

RISC란 (reduced instruction set computing)의 의미로 제어와 연산에 쓰이는 꼭 필요한 명령어들만 

남겨놓은 것이 특징입니다.

 

미국의 버클리와 스탠포드에서 각각 독자적인 아키텍처를 개발하여 발전시켜 나갔는데 

스탠포드에서 유래한 CPU는 SPARC, POWER CPU가 있습니다. 

주로 그 시대의 중대형급 서버 컴퓨터에서 쓰였습니다.

 

그리고 버클리에서 유래한 아키텍처가 MIPS CPU 입니다. 

MIPS CPU도 중대형급 서버 컴퓨터에 쓰였습니다. 주로 그래픽 작업용 워크스테이션에 쓰였습니다.

데스크탑 시장에는 비록 도전했으나 인텔의 철옹성영역으로 실패를 하였고, 

아이러니하게도 CPU가 소형화 되면서 임베디드 기기및 게임기에 다시 쓰이게 되었습니다. 

90년대 중반 소니의 게임기 플레이스테이션 1이 서버급 CPU가 쓰였다는 광고를 하였는데

3D 폴리곤 처리 기능까지 갖추고도 저렴한 가격에 대 히트를 치면서 성공을 거두게 되었는데 

이때 사용된 CPU가 MIPS core 입니다. 

 

(정확히는 MIPS R3000 32비트 CPU이고 아이러니 하게도 3D 연산에 필요한 

부동소수점 연산 기능은 없습니다. 그래서 3차원 계산시에는 고정소수점 연산기능을 

이용해야 하는 반쪽짜리 3d CPU였습니다.)

 

MIPS 코어는 아직도 32비트 PIC 시리즈에 사용되고 있습니다.

 

 

MIPS CPU는32비트 RISC CPU이지만 어셈블리 명령어가 난해하고, 효율적이지 못한 단점이 

있었습니다. 

 

한편 Acorn이라는 영국회사에서 Acorn 이라는 RISC 아키텍처를 개발하고 자신의 

컴퓨터에 사용을 해 왔습니다만 한때는 잘 나갔으나 당대의 거물 매킨토시나 IBM에 밀려서 

사세가 기울었고, ARM 아키텍쳐를 애플과 VLSI의 조인트 벤처 기업인 ARM 에 팔았습니다. 

 

오히려 이때부터 ARM CPU의 중흥기가 시작이 됩니다. 

ARM사는 스스로 CPU를 생산하지 않고 ARM 코어를 여기저기 라이선스 해 주는 전략으로 

데스크탑 이외의 각 분야에 ARM 코어를 보급하였습니다. 

 

인텔이 데스크 탑 시장을 장악하고 있는동안 ARM은 그 밖의 시장을 장악했습니다.

게임기, 가전제품, 공유기, PDA에 이르기까지 거의 대부분이 ARM 코어를 사용하고 있습니다.

초창기에는 단지 저전력의 32비트 CPU정도로만 인식되던  CPU가 이후 코어 CPU의 속도가 

대폭 향상되어 일반 데스크탑 CPU에 버금가는 저가형 CPU들이 제조 되었습니다.

 

(라즈베리 파이 1, 라즈베리 파이 2에 쓰인 CPU도 각각 ARM V6, ARM cortex-a9 쿼드 코어급 

CPU가 쓰이고 있습니다.)

 

 

  잠깐 다른주제의 내용을 이야기 하겠습니다.

  라즈베리 파이 1,2 의 운영체제로 사용되는 리눅스는 임베디드 리눅스가 아닙니다. 

  그냥 32비트의 완전한 리눅스 입니다.

 

  임베디드 리눅스란 MMU가 없거나 메모리가 부족한 한정된 분야에서 쓰이기 위해서 

  리눅스시스템의 최소부분만을 남긴 리눅스를 의미하는데

  라즈베리 1,2 의 경우 메인메모리 512~ 1GB, 저장장치 2~32GB ARM 32비트 CPU 등을 

  채용하고 있기 때문에 완전한 리눅스 머신으로 볼수 있으며

  각종 리눅스 패키지의 배포판 (debian, ubuntu, arch linux)을 수정없이 바로 이용할 수 있기 때문에 

  완전한 리눅스 시스템으로 보는것이 타당합니다.

 

  반면에 공유기, 휴대폰, 게임기 등에 쓰이는 리눅스는 그 한정된 메모리나 저성능의 arm코어 

  등을 사용하는점에 비추어 임베디드 리눅스라고 할 수 있습니다.

 

  심지어는 서버의 역할로서 충분히 기능 할 수 있으므로 

  개인용 웹 서버를 운영하는일도 가능할 정도입니다.

 

  현재 불과 몇만원정도에 서버급의 리눅스 머신이 팔리고 있다는 사실은 10년전만해도 상상하기 

  힘든 현실이 되었습니다.  

 

 

 

임베디드 기기의 경우에 대부분 8비트 CPU가 주류였으나 복잡한 계산및 속도가 필요하게 되면서 

임베디드용 MCU에도 32비트급 CPU가 필요해 졌습니다.

그리하여 MIPS의 임베디드 시장 진출이 먼저 이루어 졌고, 뒤이어 ARM core도 임베디드 시장에 

진입하게 됩니다.

 

원래의 ARM CPU는 외부에 메모리등을 추가로 달아줘야 했습니다. (일반적인 CPU) 

이러한 ARM cpu가 임베디드 영역에 쓰이기 위해서는 몇가지 기능이 새로 추가가 되었습니다.

즉 임베디드 시장의 수요가 32비트로 넘어가게 되면서 성능과 저전력을 타협하여 

 

극단적인 고 성능(CLOCK 1GHz 이상)대신에 임베디드 기기에 적당한 클럭(80MHz 이하)을 

가지고 CPU 내부에 메모리와 제어유닛을 포함하는 형태로의 ARM 코어가 발전하게 됩니다.

(ARM cortex-m0 시리즈)

 

이때 ARM 코어 특히 cortex-m0 시리즈는 32비트 CPU의 장점을 가지면서 저전력이고, 

게다가 라이선스만 취득하면 누구나 CPU의 제조가 가능했기 때문에 

수많은 임베디드 CPU제조 업체가 cortex-m0 시리즈 MCU를 생산하기 시작했습니다.

다음 그림은 icbanq 에서 판매가 되고 있는 ARM cortex-m0 코어를 가진 MCU 종류들입니다. 

 

 

(그림 1) ARM MCU


종류도 다양하고 제조사도 다양한 것을 알 수 있습니다. 

심지어 가장 저렴한것은 1000 원대부터 가격이 형성되어 있습니다!!

 

ARM 코어는 저전력의 RISC CPU 이면서도 CISC CPU가 가지는 장점을 추가하고 

또한 C 언어에서 쓰이는 언어 형식(pre increment, post increment) 등을 어셈블리에 

직접 도입하여 명령어의 효율성이 대폭 증대되었습니다.

 

그리고 이시점부터 고성능 임베디드 CPU의 거의 대세가 되다시피 하였습니다.

우리가 실생활에 쓰는 첨단 IT기기의 대부분은(인텔 CPU가 장착된 노트북등을 제외하면) 

ARM 코어를 사용한다고 해도 과언이 아닙니다. 

 

심지어는 초소형 시계, 게임기, 공유기내부에서 쓰이는 CPU도 ARM 코어 입니다. 

애플워치나 아이패드 아이폰에는 어떤 CPU가 쓰였을까요?

ARM 기업의 초기 투자자가 애플사라는것은 아시죠?

그래서 이제는 임베디드를 하면서 ARM 코어에 대한 이해가 없으면 안되는 정도가 된 것입니다.

 

지루한 역사 이야기를 해서 재미가 없으셨죠?

암튼 읽어 주셔서 감사합니다.

 

이번시간에는 현세대 임베디드 CPU의 대표격인 ARM core에 대해 알아보았습니다.

다음 시간에는 ARM core가 사용된 개발보드의 하나를 리뷰해 보고 

사용하는 방법을 간략하게 살펴 보겠습니다.

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 

아이씨뱅큐의 지원을 받아 작성되었습니다]

 

 

관련 사이트 

 

http://www.icbanq.com/shop/product_list.asp?catg_code=102117100&orderby=3&theme_code=&list_type=3&areaPowerList1=

&areaPowerList2=&areaPowerList3=&areaPowerList4=&prod_mfg=&searchtext=

arm&pagesize=10

 

관련 물품

 

http://www.icbanq.com/P005686826/S

 

 

신고

임베디드 강좌 3 부록 - 대표적인 embedded 용 MCU 개요

임베디드 강좌 3 부록 - 대표적인 embedded 용 MCU 개요

 

본글은 http://blog.naver.com/jimypage 에서도 볼 수 있습니다.

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 

 

아이씨뱅큐의 지원을 받아 작성되었습니다]

 

icbanq 의 홈페이지에 가 보시면 MCU 카테고리에 많은 종류의 MCU들이 존재 하는것을 알 수 

 

있습니다.

 

이번회에는 대표적인 embedded용 MCU인 atmel의 AVR시리즈와 microchip의 PIC시리즈중에서 

 

가장 일반적인(또는 일반적 이었던) 제조사의 과거 베스트셀러 MCU에 대해서 알아 보겠습니다. 

 

그리고 다음회에는 좀더 나가서 ARM코어 제품군에 대해서 알아 보도록 하겠습니다.

 

이번에 살펴볼 것은 atmel 의 AVR 시리즈중 AT90S2313과 

 

microhip의 PIC 시리즈중 pic16f84a 입니다.

 

둘다 현역에서 은퇴한 MCU 이지만 90년대에 널리쓰인 베스트 셀러 칩입니다.

 

(사실 은퇴라고하기에는 조금 애매 합니다.


아직 판매가 되는 MCU이지만 현재는 가격대비 성능이 더 좋은 제품들이 많이 나와있기 때문에


실제 현업에서는 많이 쓰이고 있지 않는다 정도로 이해 해 주시면 좋겠습니다.) 

 

즉 가장 범용적으로 쓰일 수 있다는 점에서 베스트 셀러 였구요. 그래서 간략하게 알아보겠습니다.

 


 

(그림 icbanq 의 MCU 카테고리 항목들)

 

위의 그림에서 보시면 많은 카테고리의 MCU들이 있다는 것을 알 수 있습니다. 

 

각 제조사마다 개발 방법은 거의 동일하기 때문에 일반적인 임베디드 개발을 할 경우에는 

 

먼저 목적, 기능에대한 검토를 한후 어떤 기능이 꼭 필요한지, 어떤 기능이 향후에 필요 할 수 있는지

 

IO 핀은 최소 몇개 정도가 있어야 하는지, 클럭은 어느정도로 동작해야 하는지를 결정하고, 

 

이후에 칩 선정을 하고 펌웨어 프로그램을 작성하게 됩니다. 

 

각 제조사마다 거의 비슷한 기능을 하는 칩들이 다수 존재하기 때문에 일반적으로 

 

AVR에 익숙한 사람들은 AVR을 PIC에 익숙한 사람들은 PIC을 사용합니다. 

 

물론 이 두 제조사의 MCU조차도 해당하는 기능이 없는경우 

 

TI, freescale(motorola 에서 이름을 바꾼 회사 입니다.)등 제3의 MCU를 알아본다던가 

 

그마저도 여의치 않은 경우에는 원하는 기능이 있는 다른 MCU 를 추가하거나, 

 

아니면 제어용 IC, CPLD, FPGA등을 추가하게 됩니다.

 

그렇지만 대개는 위 두 회사의 제품군이 다양하기 때문에 다른 MCU를 추가할 필요없는 경우가 

 

많습니다.

 

 

 

아무튼 atmel과 microchip의 대표적인 제품인 at90s2313과 pic16f84a는 그 보편성 때문에 

 

트레이닝 보드에서도 많이 사용되었을 뿐 아니라, 

 

취미용 제품에서 상용제품까지 (아마도) 가장 많이 제조되고 팔렸을 겁니다.

 

 

 

먼저 각 제품의 스펙문서에 나온 개략적인 기능설명을 보겠습니다.

 

첫번째로 atmel의 AT90S2313 입니다.

 

 

 

(AT90S2313 개요문서)

 

 

그리고 다음은 microchip 의 pic16f84a 입니다.

 

 

(pic16f84a 개요문서)

 

 

위의 두 문서를 보시면 몇몇 기능을 제외하고는 거의 차이가 없다는 것을 알 수 있습니다.

 

먼저 공통점을 살펴 보자면 

 

1. high performance RISC 칩이라는군요. -> 소형화를 위해 명령세트를 줄인 CPU 입니다.

 

2. 8비트 타이머 및 그 인터럽트가 존재합니다.

 

3. 20핀 DIP 패키지로 자작 기판에서도 손쉽게 사용할 수 있습니다.

 

4. 프로그램을 FLASH 메모리에 저장합니다.

 

5. 수십, 수백의 작업용 데이터 메모리가 존재합니다.

 

6. 비휘발성 메모리로서 EEPROM이 존재합니다. 

 

7. 시리얼 방식으로 프로그램 메모리에 기입합니다.

 

 

이번에는 차이점을 살펴보겠습니다.

 

AVR은 UART가 존재합니다.

 

AVR은 16비트 카운터가 존재합니다.

 

AVR은 analog comparator가 있습니다.

 

PIC은 가격이 저렴합니다.

 

 

먼저 AVR은 명령어가 118개나 되어서 powerful 하다고 합니다. 

 

그러나 PIC은 명령이 오직 35개밖에 안되어서 배우기 쉽다고 합니다.

 

그러나 AVR은 머신코드가 겹치는 명령을 따로 나누어 놓았기 때문에 실제 명령어 수는 

 

저것보다 적습니다. 그것을 고려하면 명령어수도 좀더 비슷해 집니다.

 

 

또한 AVR은 기본 4Mhz 모델이지만 PIC은 20Mhz까지 가능하다고 합니다. 

 

그러나 AVR은 1클럭에 1명령이 실행됨에 반해서(정확히 1클럭 1명령은 아닙니다) 

 

PIC은 4클럭에 1명령이 실행되므로 속도가 1/4 입니다. 

 

이마저도 비슷해 졌네요.

 

 

PIC은 점프명령을 제외한 모든 명령이 4 클럭에 실행되는 반면 

 

AVR 은 명령의 클럭수가 일정치 않습니다. 따라서 정확한 타이밍이 요구되는 분야에서는 

 

PIC이 좀더 유리합니다.

 

 

 

이렇게 놓고보니 두 칩은 명령어 세트는 다르지만 성능은 거의 비슷한 것 같이 보입니다. 

 

따라서 선호하는 제조사의 하드웨어를 먼저 공부하고 나중에 다른것을 

 

공부하더라도 상관이 없습니다.

 

요즈음은 아두이노등 플랫폼이 많이 쓰이기 때문에 

 

상대적으로 AVR을 잘 알아두면 나중에 아두이노 프로그래밍에도 

 

사용할수 있어서 유리합니다.

 

 

각 MCU를 자세해 살펴보려면 다음의 링크를 참조해 주세요.

 

AT90S2313

 

http://blog.daum.net/unininu/7165272

 

 

PIC16F84A

 

http://www.ktechno.co.kr/pictech/picframe.html

 

 

 

감사합니다.

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 

 

아이씨뱅큐의 지원을 받아 작성되었습니다]

 

이번에는 각 제조사의 과거 플래그십 MCU를 살펴보았습니다. 

 

다음번에는 임베디드의 새로운 트렌드인 ARM칩에 관해서 알아보겠습니다.

 

 

 

관련 사이트

 

http://blog.daum.net/unininu/7165272


 

 

관련 제품

 

http://www.icbanq.com/P000088835/S

 

http://www.icbanq.com/P001625842/S


신고

[아이씨뱅큐 ICbanQ 파워블로거 2기] 임베디드 기초 3 - 임베디드 MCU개요

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

 

임베디드 MCU 개요에 대한 설명을 드리겠습니다.

 

 

본글은 http://blog.naver.com/jimypage 에서도 볼 수 있습니다.

 

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 

 

아이씨뱅큐의 지원을 받아 작성되었습니다]

 

이제부터는 본격적인 임베디드 시스템에 대해서 알아보는 것입니다.

 

임베디드란 특수 목적으로 설계된 하드웨어및 이 하드웨어를 제어하는 소프트웨어를 통합하여 

 

지칭하는 말입니다.

 

임베디드의 반대 개념으로는 일반적인 범용 운영체제 시스템을 들 수 있습니다.

 

범용운영체제 (윈도우, 리눅스, OSX)의 경우 하드웨어의 변경없이도 실행시키는 

 

소프트웨어에 따라 다양한 작업을 수행할 수 있습니다.

 

즉 운영체제라는 기본 서비스 환경하에서 임의의 작업들이 수행됩니다. 이에반해 

 

임베디드 시스템의 경우에는 목적이 먼저 선택된후 

 

이 목적을 위해서 하드웨어와 소프트웨어가 개발됩니다. 

 

따라서 특정 목적에 부합하는 하드웨어(MPU및 주변장치)가 먼저 선정되고, 

 

이 하드웨어에 필요한 소프트웨어를 개발하여 최종 결과물을 생성하게 됩니다.

 

일반 범용 운영체제와는 달리 매우 단순한 작업에서부터 아주 복잡한 작업에 이르기까지 

 

그 분야가 상당히 넓으며, 따라서 MPU및 주변장치도 특정 목적및 기능에 부합하도록 

 

다양한 가격대, 다양한 제조사의 다양한 종류가 있는것이 특징입니다.

 

 

예전 가전제품등 전자기기의 경우 비교적 단순한 작업만을 수행하기 때문에 

 

MCU(Micro Controller Unit)가 필요없는 경우가 많았습니다. 

 

MCU가 필요없는 경우라 함은 임베디드 제어 프로그래밍도 필요없다는 말입니다.

 

 

 

예를 들어보겠습니다.

 

지난번 LED 강좌에서 설명드린 세그먼트 LED를 이용해서 전자 시계를 만들었다고 가정해 봅시다.

 

전자시계가 하는 일은 단지 시간을 표시해 주는 것입니다.

 

이러한 단순한 작업은 MCU의 가능에 의존하지 않고 일반적인 논리 소자의 조합으로 

 

얼마든지 구현할 수 있습니다.

 

이런 경우에는 회로의 설계및 완성이 제품의 완성으로 이어지며 제어용 프로그램은 

 

필요하지 않습니다.

 


(TTL을 이용한 clock 회로도 그림)


(회로도상에서 CPU,MCU는 보이지 않습니다. 

단지 논리 소자의 조합으로 시계의 역할을 수행합니다)

 

 

그렇지만 특정작업을 수행하는데 제조사의 요구가 다양해 진다거나

 

(예를 들어서 위의 시계에 알람기능이 추가 되는 경우) 

 

아니면 다양한 모델을 개발해야 하는 경우 단순 논리 소자의 결합만으로는 그 일을 할 수 없습니다. 

 

왜냐하면 간단한 기능을 추가하는데에도 회로설계를 다시하고, 기판설계를 다시하고, 

 

기판 제조를 다시하고, 테스트를 다시 수행해야 하기 때문입니다. 

 

즉 특정부분의 사양 변화에 소요되는 시간및 비용이 만만치 않다는 것이 문제가 된 것 이었습니다.

 

결국은 범용성이 있는 다양한 기능을 수행할 수있는 중앙 연산장치의 필요성이 증가하였고 

 

이것이 CPU가 탄생된 계기가 되었습니다.

 

 

실제로 최초의 CPU라고 알려져 있는 intel사의 4004라는 4bit CPU 모델의 경우 

 

일본 비지콤이라는 회사의 '계산기'에 쓰일 목적으로 처음 개발이 되었습니다.

 

 

(인텔 4004 CPU 그림)

 

그렇지만 CPU를 제조하고 보니 단순히 덧셈 곱셈등의 계산기능만을 위한 것이 아닌 

 

그 이상의 다양한 기능을 할 수 있다는 가능성이 발견되었고 

 

점차 더욱 빠르고 강력한 기능을 가진 CPU가 개발되어 오늘날에 이르게 되었습니다.

 

인텔은 이후 8bit CPU인 8080을 개발하였고 이 8080 cpu는 8bit CPU에서 대박을 친 Z80시리즈의

 

원조가 되었습니다. 7,80년대의 8bit CPU보다 향상된 16bit, 32 bit CPU가 개발및 사용 되었으며 

 

최근에는(2010년 이후) 32bit cpu의 한계를 넘는 64bit CPU가 개발되어 개인용 컴퓨터에 

 

쓰이고 있습니다.

 

이렇게 인텔, AMD로 대표되는 데스크탑 컴퓨터의 CPU가 발전을 하는동안 

 

또다른 종류의 CPU의 필요성이 대두 되었습니다.

 

일반 CPU의 성능이 비약적으로 발전했으나 이정도의 고 성능이 필요하지 않은 

 

단순한 제어를 위한 CPU의 필요성이 증가된 것이었습니다.

 

 

물론 단순한 제어를 위한 용도의 CPU는 데스크탑 CPU의 원조격인 구형 z80 등 8bit의 

 

일반 CPU 등을 이용할 수도 있습니다. 

 

그렇지만 일반 CPU의 경우에는 데이터 버스, 어드레스버스등이 외부에 노출되어 있어서 

 

메모리장치에는 직접 연결이 가능하나 메모리 이외의 시리얼 단자라든가 병렬포트등의 

 

기타 주변장치와 연결을 하기 위해서는 어드레스 디코더및 특정 IO 기능을 담당하는 

 

주변 IC 칩이 필요해 집니다. 

 

(예를 들자면 Z80이라는 8비트 CPU의 경우 주변장치와 병렬 통신을 하기 위해서는 

 

Z80 SIO라는 특정한 반도체가 필요합니다. 

 

또한 마찬가지로 Z80 CPU 에서 병렬 통신을 위해서는 8255등 주변 IC가 필요합니다.)

 

 

그렇지만 소형, 단순한 장치를 개발하는 경우 위와같은 주변칩이 필요하다는 것은 

 

비용및 개발기간 상승의 원인이 됩니다

 

따라서 80년대 초반이후 기존 CPU와 IO를 담당하는 주변 기기의 기능을 하나로 합친 

 

CPU들이 생산되게 되었습니다.

 

이러한 CPU를 특별히 MCU라 부릅니다(micro controller unit)

 

이때의 MCU의 의미는 기존의 CPU에 제어용의 유닛(controller unit)이 내장되었다 하여 

 

그렇게 이름붙여지게 되었습니다.

 

- 결국 기존 8bit CPU 제조사는 (대표적인 기업은 z80을 생산하던 zilog) 새로운 변화에 


대응하지 못하여 성능에서는 인텔 8086시리즈에 밀리고, 


가격에서는 MCU 칩제조사에 밀려 근근히 명맥만을 유지하는 상태가 되었습니다.-

 

이 시기의 MCU중 대표적인 기업이 (아두이노 시리즈로 유명한) ATMEL, motorola, 

 

그리고 microchip, TI 등이 있습니다.

 

기존의 CPU는 메모리영역이 데이터영역과 코드영역의 접근방식이 동일한 폰 노이만 구조를 

 

많이 사용합니다.

 

그러나 MCU는 기존의 CPU와는 달리 RISC구조, 하버드 아키텍쳐를 가지는 것들이 대부분입니다.

 

 

소형화, 경량화를 위해서 명령어 세트를 단순화한 RISC방식을 채택하고 있으며, 

 

메모리 버스자체가 외부에 노출되어 있지 않기 때문에 

 

항상 고유한 주소를 가지고 코드영역에 접근해야 할 필요성도 없습니다. 

 

따라서 코드메모리, 데이터 메모리와 IO 영역이 분리된 형태의 버스 구조(하버드 아키텍쳐)를 

 

채택하고 있습니다.

 

데스크탑 CPU와는 다르게 목적에 따라 다 품종이 생산이 되며 

 

다양한 가격대의 다양한 기능을 지닌 MCU들이 생산이 되기 때문에, 

 

가격과 목적에 맞는 MCU를 선택할수 있는 선택의 폭이 매우 넓습니다.

 

 

오늘날은 몇몇 제조사들만이 임베디드 MCU를 생산합니다.

 

살아남은 MCU 들은 ATMEL 의 AVR 시리즈, intel 의 8051 시리즈, microchip 의 PIC 시리즈, 

 

TI 의 MSP시리즈등이 있습니다. 

 

모토롤라의 MC68시리즈는 90년대까지 쓰이다가 현재는 잘 안쓰이고 있습니다.

 

 

위의 MCU들을 제조하는 제조사는 자사의 고유한 MCU구조와 명령어 세트를 가지고 있는데 

 

각 제조사 마다 명령어 세트는 거의 동일하며 

 

상위기종으로 갈수록 명령어가 더 추가되는 정도의 변화만 있습니다.

 

위의 시리즈는 대개 8bit CPU들이나 최근에는 임베디드 기기도 고성능이 필요한 경우가 

 

종종 있기 때문에  각 제조사들은 32bit 코어를 라이선스 하여 

 

전혀 다른 명령어 세트를 가진 고성능의 MCU도 생산하고 있는 추세입니다.

 

(microchip 은 MIPS core를 , ATMEL 은 ARM core 를 라이선스하여 제조하고 있습니다.)

 

 

 

임베디드 프로그래밍이란 예전에는 각 제조사에 맞는 어셈블리 언어를 이용하여 

 

프로그래밍 하는 능력을 의미했습니다.

 

그렇지만 최근에는 MCU 성능의 비약적인 발전및 그에 따른 C 컴파일러의 보급으로 

 

하드웨어적인 코드, 데이터 메모리제약이 거의 없습니다. 

 

(부족한 경우에는 더 상위의 칩을 쓰면 됩니다.) 

 

따라서 최근의 임베디드 프로그래밍은 각 MCU의 하드웨어의 특성을 이해하며 

 

C 언어로 프로그래밍을 하는 능력을 의미하게 되었습니다.

 

 

 

저는 임베디드용의 MCU의 성능이 미약하던 시절부터 프로그래밍을 해 왔기 때문에 

 

각 제조사의 MCU 아키텍쳐 각각의 어셈블리 언어를 전부 이해하고 있습니다만 

 

어셈블리 언어로 작성된 프로그램의 경우 일단은 배우기 어렵고 난해하며

 

각 기종간 이식성이 거의 없다는 단점이 있습니다.

 

따라서 현재는 매우 최적화가 필요한 경우가 아니라면 범용성을 위해서 

 

임베디드 프로그래밍도 거의 C 언어를 이용하는 편입니다.

 

 

즉 예전의 임베디드 프로그래밍은 특정 제조사 MCU 어셈블리 언어를 얼마나 

 

잘 사용하는가, 그리고 하드웨어 자원을 얼마나 효율적으로 이용하는가가 중요한 문제였습니다.

 

이러한 능력은 일반적인 데스크탑 컴퓨터에서의 개발 언어를 습득하는 것 보다도 훨씬 

 

배우기 어렵고, 시간도 많이 걸리는 일이어서 임베디드 개발자들의 인원수가 

 

범용 운영체제의 개발자들보다 훨씬 적었고, 

 

따라서 연봉등으로 더 대우를 받게 된 계기가 된 것입니다.

 

 

그렇지만 최근에는 MCU 의 성능이 비약적으로 향상되어 

 

어셈블리 언어를 전혀 알지 못하고도 프로그래밍이 가능한 시대가 되었습니다. 

 

오로지 C 언어만 가지고도 원하는 작업을 수행할 수 있게되어 

 

이제는 임베디드 프로그래밍 이라고 하면 특정 제조사 MCU 하드웨어를 얼마나 잘 이해하고 있는가, 

 

그리고 얼마나 적은량의 리소스를 가지고 

 

목적에 합당한 기능을 수행하느냐의 문제(최적화 알고리듬)가 되었습니다.

 

임베디드 MCU에 대한 대략적인 이해가 되셨는지요?

 

 

 

이번회에서는 임베디드 MCU의 개략적인 개요에 대해 살펴보았습니다.

 

다음회에는 임베디드용으로 사용되는 MCU의 대표적인 칩및 제조사의 하드웨어에 대해서 

 

몇가지를 알아보고 각 제조사별 대표적인 칩의 핀맵에 대해서 간단히 살펴 보겠습니다.

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 

 

 

아이씨뱅큐의 지원을 받아 작성되었습니다]

 

 

 

관련 사이트

 

https://jawadsblog.wordpress.com/page/5/


 

 

관련 제품

 

http://www.icbanq.com/P000088835/S


 

 

신고

TI, 클라우드 연결 보안 강화를 위한 새로운 MCU 개발 키트 출시

- 하드웨어 암호화 보안 기능 갖춘 TI의 TM4C MCU 제품군 및 새로운 저가형 론치패드™ 개발 키트
- 안전한 클라우드 연결에 필요한 성능 제공
 

 TI(대표이사 켄트 전)는 사물인터넷(IoT)에서 요구되는 핵심적인 보안 요건을 해결하기 위해, IoT 게이트웨이 및 노드, 공장 제어 및 자동화 시스템, 그리드 인프라, 대체 에너지 및 산업용 애플리케이션의 설계 시간을 단축시키는 TM4C 암호화 커넥티드 론치패드 개발 키트를 출시한다고 밝혔다. TI의 TM4C129ENCPDT 마이크로컨트롤러(MCU)에 기반한 저가형 TM4C 암호화 커넥티드 론치패드 개발 키트는 120MHz ARM® Cortex®-M4F 코어를 탑재하고 보안 기능은 하드웨어 액셀러레이터에 전담시켜 코어에 부하를 줄임으로써, 안전한 클라우드 연결이 필요한 애플리케이션을 개발하는 고객이 필요로 하는 성능을 제공한다.

 

전송 계층 보안(TLS)으로 안전한 클라우드 연결 개발 지원
암호화 커넥티드 론치패드(EK-TM4C129EXL)에 기본 탑재된 데모에는 클라우드에 간편하고 안전한 인터넷 연결이 필요한 제품을 쉽게 개발할 수 있도록 멀티태스킹 애플리케이션 개발을 지원하는 TI-RTOS가 포함돼 있다. TM4C 암호화 커넥티드 론치패드와 WolfSSL 소프트웨어를 함께 사용하면 온보드 이더넷을 통해 암호화된 데이터를 빠르게 전송하고 이를 브라우저로 확인할 수 있다. 또한 설계자는 쉬운 프로그래밍 인터페이스 및 디버깅 툴인 TI의 Code Composer Studio™ 통합 개발 환경(IDE)을 무료로 다운로드해 이용할 수 있다.

 

사용이 간편한 개발 환경을 제공하는 TI 론치패드 개발 에코시스템
TM4C 암호화 커넥티드 론치패드는 저렴한 가격에 암호화를 지원하고 사용이 간편한 평가 플랫폼을 제공한다. TI 론치패드 개발 에코시스템은 빠르고 쉬운 설계를 구현하는 데 필요한 하드웨어, 소프트웨어, 커뮤니티 구성요소를 제공한다. TI의 부스터팩™ 플러그인 도터 보드를 이용하면 다양한 애플리케이션을 시험할 수 있는 기능을 추가할 수 있다.

 

TM4C 암호화 커넥티드 론치패드의 주요 기능 및 장점
- 데이터 암호화 및 복호화를 위한 첨단 보안 기능에는 온보드 첨단 암호화 표준(AES), 데이터 암호화 표준(DES), 보안 해시 알고리즘(SHA) 및 순환 중복 검사(CRC) 액셀러레이터가 포함되어 있어 보안 커넥티드 애플리케이션의 성능을 강화한다. 또한, WolfSSL 라이브러리는 이러한 암호화 하드웨어 액셀러레이터를 이용해 클라우드 서버와 보안 SSL/TLS 연결을 제공한다.
- 광범위한 통신 옵션은 풍부한 센서 커넥티비티 주변장치, 10/100 이더넷 MAC 및 PHY, 풀스피드(전속)/로우스피드(저속) USB 2.0 포트 및 인서킷/외부 디버그 커넥터뿐 아니라 저전력 SimpleLink™ Wi-Fi CC3100 부스터팩을 사용하는 Wi-Fi® 커넥티비티 추가 옵션을 포함한다.
- 개발을 간소화하고 단축시키도록 설계된 종합적인 소프트웨어 툴 스위트에는 안전한 IoT 클라우드 연결을 위한 TivaWare™ 및 TI-RTOS 기반의 바로 사용 가능한 데모가 포함되어 있다. 

신고

실리콘랩스, 업계 최소 크기의 에너지친화형 터치 센싱 MCU 출시

IoT(Internet of Things)에 적합한 에너지 친화적인 마이크로컨트롤러(MCU) 선도기업인 실리콘랩스(Silicon Labs, 지사장 백운달)는 정전용량형 터치 센싱 기능이 필요한 초저전력, 소형 풋프린트의 IoT 애플리케이션을 위해 8비트EFM8 MCU의 최신 제품을 출시했다고 밝혔다. 신제품 EFM8SB1 Sleepy Bee MCU는 1.78 mm x 1.66 mm WLCSP(wafer-level chip-scale package)로 제공되며, 기존 QFN 패키지로 제공되는 8비트 MCU 크기의 1/4에 해당되는 업계 최소 크기의 MCU이다. 이처럼 작은 MCU는 배터리로 동작하면서 터치 기반 휴먼 인터페이스를 가진, 공간 제약적이면서 장시간의 배터리 수명과 에너지 효율적인 휴먼 인터페이스를 필요로 하는 IoT와 산업 애플리케이션에 이상적이다.  타깃 애플리케이션은 웨어러블, 리모콘, 블루투스 액세서리, e리더기(eReader) 뿐 만 아니라 산업 자동화, 홈 오토메이션 및 사무기기를 포함한다.

 

EFM8SB1 Sleepy Bee MCU는 업계 선도적인 슬립모드 전력(전체 메모리 보존과 브라운아웃 탐지 기능 동작 상태에서 50nA)과 2 μs의 초고속 웨이크업 시간을 제공하는 실리콘랩스의 가장 에너지 효율적인 8비트 제품이다. 코어 속도는 25 MHz까지 설정되며, 플래시메모리 크기는 2 kB ~ 8 kB까지 다양하다. MCU는 1 μA미만의 초저전력 웨이크온터치 기능과 12개의 채널을 제공하는 업계 최고수준의 정전용량 센싱 컨트롤러를 내장하고 있어, 웨어러블과 같은 공간에 민감한 다양한 애플리케이션에서 온/오프 스위치의 필요성을 없애 준다.

 

최첨단 온칩 정전용량 센싱 기술 제공과 더불어, 실리콘랩스는 심플리시티 스튜디오™ 개발 플랫폼을 통하여 제공되는 최고 수준의 정전용량 센스 라이브러리를 이용해 터치 센스 인터페이스 설계를 지원하며, 정전용량 센싱 인터페이스를 IoT 제품에 추가하기 위해 필요한 모든 기능과 알고리즘을 제공한다. 심플리시티 스튜디오는 버튼 스캔으로부터 잡음 필터링에 이르기까지 양산제품에 이용할 수 있는 수준의 준비가 된 펌웨어를 펌웨어 개발자에게 제공한다. 정전 용량 터치 버튼의 실시간 데이터 및 잡음 수준을 시각화할 수 있는 심플리시티 스튜디오의 정전용량 센스 프로파일러를 사용함으로써, 개발자는 터치 및 노터치 임계값과 잡음 필터링의 설정을 쉽게 조절할 수 있으며, IoT 애플리케이션에 정전용량 터치를 추가하는 과정을 간소화할 수 있다.

 

EFM8SB1 MCU는 고해상도의 CDC(capacitance-to-digital converter), 12비트 ADC(analog-to-digital converter), 고성능 타이머, 향상된 SPI, I2C 및 UART 시리얼 포트를 포함한 아날로그 및 디지털 페리페럴의 다양한 조합을 제공한다. 이 같은 아날로그/혼성신호 페리페럴은 실리콘랩스의 특허기술 크로스바(crossbar)를 통해 개발자가 쉽게 구성하여 이용할 수 있다.

실리콘랩스의 톰 패널(Tom Pannell) 마이크로컨트롤러 제품 마케팅 이사는 “EFM8SB1 Sleepy Bee는 뛰어난 에너지 효율성, 정전용량 터치 기능, 다양한 페리페럴 셋트, 업계 최소의 MCU 풋프린트, 업계 최고 수준의 개발 환경을 결합하여, 실리콘랩스의 ‘절충없는 MCU’ 설계 철학을 실현한다”면서 “8kB미만의 플래시메모리를 필요로 하는 어플리케이션을 위하여 매우 작고 매우 낮은 전력을 소모하면서 정전 용량 터치를 지원하는 MCU가 필요하다면, EFM8SB1 MCU는 당신의 IoT 설계를 위한 완벽한 선택이다”라고 말했다.

 

 

EFM8SB1 Sleepy Bee MCU 핵심사항
- 최대 25 MHz single-cycle 8051 프로세서 코어
- 1.78 mm x 1.66 mm WLCSP(wafer-level chip-scale package)로 이용 가능
- 온칩의12채널 정전용량 터치 센스 컨트롤러
- 전체 메모리 보존과 브라운아웃 탐지(BOD) 기능 동작 상태에서 50nA 슬립 모드
- 저주파 내장 오실레이터(LFO) 동작상태에서 300 nA 슬립 모드
- 150 μA/MHz 액티브 소모 전류
- 1 μA미만의 웨이크온터치
- 고속의 2 μs 웨이크업 타임
- 시스템 및 전력 소모 요건에 최적화에 필요한 유연한 클록킹 아키텍처
- 아날로그 및 디지털 페리페럴을 위한 특허 기술 크로스바(crossbar)
- 심플리시티 스튜디오를 통한 정전용량 센스 프로파일러 및 라이브러리 등 개발 툴의 지원

 

 

신고