RTOS에서.. 서로 엉키지 않기 위해서 사용하는 capabilities..?
1) Mutexes
1이면 free
resource를 사용하고 싶을 때 Mutex가 1인지 확인하고,
0으로 만들고 사용해 > 다 쓰고 나면 다시 1로 설정해주기!
2) Semaphore
비슷한데 더 많이(counting semaphore의 경우)
3) Queue
4) Event Flags
5) Timers
6) Dynamic Memory Allocation
- Heap Overflow / Heap Fragmentation
7) Deadlock
- 한 번에 하나의 뮤텍스만 Lock
- 동일한 순서로 뮤텍스를 잠그도록
8) Priority Inversion
- 작업 우선순위 역전 / 침범
External Memory
1) NOR flash - 더 안정적, 잦은 변경이 필요 없는 코드 저장용
2) NAND flash - 더 빠름, 요즘 많이 쓰임, 페이지 단위 읽고 쓰기
3) eMMC
4) HHD - 대용량 저장 장치
5) SRAM - 초기 RAM, 요즘은 internal mem으로 많이 사용됨
6) DRAM - 현재 DDR의 원형
7) SDRAM
8) DDR SDRAM
9) NVRAM
Words X Bits
Internal Memory
1) Register - 값을 저장, 명령어 연산을 위한 메모리 공간
2) Cache - 예측을 잘하는 게 중요, Hit Ratio !! Temporal Locality(반복문), Spatial Locality(배열) 가 있기 때문에 예측이 가능, Write Through < Write Back
* Page Cache : DISK에서 데이터 읽어오려면 넘 느려 -> DRAM의 일부를 DISK의 cache처럼 사용
Virtual Memory
가상의 메모리 - SW 관점의 메모리
MMU가 실제 물리적 메모리의 주소로 매핑해줌
1) 메모리 확장성 - 다양한 메모리를 하나의 메모리 공간에 연속적으로 매핑 가능
2) 모든 SW 프로그램에 동일한 메모리 공간 제공 가능 - 두 프로세스가 독립적인 물리적 메모리 공간을 필요로 할 때 서로의 상황을 확인하지 않고 그냥 자유롭게 하도록 하고 MMU가 각기 다른 메모리 공간을 할당해주면 돼
3) 메모리 할당과 관리 효율 - 물리적으로 연속적이지 않은 메모리라도 가상적으로는 연속적 메모리로 활용 가능
4) 메모리 보호 - 다른 프로세스의 메모리 공간 침범하는 일 막아줌
Memory mapped vs I/O mapped
- Mem mapped : Mem의 일부 영역을 I/O 장치 주소를 위해 사용, 명령어 동일, 임베디드 시스템
- I/O mapped : Mem 영역 <-> I/O를 위한 영역 구분, 명령어 따로, 별도의 신호 핀 필요, 복잡!!
DMA(Direct Memory Access)
- 프로세서의 개입으로 IO가 Mem에서 값을 읽어올수 있다고 하면 비효율적 - 그동안 프로세서 사용을 못하니까
- 메모리와 입출력 장치가 직접 데이터를 송수신 할 수 있도록 함
- 끝나면 Interrupt 발생 시켜
파일 시스템
: 기기의 저장장치에서 파일이나 자료를 쉽게 발견 / 접근할 수 있도록 보관 또는 조직하는 체계
- Read Only
- Read / Write
* Partitioning : 파일 시스템 포맷을 나눠 쓰는 것 / 공간 영역을 나눠쓰
파일 스시템 포맷
: 파일 시스템에서 사용하는 형식 / 규율
- 플래시 메모리를 마운팅하는데 소요되는 시간 / RAM에서 차지하는 크기와 관련 있음
ROOT 파일 시스템
: 가장 상위에 있는 파일 시스템 - 운영체제가 가장 먼저 로딩하는 파일 시스템
Mount
: 특정 파일시스템을 로딩하는 것 - 특정 파일 시스템 포맷으로 구성된 물리적인 디스크 영역을 시스템에서 사용할 수 있도록 연결하는 작업
Procfs
: 시스템의 정보를 확인할 수 있는 인터페이스
Sysfs
: 사용자에게 유용한 정보 제공을 목적 ; 주로 디바이스 정보
임베디드 시스템
- 특정 기능을 수행하도록 설계된 컴퓨터 시스템 ; 저전력이 주된 초점이 아니지만 저전력 기술을 필요로 하는 경우 있음
저전력 시스템
- 엥너지 사용 최적화되어 작동하도록
전력 최적화 및 관리 기술
센서 및 주변 기기 통합
소형 디자인
전문 하드웨어 및 소프트웨어 사용
실시간 데이터 처리
등의 유사성을 가져요....
Core System [4] 강의안의 초점 : 저전력을 어떻게 달성할 것인가?
- 절전 기술 관리
- 저전력 구성 요소 : 마이크로컨트롤러, 센서 및 주변 기기
- 소프트웨어석 설계
- PMIC
- 에너지 수집
PMIC
: 전압 레귤레이터(안정된 전압 출력), 충전 회로(충전이 안정적으로), 과열 방지(팬을 제어/전압 조절), 에너지 수집
절전 기술(Power Saving Mode)
- Sleep Mode : CPU clock stop
- Deep Sleep Mode : IO clock 까지 stop
- Standby Mode : Internal Mem 내용 손실, 전압 레귤레이터 OFF
- Clock Gating : 활성화된 Component에만 Clock 공급
- Dynamic Voltage & Frequency Scaling : 작업 부하에 따라 전압과 주파수를 동적으로 조정하여 전력 소모를 최적화
SW 설계
- 프로세서와 메모리 간 데이터 전송 줄이기
- 인터럽트를 이용해 프로세서 깨우기
- 통신 프로토콜 이용 - 데이터 전송 빈도를 줄이기
- 저전력 라이브러리 사용
- 테스트
전력을 잡으면..
처리 성능, 기능성, 메모리 사용량, 통신 대역폭, 디스플레이 해상도, 구성 요소의 통합, 전원 관리 최적화, 열 관리 등과의 Trade-Off 존재한다요?
배터리 기술의 제한 사항
- 에너지 밀도, 수명 제한, 온도 민감성, 리튬 이온 배터리 안전 문제, 크기와 무게, 충전 시간 제한, 대체 전원
팁팁....
1) 회로 운영 전압 선택 - 전체 시스템의 전압을 낮추어 전력 소모 줄이기
2) 구성 요소 / IC 선택 - 전력 소모 Budget을 고려한 IC 선택하기 (전력 소모 및 운영 전압이 낮은거)
3) 무선 모듈 - 전원 켜는 시간, 활성 상태 및 비활성 상태에서의 전력 소비 고려
4) 주변 장치 전원 게이팅 - On / Off 제어가 가능한지 Check
5) 전원 공급 - 보드에 적절한 전압 공급 / 선형 레귤레이터보다 dc to dc converter
6) LED 관리
7) 디스플레이 관리
8) 누설 전류 식별 및 감소
9) 풀업 저항값 키우기
10) 마이크로컨트롤러 및 SW 관리
임베디드 시스템의 주변 장치들에 대하여....
주변 장치와의 연결 - 하드웨어 인터페이스, 디바이스 드라이버(SW적 구성 요소), 프로토콜( 네트워크 통신에서 데이터를 교환하기 위한 규칙과 절차의 집합 ), 주변장치 컨트롤러
주변 장치 선택 시 고려사항 - 호환성, 시스템 요구사항, 통합 복잡성, 전력 소비, 확장성
주변 장치 접근 - IO mapped vs Mem mapped
- Device Register를 통해..
→ Control / Status / Data
주변 장치와의 '통신'
내부 통신 - 임베디드 디바이스 내부에서의 데이터 교환
외부 통신 - 외부 장치와의 데이터 교환
직렬 전송 - 단일 통신 라인 이용, 속도는 느리나.. 비용(통신 라인이 1개)의 트레이드 오프, 순차적으로 전송, 외부 통신에서 주로 사용
병렬 전송 - 여러 통신 라인 사용, 각 비트 동시 전용, 속도 빠르나 비용의 트레이드 오프, 내부 통신에서 주로 사용
비동기식 전송 - 송수신 간 공유하는 시간 정보 없음, 데이터만으로 순서 파악(start/stop bit), 불규칙한 데이터 전송에 적합, 5-8bit 정도의 데이터 보낼 때, 큰 블록 보내려면 parity bit 필요
동기식 전송 - 기준이 되는 시간 정보 존재, CLK같은, 블록 단위로 데이터 전송
비동기식에서 사용하는 START(0) / STOP(1) / ODD-EVEN PARITY BIT
보내는 데이터가 너무 길면 Timing ERR 발생 가능 (Receiver의 sampling이 조금 빠를 때 누적되면 결국 나중에 다른 값 읽어온다 !!!! )
에러 검출
ex) Parity Check
1차원 - 1비트 오류까지 Check 가능
2차원 - 3비트 오류까지 Check 가능
GPIO
- 사용자 마음대로 임의로 쓸 수 있는 pin
직렬통신의 프로토콜...
1) 클럭 동기화 (동기화 / 비동기화) - 심볼 동기화(8 bit 시작을 표시)
2) Bus wire (Simplex / Half - Duplex / Full - Duplex)
3) 구현 세부 사항 - 클럭 게이팅을 통해 주변 장치 활성화 / 메모리 공간의 주변 장치 영역에 매핑된 설정 레지스터 접근하여 제어
UART - 시리얼 통신 / 느려(임베디드 SW 개발 도구로 사용)
1) 비동기(암묵적으로 보레이트 이용해서 동기화) / 데이터 비트, 페리티 비트, 보레이트 check 필요
* start - data(LSB > MSB) - (parity) - stop
2) Half-Duplex
I2C - 시리얼 통신 / 저속/저전력 통신에 많이 사용
1) 동기(SCL 있음)
* SCL(클럭 라인 - 마스터 독점/슬레이브가 transaction 지연시키는 경우 제외) / SDA(데이터 라인)
2) Half-Duplex
* 마스터 - 슬레이브 (슬레이브가 버스 라인 공유(pull-up으로) - 하나씩만 / 마스터가 슬레이브를 선택해)
SCL - start(1) | end(1)
SDA - start(1-0) | end(0-1)
슬레이브 별로 7비트 주소(128개의 슬레이브 제어 가능)
SCL 1 SDA(1-0) : start
7bit 주소 전송 후 Write(0) / Read(1) + Ack(마스터는 SDA 1로 해두고, 슬레이브가 낮게 떨어트려서 수신 확인 - master가 읽을 때만 NACK 1로 유지)
SPI - 시리얼 통신 / 다양한 장치의 통신 프로토콜로 사용
1) 동기
*CPOL 씨폴 ! (기본 0 / 기본 1) / CPHA 씨파 ! (첫번째 edge / 두번째 edge) / 데이터 패킷 길이 / 비트 순서
line 4개 + 알파
1. SS(0으로 출력하여 slave 활성화) - slave 개수 만큼 !!!
2. SPI_CLK
3. SPI_MISO
4. SPI_MOSI
2) Full-Duplex
* Ack 없어서 실제 존재 여부 확인 불가능
FPGA : 디지털 집적 회로의 한 종류, 많은 수의 논리 요소들이 배치되어 있어 원하는 방식으로 연결하여 복잡한 디지털 회로 구성 가능 / 하드웨어를 프로그래밍 가능하도록 만들어, 사용자가 설계한 디지털 회로를 구현 가능함, 재프로그래밍도 가능
'인공지능 > 임베디드시스템설계' 카테고리의 다른 글
[임베디드 시스템 복습] chap1.2) (0) | 2024.04.22 |
---|---|
[Embedded System Design] chap1. 복습 (0) | 2024.03.18 |