마이크로컨트롤러의 Program memory(Flash memory)와 Data memory(SRAM) 비교

Program memory(Flash memory)는 
비휘발성 메모리(Non-Volatile)이고, 

Data memory(SRAM)은 
휘발성 메모리(Volatile)입니다.

비휘발성 메모리(Non-Volatile)

전원이 입력되지 않아도 
데이터가 사라지지 않고 저장할 수 있는 메모리입니다.

주변에서 볼 수 있는 
SD 카드, SSD 메모리, HDD메모리, CD, DVD와 같은 
저장매체와 비슷하다고 생각할 수 있습니다.

마이크로컨트롤러에서는 Flash memory라고 부르며 
데이터를 저장할 수 있는 크기는 
수백 Bytes에서 수 MBytes까지 다양합니다.

일반적으로 마이크로컨트롤러의 핀수가 적거나 
기능이 적을수록 
Program memory(Flash memory)의 크기가 작고,
마이크로컨트롤러의 핀수가 크고 기능이 많을수록 Program memory(Flash memory)의 크기가 큽니다.

휘발성 메모리(Volatile)

전원이 입력되지 않으면 데이터가 사라집니다. 
통상 전원이 입력되었을 때 
초기 값은 Unknown상태입니다.

Unknown상태는 
SRAM의 각 비트값이 '1'이 될 수도 있고
'0'이 될 수 있음을 의미합니다.

따라서 전원이 입력되었을 때 
반드시 SRAM의 데이터를 초기화해야 합니다.

일반적으로 마이크로컨트롤러의 핀수가 적거나 
기능이 적을수록 Data memory(SRAM)의 크기가 작고,
마이크로컨트롤러의 핀수가 크고 기능이 많을수록 Data memory(SRAM)의 크기가 커지게 됩니다.


Data memory(SRAM)의 크기는 
Program memory(Flash memory)에 비하여 
약 1/10이하로 내장되는 경우가 대부분입니다.

단, 영상이나 이미지처리를 목적으로 만들어진 
마이크로컨트롤러는 
Data memory(SRAM)이 
Program memory(Flash memory)에 비하여 
크게 내장된 경우도 있습니다.

또는 영상이나 이미지를 저장하기 위해 
Data memory(SRAM)이외에 DDR메모리가 
별도로 내장하기도 합니다.

Posted by KennyShin
,
마이크로컨트롤러의 주변장치(Peripheral) 연결

        
주변장치(Peripheral)라고 부르는 
GPIO, ADC, Timer, EEPROM, SPI, I2C, UART 등등은 
CPU와 SRAM사이에 연결된 데이터 버스(Data Bus)에 
함께 연결되어 있습니다.

            즉, CPU와 SRAM사이가 8비트로 구성된 
8비트 마이크로컨트롤러일 경우 주변장치(Peripheral)도 
8비트로 연결되는 것을 의미하며, 
            공통으로 함께 연결되기 때문에 CPU에서 SRAM을 읽고 쓰는 동안에는 주변장치(Peripheral)에 접근하지 못합니다.

Posted by KennyShin
,

8비트/16비트/32비트 마이크로컨트롤러의 구분방법

            
마이크로컨트롤러에서 8비트, 16비트, 32비트를 구분하는 것은 
CPU와 SRAM사이에 연결된 데이터버스(Data Bus)크기입니다.

            즉, CPU에서 SRAM을 한번에 얼마나 
큰 데이터를 읽거나 쓸 수 있는가를 의미합니다.

            예를 들어 8비트 마이크로컨트롤러는 SRAM이 8비트(bit), 
16비트 마이크로컨트롤러는 SRAM이 16비트(bit), 
32비트 마이크로컨트롤러는 SRAM이 32비트(bit)단위로 
접근할 수 있습니다.

            레지스터(Register)라는 부분도 
8/16/32비트 마이크로컨트롤러에 따라 
각각 레지스터(Register)가 8/16/32비트로 구성됩니다.

            Flash Memory와 CPU사이는 
8비트 마이크로컨트롤러인 경우에도
 8비트로 구성되는 것이 아니라 
명령어를 나타내는 길이만큼으로 구성됩니다.

            예를들어 8비트 마이크로컨트롤러라도
 Flash memory와 CPU사이의 버스(Bus)는 
14비트 또는 16비트 등으로 구성됩니다.
    
8비트 마이크로컨트롤러
CPU와 SRAM사이에 연결된 데이터버스는 8개의 선으로 연결됩니다.

16비트 마이크로컨트롤러
CPU와 SRAM사이에 연결된 데이터버스는 16개의 선으로 연결됩니다.

32비트 마이크로컨트롤러
CPU와 SRAM사이에 연결된 데이터버스는 32개의 선으로 연결됩니다.

Posted by KennyShin
,
펌웨어(Firmware) 개발과정의 의미

마이크로컨트롤러를 이용하여 제품을 개발하는 과정을 요약하면 
"코드를 만들고 테스트하는 과정을 반복"하게 됩니다.

이 과정은 범용마이크로컨트롤러를 이용하여 
자신만의 전용마이크로컨트롤러를 만드는 과정입니다.

