ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CZ-ME310G1 모뎀 with Zephyr RTOS 4.2
    zephyr 2025. 10. 7. 00:16

    Zephyr(제퍼)는 리소스가 제한적인 임베디드 장치, 특히 마이크로컨트롤러를 위한 오픈 소스 실시간 운영 체제(RTOS)입니다. 이 시스템은 리눅스 재단이 주도하는 프로젝트로, 커널, 라이브러리, 디바이스 드라이버 등 다양한 구성 요소를 포함하며, 

    여러 CPU 아키텍처와 보드(ARM Cortex-M, x86 등)를 지원합니다. West라는 도구를 사용하여 코드 빌드, 디버깅, 펌웨어 플래싱 등의 개발 과정을 효율적으로 관리하며, 사물인터넷(IoT) 및 상용 제품에 널리 활용되고 있습니다. 

     

    주요 특징
    RTOS (실시간 운영 체제): 시간 제약이 있는 실시간 컴퓨팅 애플리케이션을 처리하는 운영 체제입니다. 
    오픈 소스: 리눅스 재단이 주도하는 오픈 소스 프로젝트로, Apache 라이선스 2.0에 따라 배포됩니다. 
    리소스 제한 환경: 메모리나 성능이 제한적인 임베디드 장치를 위해 설계되었습니다. 
    다양한 아키텍처 지원: ARM Cortex-M, x86, ARC, XTENSA 등 여러 CPU 아키텍처와 200개 이상의 보드를 지원합니다. 
    포괄적인 구성 요소: 커널, 라이브러리, 파일 시스템, 프로토콜 스택, 장치 드라이버 등을 포함합니다. 
    West 도구: 코드 빌드, 플래싱, 디버깅 등 Zephyr 프로젝트 관리 및 개발 과정을 효율적으로 지원하는 도구입니다. 

     

    활용 분야
    IoT 및 임베디드 시스템: 유연성과 확장성이 뛰어나 다양한 IoT 및 임베디드 장치에 활용됩니다. 
    상용 제품: 산업용 사물인터넷 등 다양한 상용 제품에 널리 사용되고 있습니다.

     

    2개월 동안 Zephyr의 개발환경과 소스코드 구조, 설정파일, 빌드시스템에 대해서 살펴보고, Zephyr의 modem 드라이버와 연결된 Cellular 서비스에 대해서 분석해서 CZ-ME310G1 모뎀이 Zephyr에서 동작할 수 있게 작업했습니다. 

     

    동작하는 Zephyr application 소스코드는 코드주 github.com에 오픈소스로 공개했습니다. 

    https://github.com/codezoo-ltd/zephyr-app 

     

    GitHub - codezoo-ltd/zephyr-app: zephyr rtos applications

    zephyr rtos applications. Contribute to codezoo-ltd/zephyr-app development by creating an account on GitHub.

    github.com

     

    zephyr 동작을 테스트한 보드는 STM32 DISCO L475 IoT보드와 STM32 Nucleo-H723ZG보드입니다. 

    구체적인 내용에 들어가기 앞서 먼저 영상으로 어떻게 동작하는지 확인해 보겠습니다.

     

    1. UDP통신

     

    2. MQTT통신

     

    첫 번째 영상의 cellular_test는 CZ-ME310 모뎀을 이용해서 UDP 에코서버에 접속해서 UDP 패킷 송수신 테스트하는 예제이고,

    두 번째 영상의 mqtt_test는 모뎀을 hivemq.com의 mqtt 공개 브로커에 연결해서 토픽을 발행하는 예제입니다. 모뎀을 통해 토픽이 들어왔는지 같은 토픽을 구독하는 MQTT Explorer로 올라오는 토픽 내용과 시간을 확인했습니다. 

     

    이제 이 예제를 동작시키기 위한 개발환경 설정하는 방법을 알아보겠습니다.

    여러 가지 방법이 있지만 윈도우 PC에 vmware로 우분투 24.04 LTS를 설치한 환경에서 아래와 같이 개발환경을 설정했습니다. 

    https://zephyr-rtos.tistory.com/4 

     

    ubuntu 24.04 LTS zephyr 개발환경 설치하기

    ubuntu 24.04 LTS 환경에 zephyr 개발환경을 설치했습니다. 타겟보드는 zephyr를 지원하는 NUCLEO-G071RB로 테스트했습니다.( https://docs.zephyrproject.org/latest/boards/st/nucleo_g071rb/doc/index.html ) 우분투에서 개발환

    zephyr-rtos.tistory.com

     

    위 환경은 ST-LINK V2.0 기준으로 udev.rules를 설정했는데, 테스트에 사용한 Nucleo-H723ZG보드의 경우 ST-LINK V3.0을 사용해서 아래 한 줄이 더 추가되었습니다. ST-LINK V3.0은 USB Product ID가 374e입니다. 

    추가 후 udevadm trigger 하면 ST-LINK V3.0으로도 west flash 가 문제없이 동작되는 것을 확인할 수 있습니다. 

     

    개발보드와 CZ-ME310G1 모뎀은 아두이노 핀 기준으로 아래와 같이 연결되어 있습니다.

    D0 -- 모뎀 TX

    D1 -- 모뎀 RX

    D2 -- 모뎀 PowerKey

    D7 -- 모뎀 LDO_EN

    5V -- 모뎀 VBAT

    GND -- 모뎀 GND

    IOREF -- 모뎀 IOREF 

     

    DISCO L475 IoT 보드
    L475 PINOUT : D0(PA1), D1(PA0), D2(PD14), D7(PA4), UART4
    NUCLEO-H723ZG 보드

     

    H723ZG PINOUT : D0(PB7), D1(PB6), D2(PG14), D7(PG12), USART1

     

    보드에서 같은 위치에 점퍼선을 연결했지만 위 그림처럼 실제 PINOUT은 다릅니다.

    지원하는 보드에 따라 달라지는 하드웨어 설정은 /boards 디렉터리 안에 있는 disco_l475_iot1.overlay, nucleo_h723zg.overlay 에 적용되어 있습니다. 

     

    git에서 받은 예제코드 동작 테스트 하기 전 zephyr modem 드라이버를 아래와 같이 수정합니다.

    https://github.com/zephyrproject-rtos/zephyr/blob/main/drivers/modem/modem_cellular.c

    1. me310g1 초기화 설정에서 AT+CFUN=4, AT+CFUN=1은 삭제했습니다.

    2. AT+CMUX 설정을 변경했습니다.

    3. 주기적으로 호출하는 상태체크 스크립트를 변경했습니다.  

     

    수정 후 git에서 예제코드를 다운로드합니다.

    원하는 보드에 맞춰서 설정을 적용하고 빌드하기 위해서는 아래와 같은 빌드 커맨드를 사용해야 합니다.

    \> west build -p -b disco_l475_iot1 zephyr-app/cellular_test

    빌드 후 보드에 펌웨어를 올리기 위해서는 아래와 같은 커맨드를 사용합니다.

    \> west flash

    -p 옵션은 설정을 다시 적용해서 빌드할 때나 크린빌드 할 때 사용합니다.

    소스코드 수정 후 빌드할 때는 -p 옵션 없이 빌드합니다. 

    \> west build -b disco_l475_iot1 zephyr-app/cellular_test

     

    사용하는 보드가 변경되었을 때는 아래와 같이 -p 옵션을 넣고 빌드해야 합니다.

    \> west build -p -b nucleo_h723zg zephyr-app/cellular_test

    \> west flash

     

    다른 애플리케이션을 빌드할 때도 -p 옵션을 넣고 빌드합니다.

    \> west build -p -b disco_l475_iot1 zephyr-app/mqtt_test

    \> west flash

     

    mqtt_test 예제를 DISCO L475 보드로 동작시킨 영상입니다. 

     

     

    테스트에 사용한 STM32 개발 보드

    STM32 DISCO L475 IoT 보드
    STM32 NUCLEO-H723ZG 보드

     

     

    iot유심 : codezoo

    [codezoo] IoT Global SIM, IoT Connectivity, IoT Device

    smartstore.naver.com

     

Designed by Tistory.