Update CCS12 peripheral firmware and documentation
This commit is contained in:
167
CAN_ADDRESS_MAP.md
Normal file
167
CAN_ADDRESS_MAP.md
Normal file
@@ -0,0 +1,167 @@
|
||||
# Карта CAN-адресов `Balsam_167_periph` и `BALZAM_167`
|
||||
|
||||
## Формирование адреса peripheral
|
||||
|
||||
В `Source/Internal/main.c` выполняется:
|
||||
|
||||
```c
|
||||
get_Mode();
|
||||
InitCan(0, Mode);
|
||||
```
|
||||
|
||||
В `Source/Internal/ecan.c` настроены два extended CAN ID:
|
||||
|
||||
```c
|
||||
long id = 0x80BA0000;
|
||||
|
||||
MBOX0.MSGID.all = id + 0x10 + DevNum; /* передача */
|
||||
MBOX1.MSGID.all = id + DevNum; /* приём */
|
||||
```
|
||||
|
||||
`0x80000000` задаёт extended-формат и не является частью отображаемого
|
||||
29-битного идентификатора. Фактические адреса на шине:
|
||||
|
||||
```text
|
||||
TX peripheral = 0x00BA0010 + Mode
|
||||
RX peripheral = 0x00BA0000 + Mode
|
||||
```
|
||||
|
||||
## Адреса всех режимов peripheral
|
||||
|
||||
| `Mode` | Назначение | TX peripheral -> BALZAM | RX BALZAM -> peripheral |
|
||||
|---:|---|---:|---:|
|
||||
| 1 | `adr_TRN1` | `0x00BA0011` | `0x00BA0001` |
|
||||
| 2 | `adr_TRN2` | `0x00BA0012` | `0x00BA0002` |
|
||||
| 3 | `adr_POW1` | `0x00BA0013` | `0x00BA0003` |
|
||||
| 4 | `adr_POW2` | `0x00BA0014` | `0x00BA0004` |
|
||||
| 5 | `adr_LOA1`, УМП1 | `0x00BA0015` | `0x00BA0005` |
|
||||
| 6 | `adr_LOA2`, УМП2 | `0x00BA0016` | `0x00BA0006` |
|
||||
| 7 | `adr_ENG1` | `0x00BA0017` | `0x00BA0007` |
|
||||
| 8 | `adr_PULT` | `0x00BA0018` | `0x00BA0008` |
|
||||
| 9 | `adr_SHKF` | `0x00BA0019` | `0x00BA0009` |
|
||||
|
||||
## Приёмные адреса основного контроллера
|
||||
|
||||
В `BALZAM_167/Src/balzam_7/CanSetupBalzam7.c` настроено:
|
||||
|
||||
| RX mailbox | CAN ID | Запись обработчиком |
|
||||
|---:|---:|---|
|
||||
| 0 | `0x00BA0010` | `Unites[1]` |
|
||||
| 1 | `0x00BA0011` | `Unites[2]` |
|
||||
| 2 | `0x00BA0012` | `Unites[3]` |
|
||||
| 3 | `0x00BA0013` | `Unites[4]` |
|
||||
| 4 | `0x00BA0014` | `Unites[5]` |
|
||||
| 5 | `0x00BA0015` | `Unites[6]` |
|
||||
| 6 | `0x00BA0016` | `Unites[7]` |
|
||||
| 7 | `0x00BA0017` | `Unites[8]` |
|
||||
| 8 | `0x00BA0018` | `Unites[9]` |
|
||||
| 9 | `0x00745019` | специальная обработка MPU |
|
||||
| 10 | `0x00BA001A` | `Unites[11]` |
|
||||
| 11 | `0x00BA001B` | `Unites[12]` |
|
||||
|
||||
Причина такого соответствия — запись в обработчике:
|
||||
|
||||
```c
|
||||
Unites[box + 1][register_address] = received_data;
|
||||
```
|
||||
|
||||
## Имена индексов `Unites`
|
||||
|
||||
Текущие определения в `CanSetupBalzam7.h`:
|
||||
|
||||
| Индекс | Имя устройства |
|
||||
|---:|---|
|
||||
| 1 | `UKSS1_CAN_DEVICE` |
|
||||
| 2 | `UKSS4_CAN_DEVICE` |
|
||||
| 3 | `UKSS2_CAN_DEVICE` |
|
||||
| 4 | `UKSS3_CAN_DEVICE` |
|
||||
| 5 | `UMP1_CAN_DEVICE` |
|
||||
| 6 | `UMP2_CAN_DEVICE` |
|
||||
| 7 | `UKSS8_CAN_DEVICE` |
|
||||
| 8 | `VPU1_CAN_DEVICE` |
|
||||
| 9 | `UKSS5_CAN_DEVICE` |
|
||||
| 10 | `MPU_CAN_DEVICE` |
|
||||
| 11 | `UKSS6_CAN_DEVICE` |
|
||||
| 12 | `UKSS7_CAN_DEVICE` |
|
||||
|
||||
## Фактическое попадание пакетов
|
||||
|
||||
При текущем коде пакет peripheral с `Mode=N` принимается mailbox `N`, после
|
||||
чего записывается в `Unites[N+1]`.
|
||||
|
||||
| Peripheral | TX CAN ID | Фактический `Unites` | Имя по текущим константам |
|
||||
|---|---:|---:|---|
|
||||
| `adr_TRN1`, Mode 1 | `0x00BA0011` | `Unites[2]` | `UKSS4_CAN_DEVICE` |
|
||||
| `adr_TRN2`, Mode 2 | `0x00BA0012` | `Unites[3]` | `UKSS2_CAN_DEVICE` |
|
||||
| `adr_POW1`, Mode 3 | `0x00BA0013` | `Unites[4]` | `UKSS3_CAN_DEVICE` |
|
||||
| `adr_POW2`, Mode 4 | `0x00BA0014` | `Unites[5]` | `UMP1_CAN_DEVICE` |
|
||||
| `adr_LOA1`, Mode 5 | `0x00BA0015` | `Unites[6]` | `UMP2_CAN_DEVICE` |
|
||||
| `adr_LOA2`, Mode 6 | `0x00BA0016` | `Unites[7]` | `UKSS8_CAN_DEVICE` |
|
||||
| `adr_ENG1`, Mode 7 | `0x00BA0017` | `Unites[8]` | `VPU1_CAN_DEVICE` |
|
||||
| `adr_PULT`, Mode 8 | `0x00BA0018` | `Unites[9]` | `UKSS5_CAN_DEVICE` |
|
||||
| `adr_SHKF`, Mode 9 | `0x00BA0019` | нет приёма | — |
|
||||
|
||||
## Связь с ошибкой обрыва фаз
|
||||
|
||||
Peripheral передаёт регистры ошибок `modbus[0]`, `modbus[1]` и `modbus[2]`
|
||||
в CAN-пакете с начальным адресом данных `0`. Признак обрыва/перекоса `Wry`
|
||||
занимает бит 2:
|
||||
|
||||
```text
|
||||
Wry = 0x0004
|
||||
```
|
||||
|
||||
Основной контроллер выставляет:
|
||||
|
||||
```c
|
||||
mpu_out[125].bit6 =
|
||||
(Unites[UMP1_CAN_DEVICE][0] & 0x0004) ||
|
||||
(Unites[UMP1_CAN_DEVICE][1] & 0x0004);
|
||||
|
||||
mpu_out[125].bit10 =
|
||||
(Unites[UMP2_CAN_DEVICE][0] & 0x0004) ||
|
||||
(Unites[UMP2_CAN_DEVICE][1] & 0x0004);
|
||||
```
|
||||
|
||||
С учётом `UMP1_CAN_DEVICE=5` и `UMP2_CAN_DEVICE=6` получаем:
|
||||
|
||||
| Выход MPU | Читаемые данные | CAN ID, заполняющий эти данные |
|
||||
|---|---|---:|
|
||||
| `mpu_out[125].bit6` | `Unites[5][0/1]` | `0x00BA0014` |
|
||||
| `mpu_out[125].bit10` | `Unites[6][0/1]` | `0x00BA0015` |
|
||||
|
||||
Но УМП отправляют:
|
||||
|
||||
| Плата | Фактический CAN ID | Куда пакет попадает сейчас |
|
||||
|---|---:|---|
|
||||
| УМП1, `Mode=5` | `0x00BA0015` | `Unites[6]`, область УМП2 |
|
||||
| УМП2, `Mode=6` | `0x00BA0016` | `Unites[7]`, область `UKSS8` |
|
||||
|
||||
Таким образом, сейчас присутствует смещение адреса на единицу. УМП1 может
|
||||
влиять на `mpu_out[125].bit10` вместо `bit6`, а УМП2 не попадает ни в один из
|
||||
двух ожидаемых массивов УМП.
|
||||
|
||||
## Обратное направление
|
||||
|
||||
Основной контроллер отправляет устройству с индексом `N` через mailbox
|
||||
`15 + N`, которому назначен CAN ID с номером `N - 1`.
|
||||
|
||||
| Получатель | TX CAN ID BALZAM | RX CAN ID peripheral |
|
||||
|---|---:|---:|
|
||||
| УМП1 | `0x00BA0004` | `0x00BA0005` |
|
||||
| УМП2 | `0x00BA0005` | `0x00BA0006` |
|
||||
|
||||
В обратном направлении также имеется смещение на единицу.
|
||||
|
||||
## Вывод
|
||||
|
||||
Перед изменением кода необходимо сверить CAN-трассу и реальные положения
|
||||
адресных перемычек. После подтверждения адресной схемы возможны два варианта:
|
||||
|
||||
1. использовать при настройке CAN peripheral значение `Mode - 1`;
|
||||
2. перенастроить RX/TX mailbox основного контроллера под текущие значения
|
||||
`Mode` peripheral.
|
||||
|
||||
Комментарии возле mailbox основного проекта частично не совпадают с текущими
|
||||
константами устройств, поэтому менять адреса только по комментариям нельзя.
|
||||
|
||||
Reference in New Issue
Block a user