Files
Balsam_167/CAN_ADDRESS_MAP.md

6.4 KiB
Raw Permalink Blame History

Карта CAN-адресов Balsam_167_periph и BALZAM_167

Формирование адреса peripheral

В Source/Internal/main.c выполняется:

get_Mode();
InitCan(0, Mode);

В Source/Internal/ecan.c настроены два extended CAN ID:

long id = 0x80BA0000;

MBOX0.MSGID.all = id + 0x10 + DevNum; /* передача */
MBOX1.MSGID.all = id + DevNum;        /* приём */

0x80000000 задаёт extended-формат и не является частью отображаемого 29-битного идентификатора. Фактические адреса на шине:

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]

Причина такого соответствия — запись в обработчике:

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:

Wry = 0x0004

Основной контроллер выставляет:

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 основного проекта частично не совпадают с текущими константами устройств, поэтому менять адреса только по комментариям нельзя.