Files
GbTModuleEV/SERIAL_PROTOCOL.md

4.5 KiB

Serial protocol (GbTModuleEV)

Актуальная версия протокола для USART2 (binary packet + CRC32).

1. Транспорт и формат пакета

  • Интерфейс: USART2
  • Скорость/параметры UART: задаются в CubeMX (usart.c)
  • Направление (RS485 DIR): управляется прошивкой через USART2_DIR

Формат команды от хоста:

  1. command (1 byte)
  2. argument (N bytes, может быть 0)
  3. crc32 (4 bytes, little-endian) по данным command + argument

Формат ответа от устройства:

  1. response_code (1 byte) — обычно код ответа или код команды для data-response
  2. payload (N bytes, может быть 0)
  3. crc32 (4 bytes, little-endian) по данным response_code + payload

CRC

  • CRC-32 (software), полином: 0xEDB88320
  • Init: 0xFFFFFFFF
  • Final XOR: 0xFFFFFFFF
  • Порядок CRC-байтов в пакете: little-endian

Коды ответа

  • 0x12 = RESP_SUCCESS
  • 0x13 = RESP_FAILED
  • 0x14 = RESP_INVALID (ошибка формата/CRC)

2. Команды (host -> device)

2.1 Read-only

  • 0x01 CMD_GET_INFO

    • Arg: none
    • Response: response_code = 0x01, payload = InfoPacket_t
  • 0x02 CMD_GET_GBT_STATUS

    • Arg: none
    • Response: response_code = 0x02, payload = GBT_MonitorPacket_t
  • 0x03 CMD_GET_CCS_STATUS

    • Arg: none
    • Response: response_code = 0x03, payload = CCS_MonitorPacket_t

2.2 GBT control

  • 0x10 CMD_GBT_CC_ENABLE

    • Arg: uint8_t enable (0/1)
    • Action: RELAY_CC write
    • Ack: RESP_SUCCESS/RESP_FAILED
  • 0x11 CMD_GBT_STOP

    • Arg: none
    • Action: CONN[0].connControl = CMD_STOP
    • Ack: RESP_SUCCESS/RESP_FAILED
  • 0x12 CMD_GBT_SET_SOC

    • Arg: uint8_t soc
    • Action: CONN[0].SOC = soc
    • Ack: RESP_SUCCESS/RESP_FAILED
  • 0x13 CMD_GBT_SET_REQUEST

    • Arg: EvSetLimits_t
      • uint16_t requestedVoltage
      • uint16_t requestedCurrent
    • Action: запись в CONN[0].RequestedVoltage/RequestedCurrent
    • Ack: RESP_SUCCESS/RESP_FAILED
  • 0x14 CMD_GBT_ENABLE_LOAD

    • Arg: uint8_t enable (0/1)
    • Action:
      • CONN[0].enableLoad
      • CONN[0].ContactorEnabled
    • Ack: RESP_SUCCESS/RESP_FAILED
  • 0x18 CMD_GBT_SET_VIN

    • Arg: uint8_t vin[17]
    • Action: копирование в GBT_EVInfo.EVIN
    • Ack: RESP_SUCCESS/RESP_FAILED

2.3 CCS control

  • 0x20 CMD_CCS_SET_STATE

    • Arg: uint8_t cp_state_enum
    • Action: cp_state = (CP_State_t)arg
    • Ack: RESP_SUCCESS/RESP_FAILED
  • 0x24 CMD_CCS_ENABLE_LOAD

    • Arg: uint8_t enable (0/1)
    • Action:
      • CONN[1].enableLoad
      • CONN[1].ContactorEnabled
    • Ack: RESP_SUCCESS/RESP_FAILED

3. Payload structures (packed)

Все структуры передаются как __attribute__((packed)), little-endian для multi-byte полей.

3.1 InfoPacket_t (GET_INFO)

  • uint16_t serialNumber
  • uint8_t boardVersion
  • uint8_t stationType
  • uint16_t fw_version_major
  • uint16_t fw_version_minor
  • uint16_t fw_version_patch

3.2 GBT_MonitorPacket_t (GET_GBT_STATUS)

  • uint8_t connector_type (0x01)
  • uint16_t requestedVoltage
  • uint16_t requestedCurrent
  • uint16_t measuredVoltageSE
  • uint16_t measuredCurrentSE
  • uint16_t measuredVoltage
  • uint16_t measuredCurrent
  • uint8_t cc_enabled
  • uint8_t contactorEnabled
  • CONN_Error_t chargingError (uint8_t)
  • uint8_t EvseConnected
  • uint8_t soc
  • uint8_t vin[17]
  • uint8_t cc_state
  • CONN_State_t connState (uint8_t)

3.3 CCS_MonitorPacket_t (GET_CCS_STATUS)

  • uint8_t connector_type (0x02)
  • uint16_t measuredVoltage
  • uint16_t measuredCurrent
  • uint8_t cp_enabled
  • uint8_t contactorEnabled
  • CONN_Error_t chargingError (uint8_t)
  • uint8_t EvseConnected
  • uint8_t soc
  • uint8_t cp_state
  • uint8_t cp_pwm_duty
  • CONN_State_t connState (uint8_t)

4. Валидация команд

  • Для каждой команды проверяется argument_length (по фактическому размеру аргумента).
  • Если длина неверная: ответ RESP_FAILED.
  • Если пакет не проходит parse/CRC: ответ RESP_INVALID.

5. Пример (логический)

CMD_GBT_SET_SOC = 0x12, soc = 80:

  • TX body: [0x12, 0x50]
  • TX full: [0x12, 0x50, crc0, crc1, crc2, crc3]
  • RX (ack): [0x12, crc0, crc1, crc2, crc3]