4.5 KiB
4.5 KiB
Serial protocol (GbTModuleEV)
Актуальная версия протокола для USART2 (binary packet + CRC32).
1. Транспорт и формат пакета
- Интерфейс:
USART2 - Скорость/параметры UART: задаются в CubeMX (
usart.c) - Направление (RS485 DIR): управляется прошивкой через
USART2_DIR
Формат команды от хоста:
command(1 byte)argument(Nbytes, может быть 0)crc32(4 bytes, little-endian) по даннымcommand + argument
Формат ответа от устройства:
response_code(1 byte) — обычно код ответа или код команды для data-responsepayload(Nbytes, может быть 0)crc32(4 bytes, little-endian) по даннымresponse_code + payload
CRC
- CRC-32 (software), полином:
0xEDB88320 - Init:
0xFFFFFFFF - Final XOR:
0xFFFFFFFF - Порядок CRC-байтов в пакете: little-endian
Коды ответа
0x12=RESP_SUCCESS0x13=RESP_FAILED0x14=RESP_INVALID(ошибка формата/CRC)
2. Команды (host -> device)
2.1 Read-only
-
0x01CMD_GET_INFO- Arg: none
- Response:
response_code = 0x01, payload =InfoPacket_t
-
0x02CMD_GET_GBT_STATUS- Arg: none
- Response:
response_code = 0x02, payload =GBT_MonitorPacket_t
-
0x03CMD_GET_CCS_STATUS- Arg: none
- Response:
response_code = 0x03, payload =CCS_MonitorPacket_t
2.2 GBT control
-
0x10CMD_GBT_CC_ENABLE- Arg:
uint8_t enable(0/1) - Action:
RELAY_CCwrite - Ack:
RESP_SUCCESS/RESP_FAILED
- Arg:
-
0x11CMD_GBT_STOP- Arg: none
- Action:
CONN[0].connControl = CMD_STOP - Ack:
RESP_SUCCESS/RESP_FAILED
-
0x12CMD_GBT_SET_SOC- Arg:
uint8_t soc - Action:
CONN[0].SOC = soc - Ack:
RESP_SUCCESS/RESP_FAILED
- Arg:
-
0x13CMD_GBT_SET_REQUEST- Arg:
EvSetLimits_tuint16_t requestedVoltageuint16_t requestedCurrent
- Action: запись в
CONN[0].RequestedVoltage/RequestedCurrent - Ack:
RESP_SUCCESS/RESP_FAILED
- Arg:
-
0x14CMD_GBT_ENABLE_LOAD- Arg:
uint8_t enable(0/1) - Action:
CONN[0].enableLoadCONN[0].ContactorEnabled
- Ack:
RESP_SUCCESS/RESP_FAILED
- Arg:
-
0x18CMD_GBT_SET_VIN- Arg:
uint8_t vin[17] - Action: копирование в
GBT_EVInfo.EVIN - Ack:
RESP_SUCCESS/RESP_FAILED
- Arg:
2.3 CCS control
-
0x20CMD_CCS_SET_STATE- Arg:
uint8_t cp_state_enum - Action:
cp_state = (CP_State_t)arg - Ack:
RESP_SUCCESS/RESP_FAILED
- Arg:
-
0x24CMD_CCS_ENABLE_LOAD- Arg:
uint8_t enable(0/1) - Action:
CONN[1].enableLoadCONN[1].ContactorEnabled
- Ack:
RESP_SUCCESS/RESP_FAILED
- Arg:
3. Payload structures (packed)
Все структуры передаются как __attribute__((packed)), little-endian для multi-byte полей.
3.1 InfoPacket_t (GET_INFO)
uint16_t serialNumberuint8_t boardVersionuint8_t stationTypeuint16_t fw_version_majoruint16_t fw_version_minoruint16_t fw_version_patch
3.2 GBT_MonitorPacket_t (GET_GBT_STATUS)
uint8_t connector_type(0x01)uint16_t requestedVoltageuint16_t requestedCurrentuint16_t measuredVoltageSEuint16_t measuredCurrentSEuint16_t measuredVoltageuint16_t measuredCurrentuint8_t cc_enableduint8_t contactorEnabledCONN_Error_t chargingError(uint8_t)uint8_t EvseConnecteduint8_t socuint8_t vin[17]uint8_t cc_stateCONN_State_t connState(uint8_t)
3.3 CCS_MonitorPacket_t (GET_CCS_STATUS)
uint8_t connector_type(0x02)uint16_t measuredVoltageuint16_t measuredCurrentuint8_t cp_enableduint8_t contactorEnabledCONN_Error_t chargingError(uint8_t)uint8_t EvseConnecteduint8_t socuint8_t cp_stateuint8_t cp_pwm_dutyCONN_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]