anhy0923
HY's Embedded LAB
anhy0923
전체 방문자
오늘
어제
  • 분류 전체보기 (67)
    • UDS 진단통신 (1)
    • FreeRTOS (2)
    • ROS2 (5)
    • [EH전공] CAN 통신 (1)
    • C언어 튜터링: C로 로봇을 파헤쳐보자! (4)
    • [졸업작품] 외벽 균열 검사 로봇 (8)
      • 2021-2 <종합설계기획> (7)
      • 2022-1 <종합설계1> (1)
      • 2022-2 <종합설계2> (0)
    • TCP 기반 제어시스템 (7)
      • Robot Arm Control (5)
      • RPi CCTV Server (2)
    • Embedded System (6)
      • Linux (3)
      • Linux - Ubuntu (2)
      • RPi (1)
    • Drone FW using STM32CubeIDE (25)
      • 0. Intro (2)
      • 1. Debug (3)
      • 2. Sensor Interface (4)
      • 3. GPS (4)
      • 4. Transmitter_Receiver (3)
      • 5. Drone Body Asb (1)
      • 6. ESC Protocol (4)
      • 7. EEPROM (2)
      • 8. GCS (1)
      • PID Control (1)
    • Elec Academy (3)
    • HAL & LL Driver (1)
    • OpenCV - Lane Detection (1)

블로그 메뉴

  • 홈
  • 방명록

티스토리

hELLO · Designed By 정상우.
anhy0923

HY's Embedded LAB

[Drone Firmware using STM32CubeIDE] 7-2. EEPROM Protocol Definition
Drone FW using STM32CubeIDE/7. EEPROM

[Drone Firmware using STM32CubeIDE] 7-2. EEPROM Protocol Definition

2021. 8. 17. 15:33

  EEPROM에 데이터를 오류없이 전송하고 받아오기 위해 EEPROM 프로토콜을 정의한다. EEPROM에 데이터를 저장하는데에 있어서 프로토콜 정의가 꼭 필요한 것은 아니다. 하지만 EEPROM에 저장할 데이터는 바로 PID Gain값인데, 이 Gain값 정보는 제어에 큰 영향을 미치는 중요한 정보이므로 데이터를 오류없이 전송하고 수신하여야 한다. 따라서 데이터를 저장, 관리하는 단계에서 데이터의 무결성을 보장하기 위해 프로토콜을 정의한다. 프로토콜을 정의한다고 해서 데이터에 오류가 100% 없다고 보장할 수 없다. 오류가 날 확률을 감소시켜주는 것이다. 그러나 프로토콜 정의가 안되어 있으면 데이터에 오류가 있는지 확인 조차 못한다. 따라서 EEPROM Protocol 정의는 이런 면에서 중요한 역할을 한다.

 앞서 UBX, iBus 프로토콜에 대해서도 알아보았다. UBX, iBus 프로토콜 같은 경우에는 ublox, FlySky사에서 자체적으로 만든 통신 규약이고 지금 정의할 EEPROM 프로토콜은 직접 정의하는 프로토콜이다. 

 STM32F405와 EEPROM이 인터페이스하는 프로토콜은 I2C 인터페이스이고, EEPROM에 데이터를 저장할 구조에 대한 프로토콜이 바로 EEPROM Protocol이다. 

 

Definition of "EP Protocol"

 EEPROM과 통신을 위한 EP Protocol은 앞서 살펴본 UBX, iBus 프로토콜의 메시지 구조와 비슷하게 구성하였다. 다음은 EP Protocol의 데이터 프레임 구조이다.

EEPROM Data Frame Structure

 EP Protocol은 EEPROM(AT24C08)의 한 Page 크기인 16byte를 맞추기 위해서 16byte 단위로 데이터를 구성한다. 데이터의 시작을 알리는 SYNC CHAR 2byte는 각각 0x45, 0x50 고정으로 하고 이는 각각 아스키 코드로 'E' 와 'P'를 의미한다. 또한 ID Byte로 어떤 PID Gain인지 구분한다. (ex. ID 0x00 = Roll Inner PID Gain) 그 후로 올 12byte는 각각 4byte씩 (단정도 실수형 float) P, I, D Gain값이 저장되며 각 Gain 데이터는 Little Endian으로 표기한다. 마지막 한 byte는 CHKSUM byte이다. Roll over현상을 막기 위해 페이지의 첫 주소부터 저장한다.

 

CheckSum Calculation

 체크섬 계산은 iBus 메시지의 체크섬 계산 방식과 같은 방식으로 한다. 0xff 에서 체크섬 계산 영역의 모든 바이트를 빼준 값을 체크섬 Byte에 저장한다. 계산 시, Underflow는 무시하며 0xff는 unsigned char형으로 선언한다. 

저작자표시 (새창열림)

'Drone FW using STM32CubeIDE > 7. EEPROM' 카테고리의 다른 글

[Drone Firmware using STM32CubeIDE] 7-1. EEPROM: AT24C08  (0) 2021.08.15
    'Drone FW using STM32CubeIDE/7. EEPROM' 카테고리의 다른 글
    • [Drone Firmware using STM32CubeIDE] 7-1. EEPROM: AT24C08
    anhy0923
    anhy0923

    티스토리툴바