ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Renesas FPB-RA6E1 + CZ-ME310G1 그리고 SCI Uart
    zephyr 2025. 10. 13. 01:08

    이전에 작업했던 모뎀 소스코드를 재사용해서 FPB-RA6E1 보드에 CZ-ME310G1 모뎀을

    동작시켰습니다. 

     

    1~2시간 정도 작업시간을 예상하고 진행했는데, 6시간 이상 걸렸습니다. 

    어떻게 작업을 진행했고 왜 예상시간보다 오래 걸리게 되었는지 정리했습니다. 

     

    Renesas는 Zephyr Project에 활발히 참여하고 있습니다. 그리고 무려 플래티넘 멤버입니다. (멤버등급 최상단에 있습니다.) 

    https://www.zephyrproject.org/project-members/

     

    연간 상당한 비용을 지불하는 플래티넘 멤버인 만큼 Zephyr 지원에도 적극적 입니다. 특별히 ARM Cortex Core를 사용하는 Renesas RA제품군은 거의 대부분은 Zephyr RTOS를 지원합니다. 

     

    사용하려고 하는 Renesas FPB-RA6E1도 아래와 같이 지원페이지를 운영하고 있습니다.

    https://docs.zephyrproject.org/latest/boards/renesas/fpb_ra6e1/doc/index.html

     

    RA6E1 Fast Prototyping Board — Zephyr Project Documentation

    © Copyright 2015-2025 Zephyr Project members and individual contributors. Last generated: Oct 12, 2025. Last source update: Mar 31, 2025.

    docs.zephyrproject.org

     

    Ubuntu 24.04LTS에서 개발환경이 준비되어 있는 상태에서 개발을 시작했습니다.

    혹시 준비가 되어 있지 않다면 아래 게시글을 참고하시기 바랍니다. 

    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

     

    여기에 펌웨어 업로드, 디버깅을 위해 JLink 소프트웨어 패키지를 설치했습니다. 

    https://www.segger.com/downloads/jlink/

     

    SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace

    Our downloads are protected and signed with SEGGER emSecure! More information about signed downloads, how signatures are created and how easy downloaded files can be verified.

    www.segger.com

     

    우분투에 사용하기 위해 데비안 64-bit 인스톨러 버전을 다운로드했습니다.

     

    다운로드한 패키지를 설치하기 위해 더블클릭하면 아래와 같이 안전하지 않을 수 있음 메시지가 나옵니다.

    설치하기를 누릅니다.

    참고로 패키지를 설치하면 J-Link RTT Viewer도 함께 설치됩니다. 

    실행하려면 커맨드 프롬프트에서 아래와 같이 입력합니다.

    \>JLinkRTTViewer 

     

    실행화면이 나오면 Configuration에서 USB, R7FA6E10F로 설정 후 OK 누르면 사용하실 수 있습니다.

    J-Link RTT Viewer 설정화면

     

    모뎀 동작 설정파일 및 application 코드는 이전에 작업한 결과물을 그대로 사용할 계획입니다.

    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

     

    여기에 boards/fpb_ra6e1.overlay 파일만 새로 작업해서 zephyr 펌웨어를 빌드하려고 합니다. 

    다른 보드들과 마찬가지로 D0, D1, D2, D7, 5V, GND, IOREF에 모뎀을 연결하려고 합니다. fpb-ra6e1 회로도를 살펴보면,

    FPB-RA6E1 schematics

    D0는 P110, D1은 P109, D2는 P409, D7은 P113 ioport를 사용하는 것을 확인할 수 있습니다. 

    D0는 UART-RX, D1은 UART-TX, D2는 모뎀의 PowerKey, D7은 모뎀의 LDO_EN에 연결해서 사용하도록 overlay만 잘 구성해서 빌드하면 손쉽게 작업을 마무리할 수 있습니다. 

     

    RA6E1 데이터시트를 찾아보면 P109는 TXD9로 P110은 RXD9로 사용할 수 있습니다.  

     

    zephyr에 올라가 있는 ra6e1 관련 dts파일들을 참고해서 작업해서 빌드하는데 DT관련 에러가 끊이지 않고 나왔습니다.

    수정하고 빌드하는 작업을 수회 반복해서 아래와 같이 동작되는 최종 overlay 파일이 만들어졌습니다.

    https://github.com/codezoo-ltd/zephyr-app/blob/main/cellular_test/boards/fpb_ra6e1.overlay

    / {
        aliases {
            modem-uart = &dut;
            modem = &modem;
            ldoen = &mdm_ldo;
    };

    chosen {
            zephyr,ppp-uart = &dut;
    };

    mdm_ldo: mdm_ldo {
            compatible = "gpio-leds";
            label = "Modem LDO Enable";
            led_0: led_0 {
                gpios = <&ioport1 13 GPIO_ACTIVE_HIGH>;
            };
        };
    };

    &pinctrl {
        sci9_default: sci9_default {
            group1 {
                /* tx rx */
                psels = <RA_PSEL(RA_PSEL_SCI_9, 1, 9)>,
                    <RA_PSEL(RA_PSEL_SCI_9, 1, 10)>;
            };
        };
    };

    &sci9 {
        pinctrl-0 = <&sci9_default>;
        pinctrl-names = "default";
        status = "okay";
        dut: uart {
                   current-speed = <115200>;
                   status = "okay";

                   modem: modem {
                          status = "okay";
                          compatible = "telit,me310g1";
                          mdm-power-gpios = <&ioport4 9 GPIO_ACTIVE_HIGH>;
                   };
         };
    };

    &ioport1 {
        status = "okay";
    };

    &ioport4 {
        status = "okay";
    };

     

    다른 MCU들과 달리 SCI채널을 정의하고 내부에 UART를 지정한 후 여기에 동작속도를 정의하고, 모뎀도 등록해야 정상 동작을 할 수 있습니다. 이것을 알아내는데 한참의 시간이 걸렸습니다. 고생한 김에 SCI인터페이스와 SCI UART를 정리했습니다.

     

    먼저 Renesas RA-MCU의 SCI 인터페이스에 대해서 알아보겠습니다. 

     

    Renesas RA6E1 마이크로컨트롤러(MCU)에 내장된 SCI (Serial Communications Interface)는 다양한 직렬 통신 방식을 지원하는 똑똑하고 유연한 통신 채널입니다. 그중에서도 UART (Universal Asynchronous Receiver/Transmitter)는 가장 기본적이고 널리 사용되는 통신 방식으로, SCI의 핵심 기능 중 하나입니다.

    쉽게 말해, SCI는 여러 통신 방법(UART, I2C, SPI 등)을 수행할 수 있는 만능 통신 포트이며, UART는 그중 비동기식 직렬 통신을 담당하는 '모드'라고 생각하면 이해가 빠릅니다.

     

    Renesas RA6E1 SCI 인터페이스의 주요 특징

    Renesas RA6E1의 SCI는 단순한 통신 기능을 넘어, 개발자가 더 쉽고 안정적으로 통신 시스템을 구축할 수 있도록 다양한 하드웨어 기능을 지원합니다.

    • 다양한 통신 모드 지원: 하나의 SCI 모듈로 여러 통신 프로토콜을 설정하여 사용할 수 있습니다.
      • UART (비동기식 직렬 통신): 가장 대표적인 기능으로, TxD(송신)와 RxD(수신) 두 개의 신호선만으로 통신합니다.
      • Simple SPI (동기식 직렬 통신): 클럭(Clock) 신호를 사용하여 데이터를 동기화하는 방식으로 통신합니다.
      • Simple I2C (동기식 직렬 통신): 두 개의 선(SDA, SCL)으로 여러 장치와 통신하는 방식입니다.
      • Smart Card Interface (ISO/IEC 7816-3): 스마트카드와 통신하기 위한 표준 인터페이스를 지원합니다.
    • 유연한 클럭 소스: 통신 속도(Baud Rate)를 결정하는 클럭 소스를 MCU의 다양한 내부 클럭 중에서 선택할 수 있어, 시스템 설계에 유연성을 더합니다.
    • FIFO 버퍼 내장: 송신(Transmit)과 수신(Receive)을 위한 별도의 FIFO (First-In, First-Out) 버퍼를 내장하고 있습니다. 이는 CPU의 개입 없이도 여러 개의 데이터를 연속적으로 주고받을 수 있게 하여, CPU의 부담을 크게 줄여주고 데이터 손실 위험을 방지합니다. 마치 데이터를 잠시 담아두는 작은 창고와 같습니다.
    • 다양한 오류 검출 기능: 통신 과정에서 발생할 수 있는 오류를 하드웨어적으로 감지하여 데이터의 신뢰성을 높여줍니다.
      • 패리티(Parity) 오류: 데이터 비트의 '1'의 개수가 짝수인지 홀수인지 미리 약속하고, 이를 검사하여 오류를 찾아냅니다.
      • 프레이밍(Framing) 오류: 데이터의 끝을 알리는 정지 비트(Stop Bit)가 제자리에 없을 때 발생하는 오류입니다.
      • 오버런(Overrun) 오류: 수신 버퍼가 가득 차서 비워지기 전에 새로운 데이터가 들어와 기존 데이터를 덮어쓸 때 발생합니다.
    • DMA 연동 기능: DMA (Direct Memory Access) 컨트롤러와 연동하여 CPU를 거치지 않고 메모리와 SCI 주변장치 간에 대량의 데이터를 직접 전송할 수 있습니다. 이는 시스템의 전반적인 성능을 크게 향상합니다.

    SCI UART: 가장 쉽고 보편적인 통신 방식

    SCI의 여러 기능 중 UART 모드는 '비동기식' 통신이라는 점이 가장 큰 특징입니다.

    '비동기식'이란, 통신하는 두 장치가 별도의 클럭 신호를 공유하지 않고, 미리 정해진 속도(Baud Rate)와 데이터 형식(패킷)에 대한 약속만으로 통신하는 것을 의미합니다. 전화 통화보다는 정해진 시간에 맞춰 보내는 문자 메시지와 비슷하다고 할 수 있습니다.

    UART 통신 과정 (A가 B에게 데이터 'H'를 보낼 때)

    1. 시작 신호 (Start Bit): 통신이 시작됨을 알리는 신호입니다. 평소 'High' 상태를 유지하던 신호선이 'Low' 상태로 떨어지며 데이터 전송의 시작을 알립니다.
    2. 데이터 비트 (Data Bits): 실제 전송하려는 데이터입니다. 아스키코드 'H'는 2진수로 '01001000'이며, 이 비트들이 순서대로 전송됩니다.
    3. 패리티 비트 (Parity Bit, 선택 사항): 데이터 오류 검출을 위해 추가되는 비트입니다.
    4. 정지 신호 (Stop Bit): 데이터 전송이 끝났음을 알리는 신호입니다. 신호선이 다시 'High' 상태로 돌아가 한 패킷의 전송이 완료되었음을 알립니다.

    이러한 정해진 '규칙(프로토콜)' 덕분에 TxD(송신)와 RxD(수신) 단 두 개의 선만으로 간편하게 통신할 수 있어 PC의 시리얼 포트, GPS 수신기, 블루투스 모듈 등 수많은 장치에서 널리 사용됩니다.

    결론적으로 Renesas RA6E1의 SCI는 UART 통신을 비롯한 다양한 직렬 통신 방식을 효율적으로 처리할 수 있도록 FIFO 버퍼, 오류 검출, DMA 연동 등 강력한 하드웨어 기능을 갖춘 다재다능한 통신 인터페이스입니다. 이를 통해 개발자는 CPU의 부담을 줄이면서도 안정적이고 빠른 데이터 통신 시스템을 손쉽게 구현할 수 있습니다.

     

    Zephyr RTOS를 사용하더라도 사용하시는 MCU 벤더의 데이터시트와 유저매뉴얼 및 관련자료를 잘 정리해 두셔야 원하시는 성능을 충분히 뽑아낼 수 있습니다. 필요한 정보들을 미리미리 정리해 두시면 이후 큰 지식자산이 되실 거라 생각합니다.

     

    Renesas에서는 Zephyr RTOS 개발자 페이지를 따로 운영하고 있습니다. 

    https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ra-partners/zephyr-rtos?srsltid=AfmBOopsQAL4TLUwXFwhXqLnTAo2QmO6uqX7Cf-6FhZyG5n4eZr-ZIBV#documents

     

    Zephyr RTOS

    The Zephyr Project is a Linux Foundation hosted Collaboration Project.

    www.renesas.com

     

    Zephyr 개발을 위한 위키페이지, RA, RZ, RX 제품군에 대한 개발가이드도 제공하고 있으니 Renesas 제품군으로 Zephyr RTOS 개발을 계획하고 계시면 꼭 참고하시기 바랍니다. 

     

    관련해서 이번 개발에서 좋은 정보도 얻었는데, FPB-RA6E1 보드의 경우 J-Link 인터페이스 UART가 연결되어 있지 않아 USB연결로 Serial Debug 메시지를 확인할 수 없습니다. 하지만 이와 관련해서 아래와 같은 팁을 제공하고 있습니다.

     

    https://github.com/renesas/zephyr/wiki/FPB%E2%80%90RA6E1-Sample-and-Demo-Hardware-configuration

     

    FPB‐RA6E1 Sample and Demo Hardware configuration

    Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures. - renesas/zephyr

    github.com

    Renesas에서 P101, P100을 SCI0채널의 UART로 연결해서 Debug포트로 지정해 둬서 USB-TTL을 연결하면 디버그 메시지를 확인할 수 있게 zephyr에 구현해 두었습니다. P101, P100은 PMOD로 연결할 수도 있지만, 아두이노 D11, D12로 연결할 수 있어서 따로 숄더링 하지 않고 USB-TTL을 핀헤더로 연결해서 사용했습니다. 

     

    이제 모든 준비가 완료되어 빌드 후 동작테스트를 진행했습니다. 

     

    1. Cellular UDP Socket Test : Echo Server에 UDP 패킷 송신 후 동일한 패킷 수신 ( Hello CodeZoo!!! )

     

     

    2. Cellular MQTT Test : Hivemq Open Broker에 MQTT 접속해서 채널 구독 후 메시지 발행 ( Message X from Zephyr )

     

     

     

    LTE-CATM1 내장형 모뎀 대량 구매 상담, 외주 개발, 협업 문의, vodafone IoT유심 문의
    (주)코드주
    장병남 대표 010-8965-1323 rooney.jang@codezoo.co.kr

     

    iot유심 : codezoo

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

    smartstore.naver.com

     

    FPB-RA6E1 board 구매링크 : www.mouser.kr ( https://www.mouser.kr/ProductDetail/Renesas-Electronics/RTK7FPA6E1S00001BE?qs=aP1CjGhiNiF36XjMZrTGrg%3D%3D )

     

     

Designed by Tistory.