임베디드 입출력 장치 + Sound & 온습도 & PIR & 조도 센서

공부하자·2022년 10월 5일
0

임베디드 입출력 장치

입출력 장치

  • 입출력장치(input/output unit)
    • CPU에서 외부와 코드화된 정보(coded information)를 교환하는 장치
      • 키패드, LCD, 터치스크린, 키보드, 마우스 등 사용자 인터페이스
      • 시리얼 UART, 이더넷, LTE모뎀 등 통신 장치
  • 입출력 장치 동작
    • 입력 데이터는 CPU에서 직접 또는 메모리에 저장 후 처리
    • 출력 데이터는 CPU에서 직접 또는 외부 메모리에 저장된 데이터를 출력
    • 되는 정보 역시 메모리에서 외부로 전달
    • CPU는 디지털 신호로 정보를 교환하고 최종 입출력 단과는 디지털 또는 아날로그 신호를 이용하여 데이터 교환

입출력 장치 : CPU에서 외부와 coded information을 교환하는 장치
동작 순서
1) 입력 데이터는 CPU에서 직접 또는 메모리에서 저장 후 처리
2) 출력 데이터는 CPU에서 직접 또는 외부 메모리에 저장된 정보 출력
3) 되는 정보 메모리에서 외부로 전달
4) CPU는 디지털 신호로 정보를 교환하고 최종 입출력 단과는 디지털 또는 아날로그 신호를 이용하여 데이터 교환

입출력 장치 제어

  • CPU의 입출력 장치 억세스
    • 데이터를 읽거나 쓰기 위해서 어드레스, 데이터 및 각종 제어 신호 이용
    • CPU에서 사용하는 어드레스는 전체 시스템의 메모리 맵에서 일부가 할당되어 사용될 수도 있고, 입출력 장치 전용의 주소 공간을 할당하여 사용 가능
  • I/O 맵 방식(I/O-mapped peripheral) 방식
    • 인텔의 x86 프로세서 계열의 경우 입출력 장치 전용의 주소 공간을 확보
    • 입출력 장치를 억세스 하기 위하여 in 또는 out 과 같은 별도의 명령 사용
  • 메모리 맵 방식(Memory mapped peripheral) 방식
    • 대부분의 임베디드 시스템에서 사용, 메모리의 일부를 입출력 장치 공간으로 할당해서 사용
    • CPU는 메모리를 읽고 쓰는 Load/Store 명령 사용

I/O 맵 방식 : 입출력 장치 전용 주소 공간 확보. in,out 명령 사용
메모리 맵 방식: 대부분 임베디드 시스템 사용, 메모리 일부를 입출력 장치 공간 할당. Load/Store 명령 사용


  • I/O 맵 방식
    • 대표적인 프로세서: x86 계열
    • 입출력 장치 영역: 메모리 영역과 별도의 I/O 영역이 존재
    • 명령어: 메모리 억세스 명령과 I/O 억세스 명령(in/out)이 구분
    • 하드웨어: 메모리 번지와 I/O 번지를 구분하는 신호가 존재.
  • 메모리 맵 방식
    • 대표적인 프로세서: ARM, MIPS, PowerPC, M68K
    • 입출력 장치 영역: 메모리의 일부를 I/O 장치로 사용
    • 명령어: 메모리와 I/O 장치 모두 메모리 동작 명령사용, 메모리와 IO 영역의 구분은 어드레스로 구분
    • 하드웨어: 어드레스를 해석하는 디코더 회로에 따라 메모리 혹은 I/O 장치가 선택
    • 주의 사항: I/O 영역 변수는 volatile 타입으로 선언, I/O 영역은 Non-cacheable로 설정

메모리 맵 방식 억세스

  • CPU는 메모리를 읽고 쓰는 Load/Store 명령 사용
  • C에서 메모리 맵 방식으로 입출력 장치를 제어 하는 경우 포인터 변수 사용
    • 선언된 포인터에서 데이터를 읽거나 기록하는 방식 사용

Load/Store 명령 사용. C언에서는 pointer 변수 사용

