Files
Balsam_167/CAN_ADDRESS_MAP.md

168 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Карта 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 основного проекта частично не совпадают с текущими
константами устройств, поэтому менять адреса только по комментариям нельзя.