Настройка FDCAN в CubeMx

от автора

0. Настройка производилась для STM32H743 при частоте работы CPU 480 МГц и частоте FDCAN 120 МГц

Частота CPU
Частота CPU
Частота FDCAN
Частота FDCAN

1. Для того что бы открыть настройки FDCANx есть следующий путь: «Connectivity» -> «FDCANx» -> «Activated»

2. Описание базовых настроек

  • Frame Format:

    1. Classic Mode — будет использован идентификатор (ID) стандартного размера.

    2. FD mode without BitRate Switching — будет использован расширенный идентификатор без изменения скорости передачи данных.

    3. FD mode with BitRate Switching — будет использован расширенный идентификатор и разрешена разная скорость передачи для байт данных (зеленные шестиугольники) и байт информации (все остальные). (Как я понял, можно настроить скорость передачи байт данных например на скорость 100КБ/с, а всех остальных байт на 500КБ/с или наоборот).

Картинка с логического анализатора, сделана в приложении DSView
Картинка с логического анализатора, сделана в приложении DSView
  • Mode:

    1. Normal mode — данные отправляются в шину и читаются из нее.

    2. Restricted operation — принимаются данные из шины, могут отправляться сигналы подтверждения.

    3. Bus monitoring mode — данные только принимаются из шины и ничего в шину не отправляется.

    4. Internal LoopBack mode — данные не отправляются в шину, а отправляются на вход CAN (замыкание производится аппаратно, ничего самому замыкать не надо). Принимаются только отправленные нами данные, чтение из шины не производится.

    5. External LoopBack mode — данные отправляются и в шину, и на вход CAN (замыкание производится аппаратно, ничего самому замыкать не надо). Принимаются только отправленные нами данные, чтение из шины не производится.

    Я для себя сделал такую картинку, НО из Reference manual, я так и не смог до конца понять Restricted operation, поэтому картинка может быть не точной (поправьте в комментариях).

Режимы работы
Режимы работы
  • Auto Retransmission — разрешает или запрещает повторную отправку сообщений.

  • Transmit Pause — дополнительная пауза при передаче. Такая пауза необходима для того чтобы дать другим передатчикам доступ к шине в случае, если их приоритет мал.

  • Protocol Exception — разрешение события Protocol Exception. При нормальной работе за битом FDF должен следовать резервный доминантный (LOW) бит (res). Данное событие генерируется в случаях, когда резервный бит имеет рецессивное значение (HIGH).

  • Nominal Sync Jump Width — количество временных квантов расширения, определяет допустимое расширение границ битовых сегментов «Nominal Time Seg1(2)».

  • Data Prescaler — делитель для настройки частоты передачи байт данных (зеленых шестиугольников).
    Имеет значение только при Frame Format — FD mode with BitRate Switching

  • Data Sync Jump Width — количество временных квантов расширения, определяет допустимое расширение границ битовых сегментов «Data Time Seg1(2)»
    Имеет значение только при Frame Format — FD mode with BitRate Switching

  • Data Time Seg1 / Seg2 — количество временных квантов в битовом сегменте 1 / 2
    Имеет значение только при Frame Format — FD mode with BitRate Switching

  • Massage Ram Offset — Указывает стартовый адрес RAM сообщения.

  • Std Filters Nbr — разрешенное количество фильтров со стандартным идентификатором.

  • Ext Filters Nbr — разрешенное количество фильтров с расширенным идентификатором.

  • Rx Fifo0/1 Elmts Nbr — число входных элементов FIFO0/1 (Место куда сохраняются принятые данные).

  • Rx Fifo0/1 Elmts Size — размер в байтах входных элементов FIFO0/1.

  • Rx Buffers Nbr — число входных буферов (Место куда сохраняются принятые данные).

  • Rx Buffer Size — размер в байтах входных буферов RxBuffer.

  • Tx Events Nbr — ??? (Сам так и не разобрался, думаю в комментариях подскажут).

  • Tx Buffers Nbr — число буферов для отправляемых сообщений.

  • Tx Fifo Queue Elmts Nbr — размер очереди в которой хранятся сообщения готовые к отправке.

  • Tx Fifo Queue Mode — режим работы передающего буфера:

    1. Fifo Mode — Fifo буфер.

    2. Queue Mode — режим очереди.

  • Tx Elmt Size — размер отправляемых сообщений в байтах.

    Базовые настройки у меня получились следующие.

3. Калибровка частоты — Disable

4. Параметры таймингов битов — здесь настраивается скорость работы FDCAN

  • Nominal Prescaler — предделитель входной частоты.

  • Nominal time quantum — длительность одного кванта.

  • Nominal Time Seg1(2) — количество временных квантов в битовом сегменте 1(2).

  • Nominal Time for one Bit — время необходимое для передачи одного бита.

  • Nominal Baud Rate — итоговая скорость передачи данных для FDCAN.

Для правильной настройки этого блока следует использовать онлайн калькулятор:
http://bittiming.can-wiki.info/

Выбираем ST Microelectronics bxCAN, в Clock Rate указываем входную частоту FDCAN, Sample Point — это точка в которой происходит «захват» бита (у меня это 75%, часто используется 87.5), SJW это «Nominal Sync Jump Width», это значение от 1 до 4 на которое может аппаратно увеличиваться или уменьшаться длительность сегментов Seg1/2 для лучшего захвата бита. Последняя ячейка это скорость на которую мы настраиваем FDCAN.

Калькулятор
Калькулятор

Результатом будет таблица с рекомендуемыми значениями (желтые строки — наилучшие настройки). Отсюда берем «Prescaler» -> «Nominal Prescaler»,
«Seg1» -> «Nominal Time Seg1», «Seg2» -> «Nominal Time Seg2».

Результат
Результат

5. Включаем прерывание

У меня в прерываниях происходит чтение принимаемых данных.

Это все настройки FDCAN, которые я проводил в CubeMx.

Эта статья изначально была написана для внутреннего форума на предприятии, но я решил, что такая информация может быть полезна и другим. Честно признаюсь, что в статье есть прямые копирования с других статей, (где именно уже не помню), но оставлю ссылки, откуда я точно брал информацию, надеюсь их авторы на меня не обидятся:

https://www.compel.ru/lib/142251

https://istarik.ru/blog/stm32/159.html

И вообще это моя первая статья (туториал), уверен что где-то допустил ошибки, поэтому поправьте в комментариях.


ссылка на оригинал статьи https://habr.com/ru/post/719358/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *