Базовое расширенное периферийное устройство CAN (Basic Extended CAN, которое сокращенно называется bxCAN), позволяет подключить MCU STM32 с сети CAN. Поддерживаются CAN протоколы версий 2.0A и 2.0B. Контролер CAN был разработан для эффективного обслуживания большого количества входящих сообщений с минимальной нагрузкой на вычислительное ядро CPU. Также он удовлетворяет требованиям приоритета для передачи сообщений.
Примечание: информация в этой статье (перевод раздела "32 Controller area network (bxCAN)" даташита [1]) относится ко всем представителям MCU семейства STM32F4xx, если специально не указано что-то иное.
В критически важных для безопасности приложениях контроллер CAN предоставляет все аппаратные функции для поддержки опции обмена CAN Time Triggered Communication.
Основные функции и возможности bxCAN:
• Имеется два интерфейса CAN: CAN1 и CAN2. • Поддерживается протокол CAN версий 2.0A, B Active. • Скорости до 1 мегабит/сек. • Поддерживается опция Time Triggered Communication.
Передача:
• 3 передающих mailbox. • Конфигурируемый приоритет передачи. • Метка времени (Time Stamp) на передаче SOF.
Прием:
• 2 принимающих FIFO с тремя уровнями. • Масштабируемые банки фильтра: 28 банков фильтра, используемые совместно CAN1 и CAN2. • Функция идентификатора списка. • Конфигурируемый порог переполнения FIFO (FIFO overrun). • Метка времени (Time Stamp) на приеме SOF.
Опция коммуникации Time-triggered:
• Запрет режима автоматической ретрансмиссии. • 16-разрядный свободно считающий таймер. • Метка времени (Time Stamp) в последних двух байтах данных.
Управление:
• Маскируемые прерывания. • Эффективное для программы отображение mailbox на уникальный адрес.
Одновременная работа двух CAN (Dual CAN):
• CAN1: Master bxCAN для управления коммуникацией между Slave bxCAN и 512 байтами памяти SRAM. • CAN2: Slave bxCAN, без прямого доступа к памяти SRAM. • Два bxCAN используют общую память 512 байт SRAM (см. рис. 335).
Рис. 335. Блок-схема Dual CAN.
Примечание: начальный банк фильтров CAN2 номер n конфигурируется записью CAN2SB[5:0] бит в регистре CAN_FMR.
[Общее описание bxCAN]
В современных приложениях CAN количество узлов сети увеличивается, и часто сети соединяются друг с другом через шлюзы (gateway). Обычно количество сообщений в системе (и таким образом обрабатываемых каждым узлом) значительно увеличивается. В дополнение к сообщениям приложения были введены сообщения управления сетью и диагностики (Network Management and Diagnostic messages).
• Для обработки каждого типа сообщения требуется расширенный механизм фильтрации.
Кроме того, задачи приложения требуют большего времени CPU, поэтому должны быть уменьшены ограничения по реальному времени обработки, вызванные приемом сообщения.
• Схема FIFO приема позволяет переключить CPU на задачи приложения на долгое время без потери принимаемых сообщений.
Стандартный высокоуровневый протокол HLP (аббревиатура от Higher Layer Protocol), основанный на стандартных драйверах CAN, требует эффективного интерфейса с контроллером CAN.
Рис. 334. Топология сети CAN.
Активное ядро CAN 2.0B. Модуль bxCAN полностью автономно обрабатывает передачу и прием сообщений CAN. Стандартные идентификаторы (11 бит) и расширенные идентификаторы (29 бит) полностью поддерживаются аппаратурой контроллера.
Регистры управления, статуса и конфигурации. Приложение использует эти регистры для следующих целей:
• Конфигурирования параметров CAN, например скорости передачи/приема (baud rate). • Запрос передач. • Обработка приема. • Управление прерываниями. • Получение информации диагностики.
Передающие ящики (Tx mailboxes). Предоставлены 3 передающих mailbox, чтобы настраивать отправку сообщений. Планировщик передачи (transmission Scheduler) принимает решение, какой mailbox должен быть передан первым.
Фильтры приема (Acceptance filters). bxCAN предоставляет 28 масштабируемых / конфигурируемых банков фильтров по идентификатору, чтобы выделять из принимаемых данных нужные сообщения и отбрасывать другие.
FIFO приема. Для сохранения поступающих сообщений используются 2 приемных FIFO. В каждом FIFO можно сохранить 3 полных сообщения. FIFO полностью обслуживаются аппаратурой контроллера CAN.
[Рабочие режимы bxCAN]
У bxCAN есть 3 основных рабочих режима: initialization (инициализация), normal (активная работа) и Sleep (сон, приостановка). После аппаратного сброса bxCAN находится в режиме Sleep, чтобы снизить потребление энергии, и на CANTX активен внутренний pull-up (верхний подтягивающий резистор). Программа запрашивает bxCAN на вход в режим initialization или Sleep установкой бит INRQ или SLEEP в регистре CAN_MCR. Как только произошел вход в режим, bxCAN подтверждает это установкой бит INAK или SLAK в регистре CAN_MSR, и внутренний pull-up запрещается. Когда ни один из бит INAK и SLAK не установлен, bxCAN находится в режиме normal. Перед входом в режим normal bxCAN всегда должен быть синхронизирован с шиной CAN. Для синхронизации bxCAN ждет, пока шина CAN не освободится (перейдет в состояние idle), это означает, что отслеживается появление 11 следующих друг за другом рецессивных бита на сигнале CANRX.
Режим инициализации. Программная инициализация может быть осуществлена, когда железо CAN находится в режиме инициализации (Initialization mode). Чтобы войти в этот режим, программа устанавливает бит INRQ в регистре CAN_MCR и ждет, пока железо подтвердит этот запрос установкой бита INAK в регистре статуса CAN_MSR.
Чтобы покинуть режим инициализации, программа очищает бит INQR. bxCAN покинет режим инициализации, когда бит INAK очистится аппаратурой.
Во время режима инициализации останавливаются все входящие и исходящие транзакции сообщений CAN, и статус шины CAN на выходе CANTX сохраняется рецессивным (лог. 1).
Вход в режим инициализации не меняет ни один регистр конфигурации.
Чтобы инициализировать контроллер CAN, программа должна установить длительность бита (Bit Timing, регистр CAN_BTR) и опции CAN (регистр управления CAN_MCR).
Чтобы инициализировать регистры, связанные с банками фильтров CAN (mode, scale, FIFO assignment, activation и значения фильтраand filter values), программа должна установить бит FINIT (в регистре CAN_FMR). Инициализация фильтра также может быть осуществлена вне режима инициализации.
Примечание: когда FINIT=1, прием CAN деактивирован. Значения фильтра также можно модифицировать сбросом соответствующих бит активации (в регистре CAN_FA1R). Если банк фильтра не используется, то рекомендуется оставить его в неактивном режиме (т. е. оставить его соответствующий бит FACTx очищенным).
Нормальный режим (normal mode). Как только инициализация завершена, программа должна запросить у аппаратуры вход в нормальный режим, чтобы она могла засинхронизироваться с шиной CAN, и начать прием и передачу.
Запрос входа в Normal mode выдается очисткой бита INRQ в регистре управления CAN_MCR. Блок bxCAN входит в режим Normal и готов принять участие в активности на шине, когда он синхронизирован с передачей данных по шине CAN. Это осуществляется ожиданием появления на шине 11 следующих друг за другом рецессивных бит (состояние ожидания Bus Idle). Переключение в Normal mode подтверждается аппаратурой, когда она сбрасывает бит INAK в регистре статуса CAN_MSR.
Инициализация значений фильтра не зависит от режима инициализации, однако должна осуществляться, когда инициализируемый фильтр не активен (его соответствующий бит FACTx сброшен). Параметры фильтра scale и mode должны конфигурироваться перед входом в режим Normal.
Режим Sleep (малое потребление мощности). Чтобы уменьшить энергопотребление, у bxCAN есть режим пониженного потребления мощности (low-power mode), который называется режим сна (Sleep mode). В этот режим осуществляется вход по запросу программы установкой бита SLEEP в регистре CAN_MCR. В этом режиме тактирование bxCAN останавливается, однако программа все еще имеет доступ к ящикам (mailboxes) bxCAN.
Если программа запрашивает вход в режим инициализации установкой бита INRQ, когда bxCAN находится в Sleep mode, она также должна очистить бит SLEEP.
Блок bxCAN может быть разбужен (выведен из Sleep mode) либо программно путем очистки бита SLEEP, или когда была детектирована активность шины CAN.
Когда была определена активность на шине CAN, аппаратура автоматически выполняет последовательность пробуждения очисткой бита SLEEP, если установлен бит AWUM в регистре CAN_MCR. Если бит AWUM очищен, то программа должна очистить бит SLEEP, когда произошло прерывание пробуждения (wakeup interrupt), чтобы bxCAN вышел из Sleep mode.
Примечание: если разрешено прерывание пробуждения (wakeup interrupt, установлен бит WKUIE в регистре CAN_IER), то будет генерироваться прерывание пробуждения, когда была определена активность шины CAN, даже если bxCAN автоматически выполняет последовательность пробуждения.
После того, как бит SLEEP был очищен, произойдет выход из Sleep mode, когда bxCAN засинхронизировался с шиной CAN, см. рис. 336. Из режима Sleep mode произойдет выход, когда аппаратура очистила бит SLAK.
Рис. 336. Режимы bxCAN.
Примечания:
(1) ACK = состояние ожидания (wait state), во время которого аппаратура подтверждает запрос установкой бит INAK или SLAK в регистре CAN_MSR. (2) SYNC = состояние, во время которого bxCAN ожидает состояния ожидания шины CAN (idle state, когда прошло 11 следующих друг за другом рецессивных бита на CANRX).
[Режим тестирования]
Режим тестирования может быть выбран битами SILM и LBKM в регистре CAN_BTR. Эти биты должны быть сконфигурированы, когда bxCAN находится в Initialization mode. Как только был выбран режим тестирования, для входа в режим Normal должен быть сброшен бит INRQ в регистре CAN_MCR.
Silent mode. Блок bxCAN может быть переведен в "тихий режим" (Silent mode) установкой бита SILM в регистре CAN_BTR.
В тихом режиме bxCAN может принимать правильные фреймы данных и правильные фреймы remote, однако bxCAN передает только рецессивные биты на шине CAN, и не может начать передачу. Если bxCAN должен отправить доминантный бит (бит ACK, флаг overload, флаг active error), то бит перемашрутизируется внутри таким образом, что ядро CAN мониторит этот доминантный бит, хотя шина CAN может оставаться в рецессивном состоянии. Silent mode может использоваться для анализа трафика на шине CAN без влияния на шину передачей доминантных бит (доминантные биты Acknowledge, фреймы ошибки Error Frame физически не передаются).
Рис. 337. Блок bxCAN в Silent Mode.
Loop back mode. Блок bxCAN может быть установлен в режим зацикливания (Loop Back Mode) установкой бита LBKM в регистре CAN_BTR. В Loop Back Mode блок bxCAN обрабатывает свои собственные передаваемые сообщения как принимаемые, и сохраняет их (если они прошли фильтрацию, acceptance filtering) в ящиках приема (Receive mailbox).
Рис. 338. Блок bxCAN в режиме зацикливания.
Этот режим предоставлен для функций самотестирования. Чтобы быть независимым от внешних событий, ядро CAN игнорирует ошибки подтверждения (acknowledge errors, отсутствие доминантного бита, оцифрованного в слоте подтверждения данных фрейма data / remote), в режиме Loop Back. В этом режиме bxCAN соединяет выход Tx со входом Rx внутри чипа. Актуальное значение входа на выводе CANRX игнорируется блоком bxCAN. Передаваемые сообщения могут мониториться на выводе CANTX.
Комбинация режимов Loop back и silent. Можно также скомбинировать режимы Loop Back и Silent установкой бит LBKM и SILM в регистре CAN_BTR. Это может использоваться для "горячего самотестирования", т. е. bxCAN может быть проверен в режиме Loop Back, но без влияния на работающую систему CAN, подключенную к выводам CANTX и CANRX. В этом режиме вывод CANRX отключен от bxCAN, и вывод CANTX удерживается в рецессивном состоянии.
Рис. 339. Блок bxCAN в комбинированном режиме.
[Debug mode]
Когда MCU вошел в отладочный режим debug mode (приостановлено ядро Cortex®-M4 с FPU), блок bxCAN продолжит нормально работать или останавливается, в зависимости от:
• Бита DBG_CAN1_STOP для CAN1 или бита DBG_CAN2_STOP для CAN2 в модуле DBG. Для получения подробностей см. секцию "38.16.2 Debug support for timers, watchdog, bxCAN and I2C" даташита [1]. • Бита DBF в регистре CAN_MCR. Для дополнительной информации см. секцию 32.9.2 даташита [1].
[Функциональное описание bxCAN]
Обработка передачи. Чтобы передать сообщение, приложение должно выбрать пустой transmit mailbox, установить идентификатор, код длины данных (data length code, DLC) и передаваемые данные перед тем, как запросить передачу установкой соответствующего бита TXRQ в регистре CAN_TIxR. Как только mailbox покинул состояние опустошенности (empty state), программа больше не может получить доступ на запись в его регистры. Сразу после установки бита TXRQ mailbox входит в состояние ожидания отправки (enters pending), и ждет, когда он станет самым приоритетным для передачи, см. врезку "Приоритет передачи". Как только mailbox получил самый высокий приоритет, он будет запланирован на передачу. Передача сообщения запланированного mailbox начнется (произойдет вход в состояние передачи), когда шина CAN окажется в состоянии ожидания (idle). Как только mailbox был успешно передан, он снова станет пустым (empty). Аппаратура покажет успешную передач установкой бит RQCP и TXOK в регистре CAN_TSR.
Если передача была неудачной, то это состояние будет показано битом ALST в регистре CAN_TSR, когда был проигрыш арбитража (Arbitration Lost), и/или битом TERR, когда была детектирована ошибка передачи.
Приоритет передачи устанавливается по идентификатору и по порядку запроса передачи (transmit request order).
По идентификатору. Когда больше одного transmit mailbox ожидают передачи, порядок передачи сообщения определяется по идентификатору, сохраненному в mailbox. Сообщение с самым малым значением идентификатора имеет самый высокий приоритет в соответствии со схемой арбитража протокола CAN. Если же значения идентификатора одинаковые, то сначала планируется передача из mailbox с самым малым номером.
По порядку запроса передачи. Передающие mailbox можно сконфигурировать как transmit FIFO установкой бита TXFP в регистре управления CAN_MCR. В этом режиме приоритет для порядка передачи определяется по порядку поступления запросов не передачу (тот ящик, для которого запрос поступил раньше, будет передан первым). Этот режим очень полезен для сегментированных передач.
Обрыв передачи. Запрос на передачу может быть оборван (abort) пользователем путем установки бита ABRQ в регистре CAN_TSR. Когда mailbox находится в состоянии pending или scheduled обрыв произойдет немедленно. Когда запрос на abort поступил в состоянии передачи mailbox, то состояние передачи может иметь одно из 2 результатов. Если была успешная передача, то mailbox станет пустым с установкой бита TXOK в регистре CAN_TSR. Если передача была неудачной, то mailbox получит состояние запланированности на передачу (scheduled), передача оборвется и ящик станет пустым с очищенным TXOK. Во всех случаях ящик становится пустым, как минимум в конце текущей передачи.
Режим не автоматической повторной передачи. Этот режим был реализован, чтобы удовлетворить требованиям опции Time Triggered Communication стандарта CAN. Чтобы сконфигурировать аппаратуру в этот режим, должен быть установлен бит NART в регистре CAN_MCR.
В этом режиме каждая передача начинается только однократно. Если первая попытка потерпела неудачу из-за потери арбитража или из-за ошибки, аппаратура не будет автоматически перезапускать передачу сообщения.
По окончании первой попытки передачи, аппаратура считает запрос завершенным, и установит бит RQCP в регистре CAN_TSR. Результат передачи показывается в регистре CAN_TSR битами TXOK, ALST и TERR.
Рис. 340. Состояния передающего mailbox.
Режим Time Triggered Communication. В этом режиме активируется внутренний счетчик аппаратуры CAN и используется для генерации значения метки времени (Time Stamp), сохраняемой в регистрах CAN_RDTxR/CAN_TDTxR (соответственно для Rx и Tx mailbox). Внутренний счетчик инкрементируется на каждом битовом интервале CAN, см. далее секцию "Интервалы бит (bit timing)". Внутренний счетчик захватывается в точке оцифровки (sample point) бита начала фрейма (Start Of Frame, SOF) и для приема, и для передачи.
[Обработка приема]
Для приема сообщений CAN предоставляются три mailbox, организованных как FIFO. Чтобы уменьшить нагрузку на CPU, упростить программу и гарантировать целостность данных, FIFO полностью обслуживается аппаратурой. Приложение обращается к сохраненным в FIFO сообщениям через выходной mailbox FIFO.
Корректно принятое сообщение. Принятое сообщение считается корректным (valid), когда оно было правильно принято в соответствии с протоколом CAN (не было ошибки до последнего бита, но с одним битом в поле EOF), и при этом успешно прошло фильтрацию по идентификатору (см. далее секцию "Фильтрация по идентификатору").
Рис. 341. Состояния приемного FIFO.
Обслуживание FIFO. Начиная с состояния "пусто" (empty) FIFO, первое корректно принятое сообщение сохраняется в FIFO, который переходит в состояние pending_1 (ожидает обработки одно принятое сообщение). Аппаратура сигнализирует об этом событии установкой бит FMP[1:0] в регистре CAN_RFR в значение 01b. Сообщение становится доступным в выходном mailbox FIFO. Программа считывает текущий mailbox и освобождает его установкой бита RFOM в регистре CAN_RFR. После этого FIFO снова становится пустым. Если в этот момент было принято новое корректное сообщение, то FIFO остается в состоянии pending_1, и новое сообщение доступно в выходном mailbox FIFO.
Если программа не освободила mailbox, то следующее корректно принятое сообщение будет сохранено в FIFO, который перейдет в состояние pending_2 (FMP[1:0] = 10b). Процесс сохранения сообщений в FIFO продолжится вплоть до перехода FIFO в состояние pending_3 (FMP[1:0] = 11b). В этой точке программа должна освободить выходной mailbox FIFO установкой бита RFOM, чтобы можно было освободить mailbox для сохранения нового корректного сообщения. Иначе следующее корректное сообщение будет потеряно. См. также раздел "Хранилище сообщений".
Overrun. Как только FIFO перешел в состояние pending_3 (т. е. все mailbox заполнены), следующее поступившее сообщение приведет к переполнению приема (overrun), и сообщение будет потеряно. Аппаратура сигнализирует о состоянии overrun установкой бита FOVR в регистре CAN_RFR. Какое сообщение потеряно, зависит от конфигурации FIFO:
• Если функция блокировки FIFO (FIFO lock) запрещена (очищен бит RFLM в регистре CAN_MCR), то последнее сохраненное сообщение в FIFO будет перезаписано новым поступившим сообщением. В этом случае последние поступившие (самые свежие) сообщения будут всегда доступны для приложения. • Если функция блокировки FIFO разрешена (установлен бит RFLM в регистре CAN_MCR), то самое свежее поступившее сообщение будет отброшено, и для программы будут всегда доступны 3 самые старые не обработанные сообщения FIFO.
Прерывания приема. Как только сообщение было сохранено в FIFO, обновятся биты FMP[1:0] и генерируется запрос прерывания, если установлен бит FMPIE в регистре разрешения прерываний CAN_IER.
Когда FIFO становится заполненным (т. е. сохранено третье сообщение), установится бит FULL в регистре CAN_RFR, и будет сгенерировано прерывание, если установлен бит FFIE в регистре разрешения прерываний CAN_IER.
При переполнении приема (overrun condition) установится бит FOVR, и будет сгенерировано прерывание, если установлен бит FOVIE в регистре разрешения прерываний CAN_IER.
[Фильтрация по идентификатору]
В протоколе CAN идентификатор сообщения не связан с адресом узла, но связан с содержимым сообщения. Следовательно, передатчик передает свое сообщение всем приемникам. Во время приема сообщения принимающий узел решает - в зависимости от значения идентификатора - нуждается программа в этом сообщении, или нет. Если сообщение нужное, то оно копируется в SRAM. Если нет, то сообщение будет отброшено без какого-либо вмешательства со стороны программы.
Чтобы удовлетворить этому требованию, контроллер bxCAN предоставляет для приложения 28 конфигурируемых и масштабируемых банков фильтра (27 .. 0). Эта аппаратная фильтрация сохраняет процессорное время CPU, которое иначе тратилось бы, если фильтрация была реализована программно. Каждый банк фильтра x состоит из двух 32-битных регистра CAN_FxR0 и CAN_FxR1.
Масштабируемая ширина (scale). Чтобы оптимизировать и адаптировать фильтрацию к требованиям приложения, каждый банк фильтра может масштабироваться независимо. В зависимости от масштаба фильтра банк фильтра предоставляет (см. рис. 342):
• Один 32-битный фильтр для бит STDID[10:0], EXTID[17:0], IDE и RTR. • Два 16-битных фильтра для бит STDID[10:0], RTR, IDE и EXTID[17:15].
Кроме того, фильтры могут быть сконфигурированы в режиме маски (mask mode) или в режиме списка идентификаторов (identifier list mode).
Mask mode. В режиме маски регистры идентификатора связаны с регистрами маски, указывающими, какие биты в идентификаторе должны совпадать (must match), а какие могут быть любыми (don’t care).
Identifier list mode. В режиме списка идентификаторов регистры маски используются как регистры идентификатора. Таким образом, вместо определения идентификатора и маски, указываются 2 идентификатора, удваивая количество одиночных идентификаторов. Все биты приходящего идентификатора должны совпадать с битами, указанными в регистрах фильтра.
Конфигурация scale и mode банка фильтра. Банки фильтра конфигурируются соответствующим регистром CAN_FMR. Для конфигурирования банка фильтра он должен быть деактивирован очисткой бита FACT в регистре CAN_FAR. Параметр scale фильтра конфигурируется соответствующим битом FSCx регистра CAN_FS1R, см. рис. 342. Режим маски или режим списка идентификаторов для соответствующих регистров Mask/Identifier конфигурируется битами FBMx в регистре CAN_FMR.
Для фильтрации группы идентификаторов сконфигурируйте регистры Mask/Identifier в режиме маски.
Для выбора одиночных идентификаторов сконфигурируйте регистры Mask/Identifier в режиме списка идентификаторов.
Фильтры, не используемые приложением, должны быть оставлены деактивированными.
Каждый фильтр в банке фильтра пронумерован (номер называется Filter Number) от 0 до максимума, в зависимости от mode и scale каждого банка фильтра.
Конфигурация фильтра показана на рис. 342.
Рис. 342. Конфигурация масштабирования (scale) банков фильтра - организация регистров.
Примечания:
x = номеру банка фильтра. ID = идентификатору. (1) Эти биты находятся в регистре CAN_FS1R. (2) Эти биты находятся в регистре CAN_FM1R.
Индекс совпадения фильтра. Как только сообщение было принято в FIFO, оно становится доступным для приложения. Обычно данные приложения копируются в ячейки SRAM. Чтобы копировать данные в правильное место, приложение должно идентифицировать данные по идентификатору. Чтобы упросить доступ к ячейкам SRAM принятых сообщений, контроллер CAN предоставляет индекс совпадения фильтра (Filter Match Index).
Этот индекс сохраняется в mailbox вместе с сообщением, в соответствии с правилами приоритета фильтра. Таким образом, каждое принятое сообщение связывает с индексом совпадения фильтра.
Индекс Filter Match может быть задействован двумя способами:
• Сравнение индекса Filter Match со списком ожидаемых значений. • Использование индекса Filter Match как индекса в массиве для доступа к месту нахождения данных.
Для не маскируемых фильтров программа больше не должна сравнивать идентификатор.
Если фильтр маскирован, то программа ограничивает сравнение только маскированными битами.
Значение индекса номера фильтра не учитывает состояние активации банков фильтра. Дополнительно используются две независимые схемы нумерации, по одной для каждого FIFO. Пример см. на рис. 343.
Рис. 343. Пример нумерации фильтров. ID означает идентификатор.
Правила приоритезации фильтра. В зависимости от комбинации фильтров может произойти ситуация, когда идентификатор пройдет через несколько фильтров. В этом случае значение выбранного совпавшего фильтра сохраняется в mailbox приема по следующим правилам приоритета:
• 32-битный фильтр имеет приоритет над 16-битным фильтром. • Для фильтров с одинаковым scale, приоритет предоставляется режиму списка идентификаторов (Identifier List mode) над режимом маски идентификаторов (Identifier Mask mode). • Для фильтров с одинаковым scale и mode, приоритет дается по номеру фильтра (чем меньше номер, тем выше приоритет).
Рис. 344. Пример механизма фильтрации. Три банка фильтра сконфигурированы в 32-битном Unidentified List mode, остальные в 32-битном Identifier Mask mode.
На рис. 344 выше показан пример принципа фильтрации bxCAN. На приеме сообщения идентификатор сначала сравнивается с фильтрами, сконфигурированными в identifier list mode. Если было совпадение, то сообщение сохранятся в связанном FIFO и индекс совпавшего фильтра сохраняется в Filter Match Index (FMI). Как показано в примере, идентификатор совпал с Identifier #2, так что в FIFO будет сохранено содержимое сообщения и FMI 2.
Если не было совпадения, пришедший идентификатор сравнивается с фильтрами, сконфигурированными в mask mode.
Если идентификатор не совпал ни с одним из идентификаторов, сконфигурированным в фильтрах, то сообщение отбрасывается аппаратно, никак не влияя на программу.
[Хранилище сообщений]
Интерфейс между программой и аппаратурой для сообщений CAN реализован через ящики (mailboxes). Mailbox содержит всю информацию, относящуюся к сообщению: идентификатор, данные, управление, статус и метку времени.
Transmit mailbox. Программа настраивает сообщение для передачи в пустом передающем mailbox. Статус передачи показывается аппаратурой в регистре CAN_TSR.
Таблица 182. Отображение ящиков передачи (TX mailbox) передачи.
Смещение для базового адреса TX mailbox (в байтах)
Имя регистра
0
CAN_TIxR
4
CAN_TDTxR
8
CAN_TDLxR
12
CAN_TDHxR
Receive mailbox. Когда было принято сообщение, оно становится доступным в выходном mailbox FIFO. Когда программа обработала сообщение (т. е. прочитала его), она должна освободить выходной mailbox FIFO с помощью бита RFOM в регистре CAN_RFR, чтобы стало доступным для чтения следующее приходящее сообщение. Индекс совпавшего фильтра сохраняется в поле MFMI регистра CAN_RDTxR. 16-битное значение метки времени (time stamp) сохраняется в поле TIME[15:0] регистра CAN_RDTxR.
Смещение для базового адреса RX mailbox (в байтах)
Имя регистра
0
CAN_RIxR
4
CAN_RDTxR
8
CAN_RDLxR
12
CAN_RDHxR
[Обработка ошибок]
Обработка ошибок (error management), как это описано в протоколе CAN, осуществляется полностью аппаратно, с использованием счетчика ошибок передачи Transmit Error Counter (значение TEC в регистре CAN_ESR) и счетчика ошибок приема Receive Error Counter (значение REC в регистре CAN_ESR), которые инкрементируются по мере появления событий ошибки. Более подробно обслуживание TEC и REC описано в стандарте CAN.
Оба счетчика TEC и REC могут быть прочитаны программой, чтобы определить стабильность сети CAN. Кроме того, аппаратура CAN предоставляет подробную информацию о текущем статусе ошибки в регистре CAN_ESR. Через регистр CAN_IER (бит ERRIE и т. п.), программа может очень гибко сконфигурировать прерывание при детектировании ошибки.
Рис. 345. Диаграмма состояний ошибки CAN.
Восстановление из Bus-Off. Состояние Bus-Off (отключение от шины) достигается, когда TEC становится больше 255, это состояние индицируется битом BOFF регистра CAN_ESR. В состоянии Bus-Off блок bxCAN больше не может передавать и принимать сообщения.
В зависимости от бита ABOM в регистре CAN_MCR, блок bxCAN будет восстанавливаться из Bus-Off (переходить в состояние error active) либо автоматически, либо по запросу программы. Однако в обоих случаях bxCAN будет ждать как минимум последовательности восстановления (recovery sequence), описанную в стандарте CAN (128 случаев появления 11 следующих друг за другом рецессивных бит, обнаруженных на CANRX).
Если установлен ABOM, то bxCAN автоматически начнет последовательность восстановления после того, как произошел вход в состояние Bus-Off. Если ABOM очищен, то программа должна инициировать последовательность восстановления путем запроса к bxCAN на вход в режим инициализации и на выход из него.
Примечание: в режиме инициализации bxCAN не мониторит сигнал CANRX, поэтому не может завершить последовательность восстановления. Для восстановления bxCAN должен быть в normal mode.
[Интервалы бит (bit timing)]
Логика тайминга бита мониторит последовательную линию шины и выполняет оцифровку сигнала с подстройкой точки выборки. Это делается синхронизацией по перепаду начального бита, и повторной синхронизацией на последующих перепадах.
Эта операция может быть объяснена простым разделением номинального времени бита на 3 сегмента следующим образом:
• Сегмент синхронизации (SYNC_SEG): во время этого интервала времени ожидается изменение бит. Величина этого сегмента фиксируется на одном кванте времени (time quantum): 1 x tq. • Сегмент бита 1 (Bit segment 1, BS1): определяет положение точки выборки уровня сигнала (sample point). Стандарт включает сюда интервалы PROP_SEG (сегмент распространения) и PHASE_SEG1 (сегмент фазы 1). Длительности этих интервалов программируются между 1 и 16 time quanta, однако они могут быть автоматически увеличены для компенсации положительного дрейфа фазы из-за разницы частот тактов различных узлов в сети. • Сегмент бита 2 (Bit segment 2, BS2): определяет положение точки передачи (transmit point). Представлен в стандарте CAN интервалом PHASE_SEG2 (сегмент фазы 2). Его длительность программируется в диапазоне от 1 до 8 time quanta, однако этот интервал может быть автоматически сокращен для компенсации отрицательных смещений фазы.
Параметр ширины скачка ресинхронизации (resynchronization Jump Width, SJW) определяет верхнюю границу величины удлинения или укорочения сегментов бита. Программируется в диапазоне от 1 до 4 time quanta.
Достоверный перепад детектируется как первый переход в интервале бита от доминантного к рецессивному уровню шины при условии, что контролер сам не передает рецессивный бит.
Если достоверный перепад был детектирован в BS1 вместо SYNC_SEG, BS1 расширяется на интервал SJW, чтобы точка выборки была задержана. Соответственно, если достоверный перепад был определен в интервале BS2 вместо SYNC_SEG, интервал BS2 укорачивается на SJW, чтобы точка передачи оказалась раньше.
В качестве защиты от ошибок программирования конфигурация Bit Timing Register (CAN_BTR) возможна только когда устройство находится в режиме Standby.
Примечание: подробное описание тайминга бит CAN и механизма ресинхронизации см. в стандарте ISO 11898.
Рис. 346. Интервалы бит.
1 BaudRate = ---------------- NominalBitTime
NominalBitTime = 1 x tq + tBS1 + tBS2
Здесь:
tBS1 = tq x (TS1[3:0] + 1), tBS2 = tq x (TS2[2:0] + 1), tq = (BRP[9:0] + 1) x tPCLK
tq обозначает Time quantum.
tPCLK = период тактов APB, BRP[9:0], TS1[3:0] и TS2[2:0] определены в регистре CAN_BTR.
Рис. 347. Фреймы CAN.
Примечания:
0 ≤ N ≤ 8 SOF = Start Of Frame (начало фрейма). ID = Identifier (идентификатор). RTR = Remote Transmission Request (запрос на передачу от удаленного сетевого узла). IDE = Identifier Extension Bit (бит расширения идентификатора). r0 = Reserved Bit (зарезервированный бит). DLC = Data Length Code (код длины данных). CRC = Cyclic Redundancy Code (контрольная сумма). Error flag: флаг ошибки, 6 доминантных бит, если на узле активная ошибка, иначе 6 рецессивных бит. Suspend transmission: приостановка передачи, применимо только к узлам с пассивной ошибкой. EOF = End of Frame (конец фрейма). ACK = Acknowledge bit (бит подтверждения). Ctrl = Control (управление).
[Прерывания bxCAN]
Для bxCAN выделено 4 вектора прерывания. Каждый источник прерывания может быть независимо разрешен или запрещен программированием регистра разрешения прерываний CAN (CAN Interrupt Enable Register, CAN_IER).
Рис. 348. Флаги событий и генерация прерываний.
• Прерывание передачи (transmit interrupt) может генерироваться от следующих событий: – Transmit mailbox 0 стал пустым, установился бит RQCP0 в регистре CAN_TSR. – Transmit mailbox 1 стал пустым, установился бит RQCP1 в регистре CAN_TSR. – Transmit mailbox 2 стал пустым, установился бит RQCP2 в регистре CAN_TSR. • Прерывание FIFO0 может генерироваться от следующих событий: – Прием нового сообщения, биты FMP0 в регистре CAN_RF0R не равны 00b. – Состояние заполненности FIFO0, установлен бит FULL0 в регистре CAN_RF0R. – Состояние переполнения FIFO0 (overrun), установлен бит FOVR0 в регистре CAN_RF0R. • Прерывание FIFO 1 может генерироваться от следующих событий: – Прием нового сообщения, биты FMP1 в регистре CAN_RF1R не равны 00b. – Состояние заполненности FIFO1, установлен бит FULL1 в регистре CAN_RF1R. – Состояние переполнения FIFO1 (overrun), установлен бит FOVR1 в регистре CAN_RF1R. • Прерывание ошибки и изменения статуса может быть сгенерировано следующими событиями: – Произошла ошибка (Error condition), подробную информацию о характере ошибки можно получить в регистре статуса ошибки (CAN Error Status register, CAN_ESR). – Пробуждение (Wakeup condition), на сигнале приема CAN Rx обнаружено начало фрейма (SOF). – Вход в режим сна (Sleep mode).
[Регистры CAN]
К регистрам периферийного устройства CAN нужно обращаться как к словам (32-битный доступ). Смещение адреса указано относительно базового адреса CAN1_BASE или CAN2_BASE (можно узнать в файле stm32f407xx.h). Для адресного пространства CAN1 зарезервированы адреса 0x40006400 .. 0x400067FF (базовый адрес 0x40006400). Для адресного пространства CAN2 зарезервированы адреса 0x40006800 .. 0x40006BFF (базовый адрес 0x40006800). Регистры со смещениями от 0x200 до 0x31C имеются только у CAN1.
В описании функций регистров используются следующие сокращения:
read/write (rw) Программа может читать и записывать эти биты.
read-only (r) Программа может только читать эти биты.
write-only (w) Программа может только записывать в этот бит. Чтение бита вернет значение сброса.
read/clear (rc_w1) Программа может прочитать бит, а также сбросить его путем записью 1. Запись 0 не дает никакого эффекта.
read/clear (rc_w0) Программа может прочитать бит, а также сбросить его путем записью 0. Запись 1 не дает никакого эффекта.
read/clear by read (rc_r) Программа может прочитать этот бит. Чтение этого бита автоматически сбросит его в 0. Запись 0 в бит не дает никакого эффекта.
read/set (rs) Программа может прочитать, а также установить этот бит. Запись 0 в бит не дает никакого эффекта.
read-only write trigger (rt_w) Программа может прочитать этот бит. Запись 0 или 1 вызовет появление события (триггер), но не окажет никакого влияния на значение бита.
toggle (t) Программа может только переключить этот бит записью 1. Запись 0 не дает никакого эффекта.
Reserved (Res.) Зарезервированный бит, его значение должно сохраняться на значении сброса.
Защита доступа к регистрам. Ошибочный доступ к определенным конфигурационным регистрам может привести к тому, что аппаратура временно нарушит работу всей сети CAN. Таким образом, регистр CAN_BTR может быть модифицирован программой только когда аппаратура CAN находится в режиме инициализации (initialization mode).
Хотя передача некорректных данных не приведет к проблемам на сетевом уровне CAN, это может сильно помешать работе приложения. Передающий mailbox может быть изменен программой только когда mailbox в состоянии empty, см. рис. 340.
Значения фильтра могут быть изменены либо деактивацией банков фильтра, либо установкой бита FINIT. Кроме того, модификация конфигурации фильтра (scale, mode и назначение FIFO) в регистрах CAN_FMxR, CAN_FSxR и CAN_FFAR может быть только когда установлен режим инициализации фильтра (filter initialization mode, FINIT=1) в регистре CAN_FMR.
Смещение адреса: 0x00 Значение после сброса: 0x00010002
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
DBF rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
RESET rs
зарезервировано
TTCM rw
ABOM rw
AWUM rw
NART rw
RFLM rw
TXFP rw
SLEEP rw
INRQ rw
Биты 31:17 зарезервированы, и должны находиться в состоянии сброса (все нули).
DBF (бит 16): DeBug Freeze, остановка CAN во время отладки.
0: во время отладки CAN работает. 1: прием/передача CAN во время отладки замораживается. Стеки Reception FIFO все еще могут нормально управляться и к ним может быть осуществлен доступ.
RESET (бит 15): главный программный сброс (bxCAN software master reset).
0: нормальное функционирование. 1: принудительный сброс bxCAN, после сброса активируется Sleep mode (биты FMP и регистр CAN_MCR инициализируются своими значениями после сброса). Этот бит автоматически сбросится в 0.
Биты 14:8 зарезервированы, и должны находиться в состоянии сброса (все нули).
TTCM (бит 7): Time Triggered Communication Mode, режим обмена, срабатывающий по времени.
0: режим Time Triggered Communication запрещен. 1: режим Time Triggered Communication разрешен.
ABOM (бит 6): Automatic Bus-Off Management, автоматическое управление состоянием отключения от шины. Этот бит управляет поведением аппаратуры CAN для выхода из состояния Bus-Off.
0: выход из Bus-Off осуществляется по запросу программы, как только произойдет 128 случаев появления 11 рецессивных бит, и программа сначала должна установить и очистить бит INRQ регистра CAN_MCR. 1: состояние Bus-Off будет оставлено автоматически под управлением аппаратуры, как только будет обнаружено 128 случаев появления 11 рецессивных бит.
AWUM (бит 5): Automatic WakeUp Mode, режим автоматического пробуждения. Этот бит управляет поведением аппаратуры CAN на приеме сообщения во время Sleep mode.
0: из режима сна произойдет выход по запросу программы путем очистки бита SLEEP регистра CAN_MCR. 1: из режима сна выход будет произведен автоматически, под управлением аппаратуры, когда будет детектировано сообщение CAN. Бит SLEEP регистра CAN_MCR и бит SLAK регистра CAN_MSR очистятся аппаратно.
NART (бит 4): No Automatic ReTransmission, без автоматической повторной передачи.
0: аппаратура CAN будет автоматически запускать повтор передачи, пока сообщение не будет успешно передано в соответствии со стандартом CAN. 1: сообщение будет отправлено только однократно, независимо от результата передачи (успешно или нет из-за ошибки или потери арбитража).
0: Receive FIFO не блокируется при переполнении (overrun). Как только приемный FIFO заполнится, следующее поступившее сообщение перезапишет предыдущее. 1: Receive FIFO блокируется на перезапись при переполнении. Как только приемный FIFO заполнится, следующее пришедшее сообщение будет отброшено и соответственно потеряно.
TXFP (бит 2): Transmit FIFO Priority, приоритет FIFO передачи. Этот бит управляет порядком передачи сообщений, когда одновременно ожидают передачи несколько mailbox.
0: приоритет на передачу берется по идентификатору сообщения (чем меньше идентификатор, тем приоритет выше). 1: приоритет на передачу берется по порядку запроса (хронологически: чем раньше mailbox был поставлен на ожидание передачи, тем раньше произойдет его передача).
SLEEP (бит 1): запрос на вход режим сна (Sleep Mode). Этот бит устанавливается программой, чтобы запросить у аппаратуры CAN её вход в Sleep Mode. В режим сна произойдет вход, как только будет завершена текущая активность CAN (передача или прием фрейма CAN). Этот бит очищается программой для выхода из режима сна. Этот бит очищается аппаратно, когда установлен бит AWUM и детектирован бит SOF в сигнале CAN Rx. Этот бит установится после сброса -аппаратура CAN изначально находится в Sleep mode.
INRQ (бит 0): INitialization ReQuest. Программа очищает этот бит для переключения в нормальный рабочий режим. Как только будет обнаружено 11 следующих друг за другом рецессивных бит на сигнале RX, аппаратура CAN синхронизирована и готова к передаче и приема. Аппаратура сигнализирует об этом событии очисткой бита INAK в регистре CAN_MSR.
Программа установит этот бит для запроса аппаратуре CAN войти в режим инициализации (initialization mode). Как только программа установит бит INRQ, аппаратура CAN подождет завершения текущей активности CAN (передача или прием) перед входом в initialization mode. Аппаратура сигнализирует об этом событии установкой бита INAK в регистре CAN_MSR.
Смещение адреса: 0x04 Значение после сброса: 0x00000C02
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
зарезервировано
RX r
SAMP r
RXM r
TXM r
зарезервировано
SLAKI rc_w1
WKUI rc_w1
ERRI rc_w1
SLAK r
INAK r
Биты 31:12 зарезервированы, и должны находиться в состоянии сброса (все нули).
RX (бит 11): Сигнал приема CAN Rx. Мониторится актуальное значение вывода CAN_RX (как на обычной ножке GPIO).
SAMP (бит 10): последняя точка выборки (SAMple Point). Значение RX на последней точке выборки (текущее значение бита).
RXM (бит 9): Receive mode, режим приема. Аппаратура CAN сейчас работает как приемник.
TXM (бит 8): Transmit mode, режим передачи. Аппаратура CAN сейчас работает как передатчик.
Биты 7:5 зарезервированы, и должны находиться в состоянии сброса (все нули).
SLAKI (бит 4): SLeep AcKnowledge Interrupt, подтверждение прерывания входа в режим сна. Когда SLKIE=1, этот бит установится аппаратно для сигнализации, что bxCAN вошел в Sleep Mode. Когда бит SLAKI установлен, этот бит генерирует прерывание изменения состояния (status change interrupt), если установлен бит SLKIE в регистре CAN_IER. Этот бит очищается программно или аппаратно, когда очищен бит SLAK.
Примечание: когда SLKIE=0, опрос SLAKI невозможен. В этом случае можно опрашивать бит SLAK.
WKUI (бит 3): WaKeUP Interrupt, прерывание пробуждения. Этот бит установится аппаратно для сигнализации, когда был определен бит начала фрейма SOF и аппаратура CAN находилась в Sleep mode. Установка этого бита генерирует прерывание изменения статуса, если установлен бит WKUIE в регистре CAN_IER. Этот бит очищается программой.
ERRI (бит 2): ERRor Interrupt, прерывание ошибки. Этот бит установится аппаратно, когда был установлен CAN_ESR на детектирование ошибки, и разрешено соответствующее прерывание CAN_IER. Установка этого бита генерирует прерывание изменения статуса, если установлен бит ERRIE в регистре CAN_IER.
Бит ERRI очищается программой.
SLAK (бит 1): SLeep AcKnowledge, подтверждение входа в режим сна. Этот бит установится аппаратно, показывая тем самым программе, что аппаратура CAN находится теперь в Sleep mode. Этот бит подтверждает запрос на Sleep mode от программы (установка бита SLEEP в регистре CAN_MCR).
Бит SLAK очистится аппаратно, когда аппаратура CAN выйдет из Sleep mode (чтобы засинхронизироваться на шине CAN). Для синхронизации аппаратура отслеживает 11 следующих друг за другом рецессивных бита на сигнале CAN RX.
Примечание: процесс выхода из Sleep срабатывает, когда очищается бит SLEEP в регистре CAN_MCR. См. описание бита AWUM регистра CAN_MCR для получения подробной информации по очистке бита SLEEP.
INAK (бит 0): INitialization AcKnowledge, подтверждение режима инициализации. Этот бит установится аппаратно, показывая тем самым программе, что аппаратура CAN находится теперь в initialization mode. Этот бит подтверждает запрос на инициализацию от программы (установка бита INRQ в регистре CAN_MCR).
Этот бит очистится аппаратно, когда аппаратура CAN выйдет из режима инициализации (чтобы засинхронизироваться на шине CAN). Для синхронизации аппаратура отслеживает 11 следующих друг за другом рецессивных бита на сигнале CAN RX.
Смещение адреса: 0x08 Значение после сброса: 0x1С000000
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
LOW2 r
LOW1 r
LOW0 r
TME2 r
TME1 r
TME0 r
CODE[1:0] r
ABRQ2 rs
зарезервировано
TERR2 rc_w1
ALST2 rc_w1
TXOK2 rc_w1
RQCP2 rc_w1
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
ABRQ1 rs
зарезервировано
TERR1 rc_w1
ALST1 rc_w1
TXOK1 rc_w1
RQCP1 rc_w1
ABRQ0 rs
зарезервировано
TERR0 rc_w1
ALST0 rc_w1
TXOK0 rc_w1
RQCP0 rc_w1
LOW2 (бит 31): LOWest priority flag for mailbox 2, самый низкий приоритет для ящика 2. Этот бит установится аппаратурой, когда больше одного mailbox ожидает передачи, и у mailbox 2 был самый низкий приоритет.
LOW1 (бит 30): LOWest priority flag for mailbox 1, самый низкий приоритет для ящика 1. Этот бит установится аппаратурой, когда больше одного mailbox ожидает передачи, и у mailbox 1 был самый низкий приоритет.
LOW0 (бит 29): LOWest priority flag for mailbox 0, самый низкий приоритет для ящика 0. Этот бит установится аппаратурой, когда больше одного mailbox ожидает передачи, и у mailbox 0 был самый низкий приоритет.
Примечание: биты LOW[2:0] установятся в 0, когда только один mailbox находится в ожидании (pending) передачи.
TME2 (бит 28): Transmit Mailbox 2 Empty, передающий ящик 2 пуст. Этот бит установится аппаратурой, когда нет ожидающего запроса на передачу для mailbox 2.
TME1 (бит 27): Transmit Mailbox 1 Empty, передающий ящик 1 пуст. Этот бит установится аппаратурой, когда нет ожидающего запроса на передачу для mailbox 1.
TME0 (бит 26): Transmit Mailbox 0 Empty, передающий ящик 0 пуст. Этот бит установится аппаратурой, когда нет ожидающего запроса на передачу для mailbox 0.
CODE[1:0] (биты 25:24): Mailbox code, код ящика. В случае, когда как минимум один передающий mailbox свободен, значение кода равно номеру следующего свободного ящика передачи.
В случае, когда все передающие ящики заняты ожиданием передачи, значение кода равно номеру передающего mailbox с самым низким приоритетом.
ABRQ2 (бит 23): ABort ReQuest for mailbox 2, запрос на обрыв передачи ящика 2. Устанавливается программой, чтобы оборвать запрос передачи для соответствующего mailbox. Очищается аппаратно, когда mailbox становится пустым.
Установка этого бита не дает никакого эффекта, когда mailbox не ожидает передачи своего сообщения.
Биты 22:20 зарезервированы, и должны находиться в состоянии сброса (все нули).
TERR2 (бит 19): Transmission ERRor of mailbox 2, ошибка передачи ящика 2. Этот бит установится, когда предыдущая передача потерпела неудачу из-за ошибки.
ALST2 (бит 18): Arbitration lost for mailbox 2, потеря арбитража на ящике 2. Этот бит установится, когда предыдущая передача потерпела неудачу из-за потери арбитража.
TXOK2 (бит 17): Transmission OK of mailbox 2, успешная передача на ящике 2. Аппаратура обновляет этот бит при каждой попытке передачи.
Этот бит установится аппаратно, когда запрос на передачу ящика 2 был успешно выполнен. См. рис. 340.
RQCP2 (бит 16): Request completed mailbox 2, завершен запрос ящика 2. Установится аппаратурой, когда был выполнен последний запрос (transmit или abort).
Очищается программой путем записи лог. 1, или аппаратурой при запросе на передачу (установка бита TXRQ2 в регистре CAN_TMID2R). Очистка этого бита очистит все биты статуса (TXOK2, ALST2 и TERR2) для Mailbox 2.
ABRQ1 (бит 15): ABort ReQuest for mailbox 1, запрос на обрыв передачи ящика 1. Устанавливается программой, чтобы оборвать запрос передачи для соответствующего mailbox. Очищается аппаратно, когда mailbox становится пустым.
Установка этого бита не дает никакого эффекта, когда mailbox не ожидает передачи своего сообщения.
Биты 14:12 зарезервированы, и должны находиться в состоянии сброса (все нули).
TERR1 (бит 11): Transmission ERRor of mailbox 1, ошибка передачи ящика 1. Этот бит установится, когда предыдущая передача потерпела неудачу из-за ошибки.
ALST1 (бит 10): Arbitration lost for mailbox 1, потеря арбитража на ящике 1. Этот бит установится, когда предыдущая передача потерпела неудачу из-за потери арбитража.
TXOK1 (бит 9): Transmission OK of mailbox 1, успешная передача на ящике 1. Аппаратура обновляет этот бит при каждой попытке передачи.
Этот бит установится аппаратно, когда запрос на передачу ящика 1 был успешно выполнен. См. рис. 340.
RQCP1 (бит 8): Request completed mailbox 1, завершен запрос ящика 1. Установится аппаратурой, когда был выполнен последний запрос (transmit или abort).
Очищается программой путем записи лог. 1, или аппаратурой при запросе на передачу (установка бита TXRQ1 в регистре CAN_TMID1R).
Очистка этого бита очистит все биты статуса (TXOK1, ALST1 и TERR1) для Mailbox 1.
ABRQ0 (бит 7): ABort ReQuest for mailbox 0, запрос на обрыв передачи ящика 0. Устанавливается программой, чтобы оборвать запрос передачи для соответствующего mailbox. Очищается аппаратно, когда mailbox становится пустым.
Установка этого бита не дает никакого эффекта, когда mailbox не ожидает передачи своего сообщения.
Биты 6:4 зарезервированы, и должны находиться в состоянии сброса (все нули).
TERR0 (бит 3): Transmission ERRor of mailbox 0, ошибка передачи ящика 0. Этот бит установится, когда предыдущая передача потерпела неудачу из-за ошибки.
ALST0 (бит 2): Arbitration lost for mailbox 0, потеря арбитража на ящике 0. Этот бит установится, когда предыдущая передача потерпела неудачу из-за потери арбитража.
TXOK0 (бит 1): Transmission OK of mailbox 0, успешная передача на ящике 0. Аппаратура обновляет этот бит при каждой попытке передачи.
Этот бит установится аппаратно, когда запрос на передачу ящика 0 был успешно выполнен. См. рис. 340.
RQCP0 (бит 0): Request completed mailbox 0, завершен запрос ящика 0. Установится аппаратурой, когда был выполнен последний запрос (transmit или abort).
Очищается программой путем записи лог. 1, или аппаратурой при запросе на передачу (установка бита TXRQ0 в регистре CAN_TMID0R). Очистка этого бита очистит все биты статуса (TXOK0, ALST0 и TERR0) для Mailbox 0.
Смещение адреса: 0x0C Значение после сброса: 0x00000000
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
зарезервировано
RFOM0 rs
FOVR0 rc_w1
FULL0 rc_w1
зарез.
FMP0[1:0] r
Биты 31:6 зарезервированы, и должны находиться в состоянии сброса (все нули).
RFOM0 (бит 5): Release FIFO 0 output mailbox, освободился выходной ящик стека FIFO0. Устанавливается программой, чтобы освободить выходной mailbox FIFO. Выходной mailbox может быть освобожден только когда как минимум одно сообщение FIFO ожидает (pending) обработки. Установка этого бита не дает никакого эффекта, когда FIFO пуст. Если как минимум 2 сообщения FIFO ожидают обработки, программа должна освободить выходной mailbox, чтобы получить доступ к следующему сообщению.
Очищается аппаратно, когда выходной mailbox был освобожден.
FOVR0 (бит 4): FIFO 0 OVerRun, переполнение FIFO0 приема. Этот бит устанавливается аппаратно, когда новое сообщение было принято и прошло фильтр, и FIFO0 при этом был заполнен.
Этот бит очищается программно.
FULL0 (бит 3): FIFO 0 full, FIFO0 приема заполнен. Установится аппаратно, когда в FIFO0 сохранено 3 сообщения.
Этот бит очищается программно.
Бит 2 зарезервирован, и должен оставаться в состоянии сброса (0).
FMP0[1:0] (биты 1:0): FIFO 0 Message Pending. Эти биты показывают, сколько сообщений ожидают обработки в FIFO приема. FMP увеличивается каждый раз, когда аппаратура сохраняет новое сообщение в FIFO. FMP уменьшается каждый раз, когда программа освобождает выходной mailbox установкой бита RFOM0.
Смещение адреса: 0x10 Значение после сброса: 0x00000000
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
зарезервировано
RFOM1 rs
FOVR1 rc_w1
FULL1 rc_w1
зарез.
FMP1[1:0] r
Биты 31:6 зарезервированы, и должны находиться в состоянии сброса (все нули).
RFOM1 (бит 5): Release FIFO 1 output mailbox, освободился выходной ящик стека FIFO1. Устанавливается программой, чтобы освободить выходной mailbox FIFO. Выходной mailbox может быть освобожден только когда как минимум одно сообщение FIFO ожидает (pending) обработки. Установка этого бита не дает никакого эффекта, когда FIFO пуст. Если как минимум 2 сообщения FIFO ожидают обработки, программа должна освободить выходной mailbox, чтобы получить доступ к следующему сообщению.
Очищается аппаратно, когда выходной mailbox был освобожден.
FOVR1 (бит 4): FIFO 1 OVerRun, переполнение FIFO1 приема. Этот бит устанавливается аппаратно, когда новое сообщение было принято и прошло фильтр, и FIFO1 при этом был заполнен.
Этот бит очищается программно.
FULL1 (бит 3): FIFO 1 full, FIFO1 приема заполнен. Установится аппаратно, когда в FIFO1 сохранено 3 сообщения.
Этот бит очищается программно.
Бит 2 зарезервирован, и должен оставаться в состоянии сброса (0).
FMP1[1:0] (биты 1:0): FIFO 1 Message Pending. Эти биты показывают, сколько сообщений ожидают обработки в FIFO приема. FMP увеличивается каждый раз, когда аппаратура сохраняет новое сообщение в FIFO. FMP уменьшается каждый раз, когда программа освобождает выходной mailbox установкой бита RFOM1.
Смещение адреса: 0x14 Значение после сброса: 0x00000000
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
SLKIE rw
WKUIE rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
ERRIE rw
зарезервировано
LECIE rw
BOFIE rw
EPVIE rw
EWGIE rw
зарез.
FOVIE1 rw
FFIE1 rw
FMPIE1 rw
FOVIE0 rw
FFIE0 rw
FMPIE0 rw
TMEIE rw
Биты 31:18 зарезервированы, и должны находиться в состоянии сброса (все нули).
SLKIE (бит 17): Sleep interrupt enable, разрешение прерывания при входе bxCAN в режим сна.
0: нет прерывания, когда установится бит SLAKI. 1: произойдет прерывание, когда установится бит SLAKI.
WKUIE (бит 16): WaKeUp Interrupt Enable, разрешение прерывания пробуждения.
0: нет прерывания, когда установится бит WKUI. 1: произойдет прерывание, когда установится бит WKUI.
ERRIE (бит 15): ERRor Interrupt Enable, разрешение прерывания ошибки.
0: не будет сгенерировано прерывание, когда событие ошибки ожидает обработки в регистре CAN_ESR. 1: будет сгенерировано прерывание, когда событие ошибки ожидает обработки в регистре CAN_ESR.
Биты 14:12 зарезервированы, и должны находиться в состоянии сброса (все нули).
LECIE (бит 11): Last Error Code Interrupt Enable, разрешение прерывания от последнего кода ошибки.
0: бит ERRI не будет установлен, когда в LEC[2:0] аппаратура установит код детектированной ошибки. 1: бит ERRI будет установлен, когда в LEC[2:0] аппаратура установит код детектированной ошибки.
BOFIE (бит 10): Bus-OFf Interrupt Enable, разрешение прерывания, когда появляется состояние отключения от шины.
0: бит ERRI не установится, когда установился BOFF. 1: бит ERRI установится, когда установился BOFF.
EPVIE (бит 9): Error PassiVe Interrupt Enable, разрешение прерывания, когда появляется состояние пассивной ошибки.
0: бит ERRI не установится, когда установился бит EPVF. 1: бит ERRI установится, когда установился бит EPVF.
0: бит ERRI не установится, когда установился бит EWGF. 1: бит ERRI установится, когда установился бит EWGF.
Бит 7 зарезервирован, и должен оставаться в состоянии сброса (0).
FOVIE1 (бит 6): FIFO1 OVerrun Interrupt Enable, разрешение прерывания при переполнении FIFO1.
0: нет прерывания, когда установлен FOVR1. 1: сгенерируется прерывание, когда установлен FOVR1.
FFIE1 (бит 5): FIFO1 Full Interrupt Enable, разрешение прерывания при заполнении стека приема FIFO1.
0: без прерывания, когда установится бит FULL1. 1: сгенерируется прерывание, когда установлен FULL1.
FMPIE1 (бит 4): FIFO1 Message Pending Interrupt Enable, разрешение прерывания, когда в стеке приема FIFO1 как минимум одно сообщение ожидает обработки.
0: не будет сгенерировано прерывание, когда состояние бит FMP1[1:0] изменится на ненулевое (станет не 00b). 1: сгенерируется прерывание, когда состояние бит FMP1[1:0] не 00b.
FOVIE0 (бит 3): FIFO0 OVerrun Interrupt Enable, разрешение прерывания при переполнении FIFO0.
0: нет прерывания, когда установлен FOVR0. 1: сгенерируется прерывание, когда установлен FOVR0.
FFIE0 (бит 2): FIFO0 Full Interrupt Enable, разрешение прерывания при заполнении стека приема FIFO0.
0: без прерывания, когда установится бит FULL0. 1: сгенерируется прерывание, когда установлен FULL0.
FMPIE0 (бит 1): FIFO0 Message Pending Interrupt Enable, разрешение прерывания, когда в стеке приема FIFO0 как минимум одно сообщение ожидает обработки.
0: не будет сгенерировано прерывание, когда состояние бит FMP0[1:0] изменится на ненулевое (станет не 00b). 1: сгенерируется прерывание, когда состояние бит FMP0[1:0] не 00b.
TMEIE (бит 0): Transmit Mailbox Empty Interrupt Enable, разрешение прерывания при опустошении передающего mailbox.
0: не будет сгенерировано прерывание, когда установится бит RQCPx. 1: сгенерируется прерывание, когда установится бит RQCPx.
Смещение адреса: 0x18 Значение после сброса: 0x00000000
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
REC[7:0] r
TEC[7:0] r
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
зарезервировано
LEC[2:0] rw
зарез.
BOFF r
EPVF r
EWGF r
REC[7:0] (биты 31:24): Receive Error Counter, счетчик ошибок приема. Составная часть реализации механизма обработки отказов на шине (fault confinement mechanism) протокола CAN. В случае ошибки приема этот счетчик увеличивается на 1 или на 8, в зависимости от события ошибки, как это определено стандартом CAN. После каждого успешного приема этот счетчик декрементируется на 1, или сбрасывается в 120, если его значение было выше 128. Когда значение счетчика превысит 127, контроллер CAN войдет в состояние пассивной ошибки (error passive state).
TEC[7:0] (биты 23:16): младший байт 9-битного счетчика ошибок передачи (Transmit Error Counter). Составная часть реализации механизма обработки отказов на шине (fault confinement mechanism) протокола CAN.
Биты 15:7 зарезервированы, и должны находиться в состоянии сброса (все нули).
LEC[2:0] (биты 6:4): Last Error Code, код последней ошибки. Это поле устанавливается аппаратурой, и хранит код, соответствующий последней обнаруженной на шине CAN ошибки. Если сообщение успешно прошло транзакцию (приема или передачи) без ошибки, то это поле сбросится в 0.
Биты LEC[2:0] могут быть установлены в 0b111 программой. Они обновляются аппаратурой для индикации текущего статуса обмена по шине CAN.
000: No Error (нет ошибки). 001: Stuff Error (ошибка бит-стаффинга, т. е. вставки дополнительных бит для обеспечения перепадов синхронизации). 010: Form Error (ошибка формы сигнала). 011: Acknowledgment Error (ошибка подтверждения). 100: Bit recessive Error (ошибка рецессивного бита). 101: Bit dominant Error (ошибка доминантного бита). 110: CRC Error (ошибка контрольной суммы). 111: установлено из программы MCU.
Бит 3 зарезервирован, и должен оставаться в состоянии сброса (0).
BOFF (бит 2): флаг Bus-OFF. Этот бит установится аппаратурой, когда она входит в состояние отключения от шины (bus-off). Состояние bus-off происходит из-за переполнения счетчика ошибок TEC, когда он станет больше 255. Подробнее см. раздел "Обработка ошибок".
EPVF (бит 1): Error PassiVe Flag, флаг пассивной ошибки. Этот бит установится аппаратурой, когда был достигнут порог пассивной ошибки (Receive Error Counter или Transmit Error Counter > 127).
EWGF (бит 0): Error WarninG Flag, флаг предупреждения об ошибках. Этот бит установится аппаратурой, когда был достигнут порог предупреждения о большом количестве ошибок (Receive Error Counter или Transmit Error Counter >= 96).
Смещение адреса: 0x1C Значение после сброса: 0x01230000
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
SILM rw
LBKM rw
зарезервировано
SJW[1:0] rw
зарез.
TS2[2:0] rw
TS1[3:0] rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
зарезервировано
BRP[9:0] rw
К этому регистру программа может получить доступ только тогда, когда аппаратура CAN находится в initialization mode.
SILM (бит 31): SILent Mode (работа CAN в режиме отладки).
0: нормальное функционирование. 1: "тихий" режим (Silent Mode).
LBKM (бит 30): Loop BacK Mode (отладочный режим).
0: режим зацикливания данных с выхода на вход (Loop Back Mode) запрещен. 1: режим Loop Back Mode разрешен.
Биты 29:26 зарезервированы, и должны находиться в состоянии сброса (все нули).
SJW[1:0] (биты 25:24): ширина скачка ресинхронизации (reSynchronization Jump Width). Эти биты определяют максимальное количество квантов времени (time quanta), на которое аппаратуре CAN позволено удлинить или укоротить специальные интервалы шины для выполнения ресинхронизации. Интервал скачка tRJW, на который удлиняется или укорачивается время:
tRJW = tq x (SJW[1:0] + 1)
Бит 23 зарезервирован, и должен оставаться в состоянии сброса (0).
TS2[2:0] (биты 22:20): Time Segment 2. Эти биты определяют длительность сегмента времени tBS2 в квантах (time quanta).
tBS2 = tq x (TS2[2:0] + 1)
TS1[3:0] (биты 19:16): Time segment 1. Эти биты определяют длительность сегмента времени tBS1 в квантах (time quanta).
tBS1 = tq x (TS1[3:0] + 1)
Для дополнительной информации по таймингу бит шины см. раздел "Интервалы бит (bit timing)".
Биты 15:10 зарезервированы, и должны находиться в состоянии сброса (все нули).
BRP[9:0] (биты 9:0): Baud Rate Prescaler, прескалер скорости CAN. Эти биты определяют длительность битов в квантах времени (time quanta).
tq = (BRP[9:0]+1) x tPCLK
[Регистры CAN mailbox]
В этом разделе описываются регистры ящиков сообщений передачи и приема (mailbox, подробнее см. раздел "Хранилище сообщений").
У ящиков передачи и приема одни и те же регистры, кроме:
• Поля FMI в регистре CAN_RDTxR. • Приемный mailbox всегда защищен от записи. • Передающий mailbox можно записывать только когда он пуст, т. е. когда установлен соответствующий бит TME в регистре CAN_TSR.
Есть 3 передающих ящика (TX Mailbox) и 2 приемных ящика (RX Mailbox), как показано на рис. 349. Каждый RX Mailbox позволяет получить доступ к FIFO глубиной в 3 уровня (стек глубиной в 3 сохраненных сообщения), причем доступ в FIFO предоставляется к самому старому принятому сообщению. Каждый mailbox состоит из 4 регистров.
Смещения адреса: 0x180, 0x190, 0x1A0 Значение после сброса: 0xXXXXXXXX (кроме бита 0, TXRQ = 0).
Все TX-регистры защищены от записи, когда mailbox ожидает передачи (сброшен TMEx). Этот регистр также реализует управляющий запрос передачи TX (бит 0) - его значение после сброса 0.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
STID[10:0]/EXID[28:18] rw
EXID[17:13] rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
EXID[12:0] rw
IDE rw
RTR rw
TXRQ rw
STID[10:0]/EXID[28:18] (биты 31:21): стандартный или расширенный идентификатор. Это поле содержит стандартный идентификатор, или старшие биты расширенного идентификатора (в зависимости от значения бита IDE).
RTR (бит 1): Remote Transmission Request, запрос на передачу для дальнего узла сети.
0: фрейм данных (Data Frame), обычный фрейм. 1: фрейм Remote.
TXRQ (бит 0): Transmit mailbox request, запрос для ящика на передачу. Бит устанавливается программой для запроса передачи сообщения в соответствующем ящике. Очищается аппаратно, когда этот ящик становится пустым.
Смещения адреса: 0x184, 0x194, 0x1A4 Значение после сброса: 0xXXXXXXXX
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
TIME[15:0] rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
зарезервировано
TGT rw
зарезервировано
DLC[3:0] rw
TIME[15:0] (биты 31:16): метка времени сообщения. Это поле содержит значение 16-битного таймера, захваченного в момент передачи начального бита фрейма (SOF).
Биты 15:9 зарезервированы, и должны находиться в состоянии сброса.
TGT (бит 8): Transmit Global Time, передача глобального времени. Этот бит активен только когда аппаратура находится в режиме Time Trigger Communication, установлен бит TTCM в регистре CAN_MCR.
0: метка времени TIME[15:0] не отправляется. 1: метка времени TIME[15:0] отправляется в последних двух байтах 8-байтного сообщения: TIME[7:0] в байте данных 7, и TIME[15:8] в байте данных 6, с заменой данных, которые были записаны в регистр CAN_TDHxR[31:16] (DATA6[7:0] и DATA7[7:0]). DLC должен быть запрограммирован в значение 8, чтобы эти 2 байта были переданы по шине CAN.
Биты 7:4 зарезервированы, и должны находиться в состоянии сброса.
DLC[3:0] (биты 3:0): Data Length Code, код длины данных сообщения. Это поле определяет количество байт полезной нагрузки фрейма данных или фрейма запроса передачи от удаленного узла (remote frame request). Сообщение может содержать от 0 до 8 байт данных, в зависимости от значения в поле DLC.
Смещения адреса: 0x18C, 0x19C, 0x1AC Значение после сброса: 0xXXXXXXXX
Все биты этого регистра защищены от записи, когда ящик занят еще не переданным сообщением (mailbox not empty state).
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
DATA7[7:0] rw
DATA6[7:0] rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
DATA5[7:0] rw
DATA4[7:0] rw
DATA7[7:0] (биты 31:24): байт данных 7 сообщения.
Если в этом ящике установлен бит TGT, и активен режим TTCM (управление передачей по времени), то байты DATA7 и DATA6 будут заменены значением метки времени TIME.
DATA6[7:0] (биты 23:16): байт данных 6 сообщения. DATA5[7:0] (биты 15:8): байт данных 5 сообщения. DATA4[7:0] (биты 7:0): байт данных 4 сообщения.
Смещения адреса: 0x1B0, 0x1C0 Значение после сброса: 0xXXXXXXXX
Все RX-регистры защищены от записи.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
STID[10:0]/EXID[28:18] r
EXID[17:13] r
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
EXID[12:0] r
IDE r
RTR r
зарез.
Биты 31:17 зарезервированы, и должны находиться в состоянии сброса (все нули).
STID[10:0]/EXID[28:18] (биты 31:21): стандартный или расширенный идентификатор. Это поле содержит стандартный идентификатор, или старшие биты расширенного идентификатора (в зависимости от значения бита IDE).
Смещения адреса: 0x1B4, 0x1C4 Значение после сброса: 0xXXXXXXXX
Все RX-регистры защищены от записи.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
TIME[15:0] r
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
FMI[7:0] r
зарезервировано
DLC[3:0] r
TIME[15:0] (биты 31:16): метка времени сообщения. Это поле содержит значение 16-битного таймера, захваченное при детектировании SOF (начало фрейма).
FMI[7:0] (биты 15:8): Filter Match Index, индекс совпавшего фильтра. Этот регистр содержит индекс фильтра сообщения, который прошло сообщение в этом ящике. Более подробно про фильтрацию сообщений см. раздел "Фильтрация по идентификатору".
Биты 7:4 зарезервированы, и должны находиться в состоянии сброса.
DLC[3:0] (биты 3:0): Data Length Code, код длины данных сообщения. В этом поле содержится количество байт данных фрейма сообщения (от 0 до 8). В случае remote frame request в этом поле находится значение 0.
Смещение адреса: 0x200 Значение после сброса: 0x2A1C0E01
Все биты этого регистра устанавливаются и сбрасываются программой.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
зарезервировано
CAN2SB[5:0] rw
зарезервировано
FINIT rw
Биты 31:14 зарезервированы, и должны находиться в состоянии сброса.
CAN2SB[5:0] (биты 13:8): CAN2 Start Bank. Эти биты устанавливаются и очищаются программой. Они определяют начальный банк для интерфейса CAN2 (Slave) в диапазоне от 0 до 27.
Примечание: когда CAN2SB[5:0] = 28d, могут быть использованы все фильтры для CAN1. Когда CAN2SB[5:0] = 0, то для CAN1 не назначено ни одного фильтра.
Биты 7:1 зарезервированы, и должны находиться в состоянии сброса.
FINIT (бит 0): Filter init mode, режим инициализации банков фильтра.
0: режим активных банков фильтра (фильтры работают). 1: режим инициализации для фильтров.
Смещение адреса: 0x204 Значение после сброса: 0x00000000
Этот регистр может быть записан только когда установлен режим инициализации фильтров (FINIT=1 в регистре CAN_FMR).
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
FBM27 rw
FBM26 rw
FBM25 rw
FBM24 rw
FBM23 rw
FBM22 rw
FBM21 rw
FBM20 rw
FBM19 rw
FBM18 rw
FBM17 rw
FBM16 rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
FBM15 rw
FBM14 rw
FBM13 rw
FBM12 rw
FBM11 rw
FBM10 rw
FBM9 rw
FBM8 rw
FBM7 rw
FBM6 rw
FBM5 rw
FBM4 rw
FBM3 rw
FBM2 rw
FBM1 rw
FBM0 rw
Биты 31:28 зарезервированы, и должны находиться в состоянии сброса (все нули).
FBMx (биты 27:0): Filter Bank Mode, определяет режим регистров фильтра x.
0: два 32-битных регистра банка x фильтра работают в режиме маски идентификатора. 1: два 32-битных регистра банка x фильтра работают в режиме списка идентификаторов.
Смещение адреса: 0x21C Значение после сброса: 0x00000000
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
FACT27 rw
FACT26 rw
FACT25 rw
FACT24 rw
FACT23 rw
FACT22 rw
FACT21 rw
FACT20 rw
FACT19 rw
FACT18 rw
FACT17 rw
FACT16 rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
FACT15 rw
FACT14 rw
FACT13 rw
FACT12 rw
FACT11 rw
FACT10 rw
FACT9 rw
FACT8 rw
FACT7 rw
FACT6 rw
FACT5 rw
FACT4 rw
FACT3 rw
FACT2 rw
FACT1 rw
FACT0 rw
Биты 31:28 зарезервированы, и должны находиться в состоянии сброса (все нули).
FACTx (биты 27:0): Filter ACTive. Программа установит этот бит для активации фильтра x. Для модификации регистров фильтра x (CAN_FxR[0:7]) должен быть очищен бит FACTx, или должен быть установлен бит FINIT в регистре CAN_FMR.
Смещение адреса: 0x240 .. 0x31C Значение после сброса: 0xXXXXXXXX
Имеется 28 банков фильтра, i = 0 .. 27. Каждый банк i состоит из двух 32-битных регистров, CAN_FiR[2:1]. Этот регистр может быть модифицирован только когда очищен бит FACTx, или установлен бит FINIT в регистре CAN_FMR.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
FB31 rw
FB30 rw
FB29 rw
FB28 rw
FB27 rw
FB26 rw
FB25 rw
FB24 rw
FB23 rw
FB22 rw
FB21 rw
FB20 rw
FB19 rw
FB18 rw
FB17 rw
FB16 rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
FB15 rw
FB14 rw
FB13 rw
FB12 rw
FB11 rw
FB10 rw
FB9 rw
FB8 rw
FB7 rw
FB6 rw
FB5 rw
FB4 rw
FB3 rw
FB2 rw
FB1 rw
FB0 rw
Во всех конфигурациях:
FB[31:0] (биты 31:0): биты фильтра.
Идентификатор: каждый бит регистра задает значение соответствующего бита ожидаемого идентификатора.
Маска: каждый бит регистра задает, должен или нет бит связанного идентификатора совпадать с соответствующим битом ожидаемого идентификатора.
0: не имеет значения, этот бит не используется для сравнения на совпадение. 1: требуется соответствие, этот бит пришедшего идентификатора должен иметь такое же значение, как и соответствующий бит регистра идентификатора в фильтре.
Примечание: в зависимости от конфигурации scale и mode фильтра функция каждого регистра может отличаться. Для отображения фильтра, описания функций и регистров маски см. раздел "Фильтрация по идентификатору".
Регистр маски/идентификатора в режиме маски имеет то же самое отображение бит, как и в режиме списка идентификаторов.
Для отображения / адресов регистров банков фильтра см. таблицу 184.