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

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

Комментарии (0)