명령어나 논리연산자 그리고 수학적 연산을 수행하는 CPU, 
연산 결과값을 임시 저장하기 위한 SRAM, 
어떤 동작을 할지를 담고있는 FLASH 메모리가 있습니다.



또 이외에도 주변장치라고하는 
ADC, PWM, DAC, Timer, EEPROM 등등 
수많은 장치가 내부에 존재합니다. 

하나의 IC에 수많은 기능이 내장되어있어 
짧은 시간에 모든 기능을 습득하는 것이 어렵기도 합니다.

Posted by KennyShin
,
마이크로컨트롤러의 기본구성

마이크로컨트롤러는 크게 
Program memory(Flash memory), 
Core(CPU), 
Data memory(SRAM) 
3가지로 구분됩니다.


Program memory(Flash memory)

Program memory는 CPU가 어떤 동작을 할지에 대한 
프로그램 명령어를 저장하는 역할을 합니다.
Program memory의 크기는 CPU가 수행해야할 
명령어의 갯수를 의미합니다. 

해야할 동작이 복잡하거나 명령어를 많이 써야한다면 
Program memory의 크기가 큰
마이크로컨트롤러를 선택해야 합니다. 

Core(CPU)

Core(CPU)는 Program memory에서 
명령어를 가져와서 명령어를 수행합니다. 

명령어를 수행 후 만들어지는 
임시 데이터는 SRAM에 저장하게 됩니다.
사람에 비유하면 두뇌와 같은 역할을 합니다. 

Core(CPU)옆에 연결된 Oscillator는 Core(CPU)가 동작하기 위한 
엔진(Engine)과 같은 역할을 합니다.

Oscillator는 흔히 Clock이라고 하며 
Clock 주파수에 따라 Core(CPU)를 
얼마나 빠르게 동작하게 할지 결정할 수 있습니다.

Data memory(SRAM)

Data memory는 명령어가 수행된 후 
결과값을 저장하는데 사용됩니다.
예를 들어 temp = 3 + 5; 라는 명령가 실행되여 
8이라는 결과가 만들어지면 
그 결과값은 SRAM에 저장되게 됩니다. 

Posted by KennyShin
,
처음 마이크로컨트롤러를 시작할 때 필요한 것들

마이크로컨트롤러를 이용한 개발을 Firmware라고 합니다. 
네이버지식백과에서 Firmware를 아래와 같이 정의합니다.

            "펌웨어는 소프트웨어와 하드웨어의 중간에 해당하는 것이며 소프트웨어를 하드웨어화한 것이라고 할 수 있다." 
펌웨어(Firmware)란?
(출처 - 네이버 지식백과)


            "펌웨어가 소프트웨어와 하드웨어의 
중간에 있다는 것"은 
소프트웨어와 하드웨어에 대한 
지식이 모두 있어야하는 것을 의미합니다.

            단지 프로그래밍 언어에 대한 지식으로 
Firmware개발을 시작하면 깊이있는 개발을 하기 어렵습니다. 

그 이유는 프로그레밍 코드뿐만아니라, 
마이크로컨트롤러 주변에 연결된 
다른 디바이스(Device)나 저항(Resistor), 
캐패시터(Capacitor), 트렌지스터(Transistor) 등에 대한 이해도 
필요하기 때문입니다.

            또 "소프트웨어를 하드웨어화한 것"은 소프트웨어를 이용하여 
하드웨어를 설계하는 것을 의미합니다. 

            결국 펌웨어(Firmware)는 하드웨어를 설계하는 것입니다.

            따라서 펌웨어(Firmware)에는 
소프트웨어 엔지니어와 하드웨어 엔지니어를 
구분하여 부르기 어렵습니다. 

            펌웨어(Firmware) 엔지니어는 
소프트웨어 엔지니어이면서 하드웨어 엔지니어입니다. 
즉, 두 가지 모두 지식이 있어야만 합니다.


Posted by KennyShin
,

 

MCU(Microcontroller)의 미사용 핀은 어떻게 처리해야 할까?

 

 

Microchip사의 PIC16(L)F18345 디바이스 데이터시트에서는 아래와 같은 방법을 추천합니다.

 

첫번째 방법

미사용핀(Unused GPIO)는 출력으로 설정한 다음 Low로 출력되도록 한다.

 

두번째 방법

미사용핀(Unused GPIO)는 출력으로 설정한 다음 Low로 출력되도록 하고 1kOhm~10kOhm의 저항을 미사용 핀과 GND사이에 연결되도록 한다.

 

 

 

 

그러면 첫번째 방법을 사용할 것인가? 두번째 방법을 사용할 것인가?

 

이미 회로 디자인이 다 끝났으면 첫번째 방법을 사용하는 것을 추천합니다.

 

그런데 회로 디자인 변경이 가능한 일정이면 되도록

두번째 방법을 사용하여 Robust한 디자인을 할 수 있습니다.

 

 

데이터시트: PIC16(L)F18325/18345 Full-Featured, Low Pin Count MCUs with XLP Data Sheet

 

위에서 설명한 미사용핀 처리 방법은 모든 Microchip MCU에 적용할 수 있습니다.

Posted by KennyShin
,