Memory Mapped IO란?

주기억장치들의 일부 주소를 입출력장치에 할당하는 방법으로,

해당 방식은 별도의 하드웨어 신호핀을 두지않고 Address line에 따라 분기하여 하드웨어에 접근하는 방식이다.

특징으로는 

  • 메모리 일부 공간을 I/O 포트에 할당
  • 메모리와 입출력 번지 사이의 구별이 없음
  • 메모리 명령으로 사용 가능
  • 기억장치 이용 효율이 낮고 (I/O 포트가 주소영역을 공유하기 때문에)  H/W가 간단

상대되는 방식으로는 I/O Mapped I/O가 있다

 

 

STM32F103RB 기준으로 확인하기

임베디드 프로그래밍에 사용되는 ARM  프로세서는 memory mapped I/O 방식을 사용한다.

SSAFY 수업에서 사용했던 STM32F103RB 기준으로 설명해보겠다.

 

STM32F103RB 

datasheet에서 Memory mapping 부분을 확인하면 메모리가 어떻게 사용되는지 확인할 수 있다.

주소가 낮은 곳에 시스템과 기억장치가 맵핑되어 있고,

주소가 높은 곳에 입출력관리 및 peripherals(주변장치)가 메모리에 맵핑되어 있는 것을 확인할 수 있다.

 

많은 임베디드 시스템에 사용되는 memory mapped i/o 방식은 메모리에 맵핑된 해당 장치의 레지스터 직접 접근하여 제어한다. 

제어 방법은 referenece manual을 참고하여 해당 레지스터에 값을 입력하는 방식으로 제어할 수 있다.

 

만약 port A의 GPIO를 제어하고 싶으면 referenece manual의 3.3장 Memory map에서 base address를 찾고

원하는 설정 값에 따라서 base address + offset 주소에 설정 값을 넣어주면 제어할 수 있다!

'Computer Science > 임베디드' 카테고리의 다른 글

임베디드 개발 영역  (1) 2024.12.13
유선 통신 기초  (0) 2024.08.19

임베디드 개발 영역

임베디드 개발 영역은 크게 3개로 나뉜다

  • Application Level 임베디드 sw 개발자
  • Middleware Level 임베디드 sw 개발자
  • Low level 임베디드 sw 개발자

임베디드에서 사용되는 운영체제

  • 리눅스
  • RTOS
  • 자체적 운영체제 (firmware)

Applicaiton level 개발자

application이란?

운영체제 안에서 동작하는 프로그램

 

application 개발이란?

  • 각각 운영체제에 맞는 앱을 개발
    • 리눅스 운영체제
      • 리눅스 App 개발
    • RTOS 운영체제
      • RTOS 운영체제 App 개발
  • GUI 개발
  • 검증 SW 개발
  • 주로 C / C++ / C#을 주로 사용

 

Middleware level 개발자

Middleware란?

application과 운영체제의 중간 다리 역할을 한다

  • 운영체제의 신호를 App이 가져할 수 있는 API
  • App level에서 운영체제에 신호를 전달하는 API

middleware 개발이란?

  • application level 개발자를 위한 library / API 개발
  • 해당 문서 작성
  • 성능 최적화
  • 시스템 통합 및 테스트
  • 주로 사용되는 언어
    • Android
      • JAVA / C / C++
    • RTOS
      • C

Low level 개발자

Low level 개발이란?

  • Firmware 개발
    • H/W를 제어하는, 작은 운영체제 직접 개발
    • 주언어: C, Assembly
  • Device Driver 개발
    • 커널 내부에서 동작되는 프로그램으로 hw를 제어하는 프로그램 개발
    • 주언어: C

 

'Computer Science > 임베디드' 카테고리의 다른 글

Memory Mapped IO  (0) 2024.12.13
유선 통신 기초  (0) 2024.08.19

통신의 기본 요소

  1. 시간 동기화
  2. 데이터를 주고 받는 선
  3. 통신 대상 지정

 

