Files
GbTModuleEV/SERIAL_PROTOCOL.md

169 lines
4.5 KiB
Markdown

# 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]`