728x90

MCU Micro Controller Unit

- 전자제품에사용되는 제어 유닛

- 주위 주변장치 GPIO, UART 등 제어함

- CPU보다 저전력, 저성능, 저럼, 많이사용

- 구성 : 메모리, 레지스터, 페리페럴, 버스 등으로 구성

참고 : https://www.hackerschool.org/Sub_Html/HS_University/HardwareHacking/04.html

 

 

 

PCB Printed Circuit Board

- 녹색 전자 회로 기판

- 이 위에 MCU와 다른 전자 소자 등이 올라감

 

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

 

 

IC Integrated Circuit

- 집적화된 회로

- 전자 부품, 소자들을 모아 하나의 회로에 집적화한것

- 아래의 그림은 IC칩의 패키지들. IC칩 내부 소자들을 보호하기 위한 플라스틱 케이스

 

http://blog.daum.net/go_ahead/14

- 아래의 그림은 다이칩 die chip : 실제 패키지 내부 IC

https://metallux.ch/hybridcircuit/chip-on-board-cob/

 

 

 

 

MCU 내부 장치

1. 버스

- 메모리, 페리페럴, CPU 사이 데이터 주고받기위한 공용 통로.

- Control bus 제어버스, Address bus 주소버스, Data bus 데이터버스 등 존재

- MCU가 제어 명령, 주소, 데이터 등을 전송시키는 시간을 조절하여 데이터간 충돌을 회피

 

https://www.renesas.com/us/en/support/technical-resources/engineer-school/mcu-programming-peripherals-01-gpio.html

 

2. 메모리

- 기억 장치. 휘발성 비휘발성에따라 RAM과 ROM으로 구분

- 휘발성 : 전원이 없을때 데이터가 날아감 -> RAM

- 비휘발성 : 전원이 없을때 데이터 보존 -> ROM

 

2.1 ROM Read Only Memory의 종류

 - PROM Programmable ROM - 프로그래밍 가능한 메모리. 한번만 쓰기가능

 - EPROM Erasable Programmable ROM - 자외선으로 쓰고 지우는게 가능한 PROM

 - EEPROM Electric EPROM : 전기적 충격으로 쓰기 읽기가 가능한 ROM

        => 대표적인 EEPROM으로 Flash Memory가 존재

 

2.2 RAM Random Access Memory

 - SRAM, DRAM, SDRAM이 존재

 - SRAM Static Random Access Moery

      -> 트랜지스터만으로 만든 메모리, 고속, 고가 소형화 힘듬 

 - DRAM Dynamic RAM

      -> 캐퍼스터와 트랜지스터로 구성된 메모리                        

      ->  캐퍼시터를 사용한 만큼 데이터 손실을 막기위해 충전하는 Refresh Time 필요. 저가

 - SDRAM Synchronous DRAM

    -> 동기식 메모리. 외부에서 공급해주는 클럭에 따라 동기화

    -> 클럭 신호선이 존재하여 데이터 처리 시 지연시간 latency 필요

 - 아래의 그림은 SRAM의 소자

https://ko.wikipedia.org/wiki/%EC%A0%95%EC%A0%81_%EB%9E%A8

 

 

 

3. 메모리맵

- 대부분의 MCU의 데이터 시트에서 제공하는 정보로 할당된 각 메모리의 주소와 용량을 알 수 있음.

- 아래은 하드웨어 구성을 위한 메모리맵으로 SRAM 영역이 0x2000 0000 ~ 0x3FFF FFFF임을 알 수 있음

 

https://todayis.tistory.com/tag/%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A7%B5

 

- 아래의 그림은 소프트웨어적으로 분리된 메모리 맵

 스택 영역 stack : 지역변수, 함수 포인터

 힙 영역 heap : 동적 할당된 메모리 공간

 코드 영역 code : 명령어 등이 저장됨

 데이터 영역 data : 전역 변수들이 저장

https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%A7%B5

 

 

4. 레지스터 register

- MCU 내부에 존재하는 가장 빠른 메모리. 비싸 페리페럴이나 CPU 내부에 작은 공간을 가짐

- 프로그램 카운터 PC Program Counter, 스택 포인터 SP Stack Pointer, 명령 레지스터 IR Instruction Register, 데이터 레지스터 DR Data Register, AR Address Register, 범용 레지스터 General Register 등 존재

 

4.1 레지스터 종류

- 프로그램 카운터 : 다음에 실행할 명령어의 주소를 저장하는 레지스터

 * 아래의 그림은 프로그램의 실행과정으로 여기서 프로그램 카운터가 다음에 실행할 명령어 주소를 가지고 있음

   => 프로그램 카운터의 값이 실행할 명령어 위치가 되어 찾아감

      다음 프로그램 카운터값은 명령어 크기만큼 +됨.

      32비트 컴퓨터 즉, 4바이트 크기라면 0x0000 -> 0x0004 -> 0x0008

https://kasckasc.tistory.com/entry/2-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%98-%EC%8B%A4%ED%96%89-%EA%B3%BC%EC%A0%95-%EB%B0%8F-CPU-%EA%B5%AC%EC%A1%B0%EC%99%80-%EC%9B%90%EB%A6%AC

- 스택 포인터

   -> 함수 호출과 관련된 정보들을 스택 자료구조로 저장하는 공간.

   -> 함수가 호출되고 종료후 돌아갈 지점과 데이터들을 관리

 

 

http://www.tcpschool.com/c/c_memory_stackframe

 

- 명령어 레지스터 : 명령어들을 담는 레지스터

- 데이터 레지스터 : 데이터들을 담는 레지스터

