1. IoT(Internet of Thing) 의 이해 및 MCU/MPU 비교
이전에는 IoT에 사용되어지는 Chip에 대해서 크게 관심을 가지고 있지 않았는데, 최근들어 IoT기반의 MPU/MCU를 사용을 해보고
관련 RTOS도 사용해보니, 이 기능들이 AP기반의 Linux/Android 만큼 복잡성을 가지지는 않지만, 점점 복잡해지고 다양해지고 있는 것 같다.
마치 2000년 초반의 임베디드 시스템을 다시보는 것 같은데, 다른 점이 있다면, 그 때와 다르게, 각 Chip 업체 or Cloud 업체 중심으로 각각의 솔루션들을 제공해주고 있다.
- IoT(Internet of Thing) 용어 및 구조
IoT를 보면 Connection 즉, Internet과 연결이 유선/무선으로 되어지며, 각 센서중심의 데이타를 선처리를 하여, 각 Cloud / Server 통신하여 제어되는 구조이다.
- Edge Computing
보통 Cloud 기반으로 돌아가는 추세이며, Edge 즉 IoT 수준의 MPU에서 선처리기능을 한 후 세부 처리는 Cloud에서 처리하는 방식이다.
- IoT에서 많이 사용되어지는 MCU/MPU
보통 MCU는 Mircocontroller 이며, 주로 8bit/16bit 단순 기능 Micom 말했는데, MPU라는 용어가 나오면서 IoT에서 많이 사용되어진다.
특히 ARM은 Coretex-M 기반으로 저전력 DeepSleep 가능하며, 다양한 Peripheral 지원하는 좋은 MPU들이 출시되어지며, MCU 성능의 기능이 아니다.
크게 보면, ARM 과 ARM이 아닌 것으로 MPU들은 나뉘어지며, 보통 ARM 계열이 성능이 좋은 것으로 보이며 사용하기도 쉽다.
MCU(MicroController Unit)
MPU(MicroProcessor Unit)
MCU vs MPU
- WIFI 지원되는 MCU/MPU
요즘 MCU/MPU가 혼용되어사용되어지므로, 구지 크게 구분을 할 필요까지는 없을 것 같으며, WIFI가 지원되는 MCU들을 알아보자.
ESP32의 경우 Tensilica기반의 Core사용하며, 이는 Cadence에서 만들었음
2. IoT 의 OS 비교
IoT에서 많이 사용되어지는 OS는 다음 3개로 보이는 것 같으며, OS 없이도 구현이 가능하므로, OS 사용여부는 개발의 복잡성에 따라 달라질 것 같다.
- Zephyr : 최근부터 뜨기 시작한 OS
- FreeRTOS: 오래전 부터 제공한 RTOS이지만, 많은 Library들이 부족함
- Mbed: ARM에서 제공하는 OS로, 다양한 Library와 개발에서 많이 사용되어지는 것으로 보임
2.1 Mbed OS
- 기본소개
Cortex-M ARM기반의 MCU/MPU기반으로 무료로 제공해주는 Open OS 뿐만아니라, IDE인 Studio도 제공을 해주고 있다.
Mbed는 RTOS로 RTX와 RTOS API를 포함하고 있다고 하는데, RTX가 포함이 되어야 RTOS로 동작이 가능하다고 한다.
- 장점
ARM기반의 MPU/MCU에 제공되어지기 때문에, 안정적인 OS를 사용가능하며, TLS와 같은 보안라이브러리도 무료로 제공해주고 있다.
- 단점
ARM이외 Core , RISK-V , Tensilica 등은 지원불가능
RTX기능을 사용하지 않으면, RTOS기능을 사용못하는 것으로 보임
RTX의 기능
Mbed OS bare metal profile
RTX를 포함하고 있지않아서 RTOS가 아니라고 하며, 일반 OS라고 함
라이센스는 Apache 2.0로 무료로 사용가능하며, ARM기반이라면 사용하기 편한 것으로 보인다.
Mbed OS 관련정보
Mbed OS 6 전체구조
Mbed OS v6.0 Bare Metal 지원사항확인
Mbed OS v6.0 Quick Guide
Mbed Source
Coding Style (Code Convention)
Mbed CLI How to Install
2.2 FreeRTOS
- 기본소개
MCU/MPU기반으로 가장 많이 알려진 RTOS로 ARM이외에 다양한 Core들을 지원하고 있으다. 다만, 기능이 OS만 지원하다보니,
실제사용시에는 각 Chip Vendor에서 별도로 제공해주지 않는 이상은 각 Library들이 많이 부족함을 느끼고 있다.
물론 ESP32의 경우 FreeRTOS를 모든 것을 잘 제공해주고 있으며 안정적으로 잘 동작한다.
하지만, 현재 AWS 기반으로 제공해주는 AWS FreeRTOS 와 ESP32 FreeRTOS는 조금 다르다.
둘 다 OS이외에 부족한 Library들을 Mbed or OpenSource로 이를 보완하고 있지만,
기본적으로 AWS FreeRTOS의 경우 동작이 좀 불안한 것 같다.
최근에 AWS FreeRTOS 기반으로 프로젝트를 했는데, 메모리 Heap 관련문제가 꽤 있었는데, 점차 나아지리라고 생각되어진다.
- 장점
다양한 CPU 아키텍쳐를 지원가능하며, 여러 IDE에서 무료로 제공해주고 있어 많이 사용되어지고 있다.
그리고 부족한 부분들은 현재 각 Chip Vendor 혹은 AWS에서 각 부분들을 채우고 보완하고 있다.
- 단점
실제 RTOS로 사용해보면, 기존의 RTOS 사용해본사람도 사용하기가 쉽지 않으며, API도 좀 복잡하다.
사실 복잡하기보다는 개인적으로 API가 별로 마음에 들지가 않는다.
어쩔수 없이 사용하는 사람이 적응해야하는 법이지만, 항상 Vxwork나 다른 RTOS와 비교를 하게되어지는데, 개인적으로 API 별로다.
- FreeRTOS 공식 사이트와 소스
- FreeRTOS의 Manual 과 API
- AWS FreeRTOS 문서와 소스
2.3 Zephyr RTOS
- 기본소개
현재 NXP기반으로 많이 사용되어지는 IoT OS로 가장 큰 장점의 Linux와 유사성이며 ARM이외의 Core 지원 될것이다.
OS 개발이 Linux Foundation이어서 그런지 Device Tree도 지원되며, Linux 와 유사성이 많이 보이는 것으로 보인다.
아직 사용해보지 못해서 뭐라고 말하지는 못하겠지만, 왠지 이 중심으로 갈 것 같기도 하다.
- 장점
현재 사용해보지 못했지만, 사이트와 Manual만 보는 것만으로도, 앞으로 가장편하게 사용하게될 OS가 될 것 같으며, 다양한 기능들을 제공해줄 것 같다.
또한 FreeRTOS처럼 다양한 Core를 지원해주고 있어, 앞으로 대세가 이것으로 되지 않을까하고 생각한다.
- 단점
아직 사용해보지 못해서 잘모르겠으나, FreeRTOS처럼 내부 버그가 많을 것으로 생각되어진다. 왜냐하면 예전의 Linux 초기가 많이 생각이 나서 그런부분은 사용자가 많이 고쳐가며 구현해야 할 것같다.
Zephyr Project 공식사이트 와 Source
NXP의 Zephyr 관련사이트
Zephyr Project
ESP32 Zephyr