PC
=> 애플리케이션에 따라 다양한 일을 함
일반적인 임베디드 시스템
=> 기능이 정해진 목적에 따라 구성되어 전용 동작을 함 -> 동작 중에 기능이 변화하는 일이 없음.
=> 실시간성(시간 제약)이 있음
-> 동작 환경, 제어 대상에 맞추어 동작하도록 설계해야 함
-> 하드 리얼타임: 시간 제약을 만족시키지 않는 경우 중대한 사고
-> 소프트 리얼타임: 소프트웨어 업데이트로 처리 속도가 향상되는 때도 있는 실시간성
CPU: 계산에 필요한 부품을 하나의 칩으로 합쳐 놓은 것
마이크로컴퓨터: CPU에서 다양한 기능을 탑재한 것.
주변장치: 마이크로 컴퓨터로 실현할 수 있는 기능을 늘리기 위해 추가됨.
즉, 주변에서 접속되는 하드웨어. 마이크로컴퓨터의 CPU로부터 제어됨.
버스: CPU <-> 주변장치는 버스(신호선)에 접속됨.
CPU로부터의 지시는 버스를 경유해 전달, 주변장치로부터 출력, 주변장치로부터의 입력은 버스를 경유해 CPU에 전달.
마이크로컴퓨터: 마이크로프로세서 중 1개의 칩 내에 CPU, 일정 용량의 메모리(ROM, RAM 등)와 입출력 제어 인터페이스 회로까지 내장한 것
LED ON/OFF는 주변장치만으로 구현 가능
BUT 100ms마다 LED ON/OFF 되는 장치는 CPU 없이 구현 불가
BUT 절차로 기술한 '프로그램'은 CPU에 전달해야 하고, 이때 '보관'에 메모리가 필요
ROM: 프로그램 자체를 보관하여 CPU에 절차를 전달하기 위해 사용(읽기 전용 메모리)
RAM: CPU가 ROM으로부터 읽어 들인 절차를 실행할 때 이용
읽기 전용 메모리
프로그램을 보관해서 CPU에서 읽기 요구가 있을 때 프로그램을 읽고 CPU에 프로그램 전달하는 역할을 담당.
사람이 기록한 절차를 기억해서 그 절차에 따른 기능을 CPU에 실행시킴
프로그램 실행 때 일시적으로 데이터의 보관이 필요할 경우에 사용
ROM은 읽기만이 가능한 메모리이므로 일시적인 보관 장소로는 이용할 수 없기 때문
시리얼 콘솔에 문자를 출력할 때 문자나 숫자는 CPU에서 생성되고, 이것들의 값을 시리얼로 전달하기 위해 RAM에 일시적으로 보관해둔다.
ROM: 비휘발성 메모리(non-volatile memory), 전원이 꺼져도 내용이 지워지지 않음
MASK ROM, PROGRAMMABLE ROM
RAM: 휘발성 메모리(volatile memory), 전원이 꺼지면 내용도 지워진다.
DRAM(dynamic ram), SRAM(static ram)
메인 버스 -> 고속 주변 장치(메모리)는 CPU로부터 고속으로 제어하길 바람, 메인 버스로 접속
로컬 버스 -> 저속으로 동작하는 주변장치는 브리지를 경유해서 로컬 버스로 접속
CPU와 메모리, 또는 주변장치에 접속하기 위한 신호선
버스 신호는 클럭(타이밍 신호)에 동기화되어 CPU로부터의 지시 대상이 되는 메모리, 주변장치에 지시를 전달하는 데 사용됨.
버스는 CPU에서 지정해서 동작됨.
RAM을 선택하는 컨트롤 버스의 칩 셀렉트 신호, 읽기 가능 신호, 주소 버스에 읽어 낼 주소
-> 클럭이 시작할 타이밍에 지정
RAM 해당 번지의 데이터가 데이터 버스에 출력됨.
이 출력된 데이터를 CPU가 읽어서 레지스터에 보관함.
컨트롤 버스의 칩 셀렉트 신호, 쓰기 가능 신호, 주소 버스에 기록하고자 하는 번지, 데이터 버스에 기록할 데이터
-> 클럭이 시작할 타이밍에 지정
쓰기 가능한 동안 RAM의 해당 번지에 기록함.
메인 버스와 달리 메인 버스의 클럭 속도보다도 저속으로 동작하는 주변 장치를 제어하는 신호선으로 되어 있음.
로컬 버스를 사용해서 많은 주변장치에 접속 가능.
메인 버스와 로컬 버스를 연결하는 컨트롤러
고속으로 동작하는 메인 버스와 저속으로 동작하는 로컬 버스와의 속도차를 통제해 주는 하드웨어.
FIFO(First In First Out)을 구현한 하드웨어 등에서 저속의 로컬 버스로부터의 데이터를 관리하고, 고속의 메인 버스 타이밍에 맞춰 데이터를 송수신해 주는 하드웨어.
Universal Asynchronous Receiver/Transmitter
동기식 직렬 신호를 병렬 신호로, 역으로 병렬을 직렬로 변환하는 하드웨어, 로컬 버스에 접속됨.
CPU에서 8-16비트의 폭으로 데이터가 병렬 전송됨.
복수의 데이터 신호 -> 직렬의 데이터 신호로 변환해 직렬 신호로 송신
직렬 신호를 수신받으면 복수의 데이터 신호가 될 때까지 데이터를 담아 놓고,
CPU로 데이터를 보내기 위해 병렬로 데이터를 변환 후에 송신
UART끼리 통신할 때: 비동기 직렬 통신.
비동기 방식 = 지금부터 데이터를 보낸다, 이것으로 데이터가 끝났다라는 신호를 실제 데이터 사이에 보내서 데이터를 송수신하는 장치끼리 상호 인식을 하며 통신하는 방식.
시리얼 클록(Serial Clock, SCL)과 양방향 시리얼 데이터(Serial DAta. SDA)의 2개의 신호선을 사용해 통신하는 동기식 직렬 통신.
마스터 장치 <-> 슬레이브 장치
마스터 장치는 개별로 정해진 슬레이브의 주소를 지정해 복수의 슬레이브 장치에 접속할 수 있음.
시리얼로 제어하는 버스
SCK = 시리얼 클록
SDI = 시리얼 데이터 인
SDO = 시리얼 데이터 아웃
세가지 신호선으로 통신하는 동기식 직렬 통신
버스에서 제어 버스인 슬레이브 셀렉트(SS)를 이용해 마스터에서 (복수의) 슬레이브 디바이스를 선택해 통신할 수 있다.
I2C보다 고속으로 통신이 가능하다. BUT 많은 신호선이 필요함.
SPI는 플래시 메모리 같은 스토리지 디바이스, CPU 간의 통신 등에 많이 사용됨.
직접 메모리에 엑세스하는 주변장치.
CPU가 메모리의 데이터 읽쓰를 실행.
-> PIO(Programmed I/O)라고 부름
PIO 방식으로 대량의 데이터를 읽고 쓰면 CPU는 다른 처리를 할 수 없게 됨.
DMA -> PIO와 다르게, CPU를 사용X, 메모리의 데이터를 읽쓰 주변장치.
-> 즉, 메모리를 읽쓰 도중에 다른 처리를 할 수 있음.
bus arbiter는 버스를 사용하기 위한 버스 중재를 실시(각 주변장치 사이, 혹은 CPU로부터의 데이터가 충돌 안 나게 함).
DMA 실행 시에는 버스 아비터가 버스의 중재를 실시해 데이터가 충돌하지 않도록 제어함
데이터를 메모리에 전송하는 동안 버스를 점유, 메모리 액세스가 느려지는 일도 있음
DMA 컨트롤러의 전송 모드에 메모리 액세스에 영향이 발생하지 않도록 하는 제어 방법도 있으므로 설정을 파악해 두어야 한다.
임베디드 시스템에서 반드시 이용하는 주변 장치
프로그램에서 주변장치를 주기적으로 감시, 주기적으로 데이터 출력 등 시간 관련 처리를 위해서 필수적인 주변장치
카운터라고 부르는 레지스터에 주기 시간을 설정함.
주기 시간 경과 이후 처리 중간에 끼어들어 그 사실을 CPU에 통지.
CPU는 인터럽트를 받아들여 해당 프로그램을 동작시키면서 주기적인 처리를 실현
시간을 관리하기 위한 주변장치
매초 시간이 갱신됨
CPU가 재개한 때에 정확한 시간을 알 수 있도록 RTC로 시간을 관리
CPU가 외부로부터의 입력 및 출력을 범용으로 입출력할 수 있는 포트
실제로 CPU에 연결되어 있는 포트.
CPU의 설정을 통해 활성화/비활성화 가능
외부의 주변장치로부터의 인터럽트 신호에 사용하는 등 범용적으로 입력/출력에 사용 가능
레지스터(제어용 메모리)를 사용해 CPU로부터 제어
각 주변장치에 따라 비트 위치, 비트 폭 등의 구성이 다름.
<공통> CPU가 제어할 때 레지스터로의 쓰기/읽기를 통해 제어
<차이> 각 주변장치에 따라 비트위치, 비트 폭 등의 구성이 다름
ROM, RAM과 마찬가지로 주변장치의 레지스터도 메모리로 취급
CPU는 파일을 메모리에서 접근 가능하게 된다. 이를 통해 CPU는 read() 혹은 write()등의 System call을 사용하지 않고 메모리에 data를 읽고 쓰는 것처럼 사용 가능하다.
ROM, RAM은 메모리 공간으로 취급
메모리와 입출력의 주소 공간을 분리한다.