입출력 장치 자원 관리

  • 입출력 장치의 자원 관리란?
    • 입출력 장치로 입력 또는 출력 되는 데이터를 CPU(프로세서)와 메모리 사이에 주고 받는 방법을 말함
  • IO 자원 활용
    • CPU(프로세서)는 입력 장치에서 입력되는 데이터를 읽어 처리를 하거나 메모리에 저장하고, 처리된 데이터나 메모리에 저장되어 있는 데이터를 출력 장치를 통하여 외부로 구동
    • CPU(프로세서)는 메모리 장치 및 입출력 장치에 데이터를 읽거나 쓸 때 어드레스, 제어신호 및 데이터 버스를 사용
    • 입출력 장치는 메모리와 달리 CPU(프로세서)에게 입출력 동작을 요구하기 위하여 인터럽트 사용 할 수 있고, DMA(Direct Memory Access)장치를 이용하여 입출력 장치와 메모리 장치 사이에 직접 데이터 교환 가능

입출력 자원 관리: ㅇ데이터를 CPU와 메모리 사이에 주고 받는 방법
IO 자원 활용 : CPU는 데이터 읽어서 처리 및 저장하며, 메모리 데이터를 출력 / 어드레스, 제어신호, 데이터 버스 사용 / interuupt 사용 가능, DMA 장치를 이용해 직접 데이터 교환 가능

입출력 장치 자원 활용 방법

  • 폴링(Polling)
    • 프로세서가 프로그램이나 장치들이 어떤 상태에 있는지를 지속적으로 검사하는 전송 제어 방식
    • 프로세서는 입출력 장치와 데이터를 교환하기 전에 항상 입출력 장치의 접속 여부 및 데이터 전송의 요청과 종료를 검사
  • 인터럽트(Interrupt)
    • 외부의 입출력 장치에서 프로세서에게 처리를 요청하면 프로세서는 현재 처리하고 있는 프로그램을 일시적으로 멈추고 입출력 처리를 하는 방식
    • 모든 작업이 동시에 수행되는 것처럼 보이게 할 수 있는 멀티태스킹을 지원 가능
    • 임베디드 시스템의 자원을 활용하는 방식 중에서 가장 많이 사용
    • OS(Operating System)을 사용하는 경우에는 모든 입출력 동작은 인터럽트 방식 사용

  • DMA(Direct Memory Access)
    • 입출력 장치와 기억장치 사이에 데이터를 직접 전송
    • CPU는 초기에 전송 방법만 설정하면 DMA 제어기가
      직접 데이터를 전송

폴링 : 지속적으로 상태 검사 / 데이터 교환 전에 검사
인터럽트 : 일시 멈춤 / 멀티태스킹 지원 / OS
DMA : 직접 전송, CPU는 전송 방법만 설정

버스 (Bus)

  • 버스는 CPU, 메모리, IO 장치 간 데이터를 전송하는 통로
  • 시스템 버스(System Bus)
    • CPU와 메모리, IO와 연결하기 위한 버스
    • AMBA 버스 등
  • 메모리 버스 (Memory Bus)
    • 메모리 장치와 연결하는 경로
    • 어드레스, 데이터 및 제어신호로 구성
  • 입출력 버스 (I/O Bus)
    • 입출력 장치와 연결하는 경로
    • 병렬버스(Parallel Bus) : 어드레스, 데이터 및 제어신호로 구성
      • Non-multiplxed bus : 어드레스, 데이터 및 제어신호 분리된 신호 사용, ISA, EISA 버스 등
      • Multiplexed bus : 어드레스와 데이터를 같은 신호로 사용, PCI bus 등
    • 직렬버스(Serial Bus) : 일반적으로 클록과 데이터 신호로 구성
      • USB bus, UART, RS232, RS485, I2C bus, CAN bus 등
      • 주로 주변 장치 연결에 사용

버스 : 데이터 전송 통로
메모리 버스 : 메모리 장치와 연결하는 통로 / 어드레스, 데이터, 제어신호
입출력 버스 : 입출력 장치와 연결하는 통로

  • 병렬 버스 : 어드레스, 데이터 및 제어신호
    • Non-multiplexed bus : 분리된 신호 사용
    • multiplexed bus : 어드레스와 데이터 같은 신호로 사용
  • 직렬 버스 : 클록과 데이터 신호
    • 주변 장치 연결에 사용

Peripheral Interfaces in ESP32

  • ESP32는 다양한 주변기기 확장을 위하여 여러 통신 protocol을 내장하고 있음
    • 34 × programmable GPIOs
    • 12-bit SAR ADC up to 18 channels
    • 2 × 8-bit DAC
    • 10 × touch sensors
    • 4 × SPI
    • 2 × I²S
    • 2 × I²C
    • 3 × UART
    • 1 host (SD/eMMC/SDIO)
    • 1 slave (SDIO/SPI)
    • Ethernet MAC interface with dedicated DMA and IEEE 1588 support
    • CAN 2.0
    • IR (TX/RX)
    • Motor PWM
    • LED PWM up to 16 channels
    • Hall sensor

