nanoqplus for efm32 - energymicro seminar korea 20120823
DESCRIPTION
2012년 8월 23일 서울 역삼동 르네상스호텔에서 개최된 에너지마이크로 세미나에서 발표된 NanoQplus 자료TRANSCRIPT
NanoQplus 개요
NanoQplus v2
! ETRI가 만든 센서노드용 초소형 운영체제 - 2006년 2월부로 v2를 scratch부터 새로 개발 - Nano OS, NOS라고도 부름
! 2007년 10월 최초 공개버전 배포 - ATmega128, MSP430F1611을 사용한 교육용 센서노드에서 사용 가능 - Mesh 및 tree 기반 L2 라우팅 프로토콜 포함
! 2009년 자동차용 OS인 ROSEK 개발 및 국제 인증 (OSEK/VDX) ! 2012년 8월 현재 v2.5.0
- IPv6, 6LoWPAN, RPL, CoAP 등 지원
! 관련 웹사이트 - https://sites.google.com/site/nanoqplusos/ - http://nano-os.tistory.com/ - http://www.facebook.com/NanoQplus
지원하는 하드웨어
! Microcontrollers - 8 Bit
• ATmega128(L) • 8051 based MCUs (CC2430, MG2455)
- 16 Bit • MSP430F1611 • MSP430F5438 • HCS12X (ROSEK 자동차용 OS)
- 32 Bit • ARM Cortex-M0 (S3FN41F) • ARM Cortex-M3 (EFM32GG)
! Radio Transceivers - 2.4GHz
• CC2420 (Texas Instruments) • MG2410 (Radiopulse)
- Sub-1GHz • CC1120 (Texas Instruments) • AT86RF212 (Atmel)
5 EFM32GG-STK3700 [email protected]
NanoQplus 구조도
6
Sensors Sensors RF transceiver MCU MCU Radio transceiver MCU Sensors
특징 및 장점
! C와 멀티 쓰레드 커널을 특징으로 하는 개발 환경 - 낮은 learning curve: 친숙한 C 언어를 사용한 쉬운 프로그래밍 - Task Queue, user timer, multi-thread 등을 이용해 복잡도 높은 응용도 손 쉽고 직관적으로 개발 가능
! 모듈화를 통한 프로그램 경량화 - 필요에 따라 모듈을 추가/제거 하여 바이너리 크기 최소화
! 에너지 절감을 위한 자율적 sleep 기능
- 사용자의 관여 없이 커널 레벨에서 알아서 sleep - 사용자 응용에 따라 최적화 되는 스마트 슬립
! 하드웨어 추상화 및 의존적/비의존적 코드 분리 - 새로운 플랫폼으로의 포팅이 용이 - Code portability: 사용자는 NanoQplus에서 제공하는 API만으로 응용 작성
! 안정적인 네트워크 스택 - L2 Routing: TENO (데이터 수집), RENO (양방향 통신) - IETF 표준 프로토콜: 6LoWPAN, IPv6, RPL, CoAP 등
! 풍부한 튜토리얼 - 각각의 모듈의 기능을 테스트하고 사용법을 익힐 수 있음
NanoQplus 주요 기능
커널 주요 기능
! Multi-Threads - Preemptive RR 스케줄러 사용 (Supported time-slice values: 5ms, 10ms, 32ms) - 우선순위: 1(low), 2(normal), 3(high), 4(highest) - 쓰레드를 지원하여 이벤트 방식을 이용하는 운영체제에 비해 쉽고 직관적인 응용 작성 가능 - 다른 기능이 동작되는 동안에 병행적으로 작업이 진행될 필요가 있는 경우에 사용
! User Timers - 일반적으로 응용에서 가장 많이 사용되는 기능 - 주기적 또는 일회성 작업
! Task Queue - 지연하여 처리해야 할 작업에 적합 - 디바이스 드라이버 작성시 Top-bottom halves 형식으로 구현 가능
! 하이브리드 인터럽트 처리 기능 - 빠른 응답성의 HW 인터럽트 처리 방식과 안정적이고 다양한 기능을 지원하는 SW인터럽트 처리 병행 사용 - SW 인터럽트의 user-defined 우선순위 설정 가능
! 스마트 슬립 기능 - 실행할 태스크가 없을 때 자동으로 슬립 모드로 전환 - Wakeup 소스를 자동으로 확인하여 최적의 슬립 모드를 선택
NanoQplus 네트워크 스택
! IPv6 기반 인터넷 연동 기능 - Internet of Things, M2M, 스마트 에너지 프로파일 2.0을 위한
IPv6 네트워크 구성에 사용
! 트리 네트워크 기반 멀티홉 라우팅 프로토콜 기능 - 다수의 노드로 부터 소수의 싱크 노드로 데이터를 수집하는
네트워크에 활용
! 메쉬 네트워크 기반 멀티홉 라우팅 프로토콜 기능 - 센서 노드간 양방향 통신에 유리하여 데이터 수집 목적 이외의 네트워크에 활용
! 1홉간 간단한 패킷 송수신 - 멀티홉 라우팅이 불필요한 간단한 응용은 MAC 레벨에서 프로그래밍 가능
IPv6 네트워크 스택
! 상호운용성을 위한 IETF 표준 준수 - TinyOS, Contiki OS와 상호호환
! IEEE 802.15.4 지원 - 6LoWPAN 적응계층 필요 - Neighbor Discovery도 링크계층 특성에
맞게 최적화
! IPv6, ICMPv6, UDP - IETF RFC-compliant implementations
! RPL - IPv6 Routing Protocol for Low-power and
Lossy Networks
! CoAP - Constrained Application Protocol - HTTP-translatable REST protocol - 경량 임베디드 웹 서버 프로그래밍 지원 IEEE 802.15.4
6LoWPAN Adaptation Layer
IPv6
ICMPv6
ND RPL
UDP
Applications
CoAP
RPL: IPv6 Routing Protocol for Low-power and Lossy Networks
! 개요 - IEEE 802.15.4, PLC 등 저전력, 고손실 네트워크(LLNs; Low-power and Lossy Networks)를 위한 IPv6
라우팅 프로토콜 - IETF ROLL (Routing Over LLNs) Working Group에서 표준화: RFC 6550
! 특징 - 기본적으로 데이터 수집을 위한 DODAG (Destination Oriented Directed Acyclic Graph) 형성 - Data Path Validation: Data 패킷 내에 라우팅 정보를 삽입하여 loop 방지 - 노드의 자원을 고려한 downwards routing modes
종단간 패킷 수신률
�������
�������
�������
�������
������
�������
�������
��� ���
�������
����� ����� ����
�����&�����#&�"!���&�"�����
�"'&�!���$"&"�"�%�
시간대별 패킷 전송량
��
���
����
����
���
����
���
�� ��� ���� ���� ��� ����
��"���$�!% �%%�"!%��!�'!�&�"��
�� �!�
�� ��� �!��
������"!&$"�� �������&��������"!&$"�� �������&�������"!&$"�� ������&��
CoAP: Constrained Application Protocol
! 개요 - 자원 제한적인 임베디드 장치용 웹 프로토콜 - IETF CoRE(Constrained RESTful Environment) Working Group에서 표준화 진행 중
! 특징 - HTTP와 호환 가능: 중간에서 손쉽게 변환 가능 - 센서노드 같은 임베디드 장치를 웹 서버로 동작하게 하여 기존 시스템과 웹 레벨의 호환성 제공
Internet� Constrained Network�
GET http://{Proxy address}/cgi/coap/
{CoAP URI path}/sensor/temperature�
GET coap://{CoAP URI path} /sensor/temperature�
HTTP/1.1 200 OK … 20 (�)
0x62450405… (2.05 … 20 (�)) HTTP Client HC Proxy CoAP Server
SW 원격 업그레이드
! 무선 멀티 홉을 통해 원격에 위치한 센서노드 SW 업그레이드 - 센싱 데이터 전송 주기를 수정한 응용으로 업그레이드 - 센싱 데이터 종류를 수정한 응용으로 업그레이드
① 새로운 응용 작성 및 컴파일 ② 원격 업그레이드 SW를 통해 대상 노드 및 응용 이미지 선택
③ 전송 및 확인
01011101
0110
1100
1110
0110
00110011
0110
센서: 온도 주기: 5s
센서: 온도 주기: 2s
Old New
센서: 온도 주기: 5s
센서: 습도 주기: 5s
Old New
NanoQplus 활용 사례
! 개요 - 실외 주자창의 사용현황을 센서를 통하여 실시간으로 확인하고, 입구에 위치한 전광판을 통해 주차 가능 대수 표현
- 운전자는 사전에 전광판을 확인하여 보다 쉽게 주차위치를 선택할 수 있음
대규모 실외 주차장 관리 시스템
17
! 동적 라우팅이 가능한 무선 멀티홉 통신을 사용해 확장이 용이 ! 효율적인 전력관리와 태양열 충전을 통한 반영구적인 시스템 ! 추후 기능추가를 위해 무선 네트워크 SW 업그레이드 지원 ! 개별단위 주차 유무 확인 및 LANE별 주차가능 대수 확인 가능
주차장 관리 시스템 특징
! ETRI 7연구동 실내에 200여개의 센서 노드 구축
- 80여개의 고정 센서 노드 설치 및 시험
- 120여개의 이동 센서 노드 시험
빌딩 모니터링 테스트베드
< 고정 센서 노드 설치 위치 >
< 고정 센서 노드 모니터링 SW> < 천장에 설치된 센서 노드>
NanoQplus for EFM32
EFM32 & NanoQplus
! EFM32 특징 - 32비트 ARM Cortex-M3: 기존 센서 노드용 MCUs 대비 빠른 처리 - LETIMER, LEUART, LESENSE 등 low-energy 기능 지원
! NanoQplus 동작 전략 - Sleep을 위해 LF oscillator로 동작 가능한 RTC를 SysTick으로 활용
• 기본 SysTick은 HF oscillator를 사용하므로 sleep 불가능
- 할 일이 있는 경우 빠른 클럭을 이용해 빠르게 처리 - 당장 할 일이 없지만 일정 시간 후에 할 일(sleeping threads, not expired user
timers)이 있는 경우, EM2 (deep sleep) 진입 - 외부 이벤트(GPIO)가 발생하기 전에 할 일이 전혀 없는 경우, EM3 (stop) 진입 - 일반 UART 수신 인터럽트 대기시 EM1 (sleep) 유지 - Single thread 응용에서 delay가 필요한 경우에도 LETIMER 사용하여 EM2 (deep
sleep) 진입
Scheduling in EFM32
! Thread A
! Thread B ! User Timer C void thread_a(void *) { led_on(0); thread_sleep_ms(200); led_off(0); thread_sleep_ms(500); led_on(0); thread_sleep_ms(300); led_off(0); }
void thread_b(void *) { thread_sleep_ms(300); led_on(1); thread_sleep_ms(200); led_off(1); thread_sleep_ms(500); led_on(1); thread_sleep_ms(300); led_off(1); }
void user_timer_c(void *) { led_on(0); led_on(1); delay_ms(100); led_off(0); led_off(1); }
Scheduling in EFM32
! Thread A
void thread_a(void *) { led_on(0); thread_sleep_ms(200); led_off(0); thread_sleep_ms(500); led_on(0); thread_sleep_ms(300); led_off(0); }
Scheduling in EFM32
! Thread B
void thread_b(void *) { thread_sleep_ms(300); led_on(1); thread_sleep_ms(200); led_off(1); thread_sleep_ms(500); led_on(1); thread_sleep_ms(300); led_off(1); }
Scheduling in EFM32
! User Timer C
void user_timer_c(void *) { led_on(0); led_on(1); delay_ms(100); led_off(0); led_off(1); }
Scheduling in EFM32
! Concurrent running
int main(void) { nos_init(); thread_create(thread_a, NULL, 0, PRIORITY_NORMAL); thread_create(thread_a, NULL, 0, PRIORITY_NORMAL); user_timer_create_sec(user_timer_c, NULL, 0, USER_TIMER_ONE_SHOT); sched_start(); }
EM2 EM3
NanoQplus for EFM32
! Conclusion - 태스크 스케줄러도 EFM32 특성에 맞게 에너지 절감형 동작 - 사용자는 언제 sleep 할지, 언제 wakeup 할지 걱정하지 않고 응용 프로그램 작성 가능
! Future Works - LESENSE 등 EFM32 제공 에너지 절감 기능을 사용자가 사용하기 편하도록 OS 레벨 추상화 계속
- EFM32 기반 플랫폼 추가 지원: EFM32 Starter-Kits, Breakout boards - EFR 출시시 바로 지원 예정