시간 동기화

SPI 통신 - 해당 그림은 clock이 low에서 high로 갈 때 신호 구분 (라이징) / 반대의 경우인 폴링일 수도 있음

통신은 low와 high로 구분되어 오게 되는데 해당 신호 구분을 위하여 신호를 쪼갤 수 있는 기준이 필요

  1. 동기: master와 slave 간의 동기화 신호인 clock을 사용
  2. 비동기: master와 slave 간 같은 시간 베이스를 사용 (ex: baud rate), clock을 사용할 때에 비해 전송 속도에 한계가 있음

데이터를 주고 받는 선

데이터는 주는 선, 받는 선을 구분할 수도 있고, 한 선을 공통으로 같이 사용할 수 있음.

한 선을 공통으로 같이 사용하는 경우에는 송신과 수신이 동시에 이루어질 수 없음

  1. 전이중 방식: 송신선과 수신선이 구분, 송수신이 동시에 이루어짐
  2. 반이중 방식: 공통된 송수신선 사용,  송수신이 동시에 이루어질 수 없음

통신 대상 지정

master에서 보낸 신호가 어떤 slave로 갈지 정해줘야 함

  1. 별도의 선 존재 (ex: cs선)
  2. 모든 slave에 신호를 전달하는 대신 신호 앞에 주소를 명시하여 어떤 slave에게 보내는 신호인지 알 수 있도록 함

 

예시

UART (Universal Asynchronous Receiver/Transmitter)

UART

  • CLK선 없음 = 해당 통신은 비동기 통신이며, 신호 구분을 위하여 공통된 time base를 사용한다 (baud rate)
  •  RX, TX선이 각각 존재 = 전이중 방식으로 송수신이 동시에 가능. master에서 slave로 송신만 필요한 경우에는 TX 선만 있어도 됨
  • 기본적으로  UART는 1:1 통신을 염두에 두고 설계됨
  • GND선은 신호의 low 기준을 잡아줘서 안정적인 통신을 가능하게 함

SPI (Serial Peripheral Interface)

SPI

  • CLK선 존재(SCLK) = 동기 통신, UART에 비해서 빠른 데이터 전송 속도
  • MOSI (Master Out Slave In), MISO (Master In Slave Out)으로 송수신 선이 각각 존재하는 전이중 방식, 데이터의 송수신이 동시에 가능
  • SS (Slave Select or CS Chip Select)선이 존재하여 특정 slave와 활성화

I2C (Inter-Integrated Circuit)

I2C 통신선 및 데이터 구조

  • CLK선 존재(SCL) = 해당 통신은 동기 통신
  • 한 개의 데이터 선 = 반이중 방식으로 송수신이 동시에 불가능
  • SS선 없음, 데이터 구조 앞에 address 존재 = 모든 slave에 신호를 전달하고 데이터 앞의 address로 수신 slave를 지정 

CAN (Controller Area Network)

CAN 통신선 및 데이터 구조

  • CLK 선 없음 = 비동기 통신
  • CAN_H, CAN_L이라는 2개의 데이터 선으로 통신. 신호선 간의 전압 차이를 통해 데이터가 전송하는 차동 신호 방식. 해당 방식은 노이즈에 강하고, 데이터 신호의 무결성을 보장.
  • 따라서 데이터 선은 2개를 사용하지만 이는 송수신 선이 따로 구성되어 있는 것이 아니라 신뢰성이 높은 공통된 송수신선을 사용하는 방식인 반이중 통신
  • SS 선 없음, 데이터 구조 앞에 identifier 존재 = 모든 node에 신호를 전송하고 각 node는 identifier를 보고 메세지의 우선 순위와 필터링을 적용하여 필요한 메세지만을 수신하게 됨

'Computer Science > 임베디드' 카테고리의 다른 글

Memory Mapped IO  (0) 2024.12.13
임베디드 개발 영역  (1) 2024.12.13

+ Recent posts