I2C (Inter-Integrated Circuit)

  • Synchronous, multi-master, multi-slave, packet switched, single-ended, serial communication bus
    • 1982년 Philips Semiconductors에 의해 제안
  • IC, microcontrollers간 저속, short-distance, intra-board 통신 프로토콜
  • 풀업 저항이 연결된 직렬 데이터(SDA)와 클럭(SCL)이라는 두 개의 양 방향 오픈 컬렉터 라인 사용
    • 최대 전압은 +5 V, 일반적으로 +3.3 V
  • 7 비트의 주소 공간 (16개는 reserved)
    • 동일한 버스에 최대 112개의 노드를 연결 가능 (2^7–16 = 128–16 = 112)
    • 속도
      • 표준 모드 : 100 kbit/s
      • 저속 모드 : 10 kbit/s
      • 패스트(fast) 모드 : 400 kbit/s
      • 고속(high-speed) 모드 : 3.4 Mbit/s
      • 최대 1008 노드까지 연결 가능한 10 비트 주소 지정 등의 확장된 기능 지원

serial
short-distance, intra-board
풀업 저항이 연결된 직렬 데이터(SDA)와 클럭(SCL)이라는 두 개의 양방향 오픈 컬렉터 라인 사용
7비트 주소 공간 : 최대 112개의 노드 연결 가능

SPI (Serial Peripheral Interface Bus)

  • Full-duplex synchronous serial communication interface specification used for shortdistance communication, primarily in embedded systems.
  • 주로 임베디드 시스템에서 단거리 통신에 사용되는 전이중 동기 직렬 통신 인터페이스 사양이다.
    • Motorola에 의해 1980년대 중반에 개발되어 업계의 de facto standard로 사용됨
  • Master-Slave 구조로 이루어져 있으며 4개의 논리 신호로 통신을 제어
    • SCLK: 직렬 클럭 (마스터로부터의 출력)
    • MOSI; SIMO: 마스터 출력, 슬레이브 입력 (마스터로부터의 출력)
    • MISO; SOMI: 마스터 입력, 슬레이브 출력 (슬레이브로부터의 출력)
    • SS: 슬레이브 셀렉트 (active low, 마스터로부터의 출력)


Full-duplex
Master-Slave 구조

UART(Universal asynchronous receiver/transmitter)

  • 병렬 데이터의 형태를 직렬 방식으로 전환하여 데이터를 전송하는 통신 집적회로
    • RS-232, RS-422, RS-485와 같은 통신 표준과 함께 사용
  • 통신 데이터는 메모리 또는 레지스터에 들어 있어 이것을 차례대로 읽어 직렬화
    • 8비트가 기본 단위


병렬 데이터 형태를 직렬 방식으로 전환하여 데이터를 전송하는 통신 집적회로
"직렬화"
8비트 기본 단위

Kepler ESP-A I/O Extensions

Sound Sensor

Microphone 입력 회로

  • Michrophone 센서
    • 주변에서 발생되는 소리를 마이크로 모아 소리 크기를 증폭시켜 출력
    • 소리 감지 센서는 공기의 진동을 인식하여 그에 따른 전압을 출력
  • 회로 구성
    • 2개의 OP-amp(Operational Amplifier, 연산 증폭기)가 포함된 이중 연산 증폭기(LM358)가
    • 입력으로 들어오는 소리의 Noise를 제거하고 증폭하는 과정

OpAMP (LM358)

  • Dual Operational Amplifier LM358

인터페이스 회로 구성



Microphone in REAL CUBE

  • 소리 측정 시험을 위해 Real CUBE 인터페이스 보드 사용
  • 소리(MIC)센서는 아날로그(ADC) 입력 단자를
    통해 소리 값을 측정
  • Real CUBE를 메인보드 커넥터(50pin*2)에 연결하며, 보드를 연결할 때는 전원이 꺼진 상태에서 연결

온습도 센서

BME280 (온습도 센서)

  • BME280: I2C/SPI통신을 이용하며 온도, 습도, 압력(기압)을 측정/전송
    • 측정센서 : 온도, 습도, 압력
    • 측정범위 : 온도 : -40~+85°C
    • 습도 : 0~100 %
    • 압력 : 300~1100 hPa
    • 통신 : I2C (up to 3.4 MHz)