- 범용 레지스터 : 프로그램 카운터, 스택 포인터, 명령/데이터 레지스터 제외한 범용 목적의 레지스터

 

 

 

5. 메모리 관리 유닛 MMU Memory Management Unit

MMU

- 메모리 공간에 프로그램을 로드하여 사용중에 충돌이나 문제를 막기위한 HW.

  * 동일한 문제를 막기위한 SW로 OS가 있음.

 

MMU 기능과 구성 요소

- 기능 : 가상 메모리 Virtual Memory와 실제 Physical memory 사이 변환 및 메모리 보호

- 가상 메모리 : 가상의 메모리로 물리적인 메모리보다 큼

- 물리 메모리 : 실제 존재 존재하는 메모리

 

가상 메모리, MMU를 사용하는 이유

- 소프트웨어는 자신이 사용할 공간을 자기가 고르지 못하고 메모리 관리를 위해 운영체제가 배정해줌

- 프로그램들은 가상 메모리의 0x0000 0000에서 시작하지만 실제로 MMU가 물리 메모리의 주소로 변환해줌

- 여러 프로그램들이 초기 지점인 0x0000 0000에서 시작하고, 물리 메모리 상에서 겹쳐지지 않게 하기 위함

 

https://awesomebit.tistory.com/22

 

 

6. 캐시 메모리

캐시 메모리

- CPU는 매우 빠르게 동작하지만, 메모리는 CPU에 비해서 상대적으로 느림

- 중간에 데이터를 미리 모아놓기 위한 공간으로 캐시메모리 사용.

- 캐시메모리는 레지스터보다 크나 메모리에 보다 매우 작음

- 아래의 그림은 CPU와 캐시 메모리, 메모리 사이의 구조를 보여줌

https://m.blog.naver.com/PostView.nhn?blogId=remocon33&logNo=220129153263&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

 

 

7. 페리페럴 Peripheral

페리페럴

- MCU 내부에 존재하는 주변장치들, 주변장치들을 사용하기 위한 단자

- 대표적으로 통신 페리페럴로 UART, SPI, I2C 등이 존재

- 아래의 그림은 페리페럴들의 예시

https://www.renesas.com/us/en/support/technical-resources/engineer-school/mcu-programming-peripherals-01-gpio.html

 

UART Universal Asychronous Receive Transmiter

- 범용 비동기 수신 발신기로 송신용 Tx와 수신용 Rx 신호선 2개로 구성됨

- 비동기 인 만큼 클럭에 상관없이 통신은 가능

- 아래의 그림은 UART 통신 시 연결

https://www.weekitech.com/2019/05/13/introduction-to-uart/

- 아래의 그림은 UART 통신시 데이터 프레임(형태)

https://m.blog.naver.com/PostView.nhn?blogId=1992cjm&logNo=220438189832&proxyReferer=https:%2F%2Fwww.google.com%2F

 

 

 

RS-232

- 비동기 통신 중 길이와 속도를 맞추기 위해 RS-232라는 표준이 제정됨

 => RS-232로 특정 규칙에 따라 UART 통신이 안정적으로 수행됨

- 아래의 그림은 RS-232 핀아웃 별 의미

http://raspberrypi.tomasgreno.cz/uart-to-rs-232.html

 

- 아래의 그림은 RS-232 통신 시 데이터 프레임

https://qastack.kr/electronics/110478/difference-between-uart-and-rs-232

 

 

 

 

명령어 실행과정

- 명령어 실행 사이클이라도 함

- 메모리에서 명령어를 가져오고 fetch, 명령어를 해독 후 decode, 실행 excution하는 과정

https://kasckasc.tistory.com/entry/2-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%98-%EC%8B%A4%ED%96%89-%EA%B3%BC%EC%A0%95-%EB%B0%8F-CPU-%EA%B5%AC%EC%A1%B0%EC%99%80-%EC%9B%90%EB%A6%AC

 

 

 

 

파이프라인

파이프라인 구조

- 명령어 실행 과정으로,  패치 -> 해석 -> 실행 -> 저장 으로 정리할 수 있음

- 이를 고속으로 하기 위한 구조를 파이프라인. 

 

파이프라인과 싱글라인의 차이

- 기존의 싱글 라인 구조는 하나의 명령어가 종료될때까지 다음 명령어가 대기

- 파이프라인 구조에서는 첫 명령어가 다음 단계로 넘어가면 새로운 명령어가 들어와 여러 명령어가 동시 수행

- 아래의 그림은 파이프라인 구조 예시

https://doitnow-man.tistory.com/72

 

 

 

인터럽트

인터럽트란

- 프로그램 수행시 중간에 처리해야하는 상황과 동작 -> 예외처리/인터럽트라 부름

- 인터럽트 발생시 인터럽트 종류에 따라(인터럽트 벡터 테이블을 참고하여) 정해진 명령으로 PC의 값이 변경됨

- 아래의 그림은 인터럽트 벡터 테이블로 인터럽트 종류에 따라 수행해야할 동작들의 주소를 알려줌

 

https://blog.naver.com/seim_ryu/110020336124

 

인터럽트 관련 용어

- 인터럽트 벡터 :인터럽트를 처리하기위한 PC값으로 벡터 테이블에서 프로그램 카운터 값을 가져옴

- 인터럽트 핸들러 ISR Interrupt Service Routine : 인터럽트 발생시 처리해야할 콜백 함수

- 아래의 그림은 인터럽트 처리 과정

을 보여줌

https://m.blog.naver.com/PostView.nhn?blogId=scw0531&logNo=220650635893&proxyReferer=https:%2F%2Fwww.google.com%2F

 

 

 

 

 

 

 

300x250

+ Recent posts