BME280 회로

  • I2C 통신을 위한 SDA(R_I2C_SDA) , SCL(R_I2C_SCL)
  • 각 I2C 슬레이브들은 고유의 주소를 가짐
    • BME280 디바이스의 I2C Slave 주소 값은 SDO핀에 의해 결정
    • Low인 경우 0x76, High인 경우 0x77
    • REAL CUBE 온습도 센서의 I2C주소 값은 0x77(*1110111)로 지정

  • I2C로 Read 동작
      1. Slave주소(7bit+W) + 레지스터 어드레스(1Byte)
      1. Slave 어드레스(7bit+R) + 데이터(1Byte)로 Single or Multi Byte Read

Memory Map of BME280

  • Available in the datasheet (BST-BME280_DS001-10.pdf)

Read Values from BME280

  • Through I2C

To be able to read registers, first the register address must be sent in write mode (slave address 111011 X 0. Then either a stop or a repeated start condition must be generated. After this the slave is addressed in read mode (RW = '1') at address 111011X1, after which the slave sends out data from auto-incremented register addresses until a NOACKM and stop condition occurs. This is depicted in Figure 10, where register 0xF6 and 0xF7 are read.

레지스터를 읽을 수 있으려면 먼저 레지스터 주소를 쓰기 모드로 보내야 한다(슬레이브 주소 111011 X 0). 그런 다음 중지 또는 반복적인 시작 조건을 생성해야 한다. 이후 슬레이브는 주소 111011X1에서 읽기 모드(RW = '1')로 주소를 지정하고, 이후 NOACKM 및 중지 조건이 발생할 때까지 자동 증분 레지스터 주소에서 데이터를 전송한다. 이는 그림 10에 나타나 있으며, 레지스터 0xF6 및 0xF7이 읽혀진다.

BME280 Data Read 구현

  • hardware\espressif\esp32\libraries\SparkFun_BME280_Arduino_Library-master\src 참조

BME280 Arduino API

hardware\espressif\esp32\libraries\SparkFun_BME280_Arduino_Library-master\src 참조
• void setI2CAddress() : I2C 어드레스 설정
• bool beginI2C() : I2C 시작
• void setReferencePressure() : Reference 압력 설정
• float readFloatPressure() : 압력 읽기, 단위 Pa(파스칼)
• float readFloatAltitudeMeters() : 높이를 미터 단위로 읽기
• float readFloatHumidity() : 습도 읽기
• float readTempC() : 온도를 섭씨 단위로 읽기
• float readTempF() : 온도를 화씨 단위로 읽기
• double dewPointC : 노점을 섭씨 온도 단위로 리턴
• double dewPointF : 노점을 화씨 온도 단위로 리턴

BME 280 in REAL CUBE

  • 온 습도 측정 실험을 위해 Real CUBE 보드 사용
  • 온 습도 센서(BME280)는 I2C통신을 통해 데이터를 입력
  • REAL CUBE를 메인보드 커넥터(50pin*2)에 연결하며, 보드를 연결할 때는 전원이 꺼진 상태에서 연결


PIR 센서

PIR(수동 적외선:Passive Infrared) 움직임 센서

  • 인체에서 방출하는 온도 에너지의 변화를 검출
  • 적외선 움직임이 감지되면 HIGH 값을 보냄

I/O Interface Board와 PIR 센서

  • I/O CUBE 보드와 PIR 센서 보드

I/O CUBE

  • I/O CUBE는 외부 입력 및 출력장치를 연동하기 위해 사용되는 확장보드
  • 주요 구성은 디지털 입출력 포트(D0--D4), 아날로그 입력 포트(A0--A3), SPI, I2C, UART가 제공


확장 모듈 연결 방법 및 예시

GPIO(디지털,아날로그)핀의 경우 각 핀마다 GND(Ground),VCC(전원), SIG(신호)핀이 구성되어 있어 별도의 추가 회로 구성 없이 제공되는 센서의 케이블을 연결

  • 확장 모듈 예시

조도 센서

조도 센서

  • 조도 센서는 빛의 밝기에 따라 값이 변화하는 센서
    • 가시광의 조도를 측정하는 센서
    • 빛의 밝기에 따라 저항 값이 변함.
    • 밝으면 조도 센서의 저항 값 감소 (입력 값은 작아짐)
    • 어두우면 조도센서 저항 값 증가 (입력 값 커짐)
  • CdS(Cadmium sulfide : 황하카드뮴) 조도 센서
    • 광전도 현상을 이용한 센서


I/O Interface Board 조도 센서

  • I/O CUBE 보드와 조도 센서 보드
profile
아주대학교 수업 기록

0개의 댓글