5.3.1. CAN-контроллер
Входящий в МК STM32 CAN-контроллер является полнофункциональным CAN-узлом, отвечающий требованиям к активным и пассивным устройствам CAB 2.0A и 2.0B и поддерживающий передачу данных на скорости не более 1 Мбит/сек. CAN-контроллер оснащен также дополнительными возможностями для организации детерминистической передачи данных по специальному CAN-протоколу передачи в реальном времени TTCAN. После активизации функции TTCAN будет поддерживаться автоматическая повторная передача сообщений и автоматическая вставка в CAN-пакет двух дополнительных байт с зафиксированным моментом времени передачи сообщения. Все эти возможности необходимы в системах управления через CAN-интерфейс в масштабе реального времени.
Модуль CAN отвечает стандарту CAN 2.0B и поддерживает протокол TTCAN
Полное наименование CAN-контроллера - модуль bxCAN, где bx указывает на поддержку модулем дополнительных возможностей. Обычный модуль CAN использует один буфер приема и передачи, а у расширенного модуля CAN используется несколько буферов приема и передачи. Модуль bxCAN является гибридом двух архитектур модулей CAN. У него имеется три почтовых ящика для передаваемых сообщений и два почтовых ящика для принимаемых сообщений. Каждый из принимающих почтовых ящиков имеет буфер FIFO для помещения в него трех сообщений. Данная архитектура является компромиссной с точки зрения производительности передачи данных и занимаемого места в кристалле ИС.
Модуль CAN оснащен тремя почтовыми ящиками для передачи сообщений и имеет возможность автоматической вставки в сообщение текущего времени по протоколу TTCAN
Следующая важная функция CAN-контроллера - фильтрация получаемых сообщений. Поскольку CAN является широковещательной шиной, каждое переданное сообщение принимается всеми узлами шины. В CAN-шине любой разумной степени сложности передается достаточно большое число сообщений. Задачей каждого подключенного к CAN-узлу ЦПУ является реагирование на CAN-сообщения. Таким образом, чтобы избавить CAN-контроллер от проблемы приема в буфер нежелательных сообщений, необходима их фильтрация. У CAN-контроллера микроконтроллеров STM32 имеется 14 банков фильтров, которые можно использовать для блокировки всех CAN-сообщений, кроме избранных сообщений или групп сообщений.
14 фильтров сообщений поддерживают две конфигурации, которые можно использовать для фильтрации индивидуальных сообщений
Каждый банк фильтров состоит из двух 32-битных регистров и может работать в одном из четырех режимов. При использовании базового метода в каждый регистр банка фильтров записывается идентификатор сообщения. После поступления сообщения проверяется его идентификатор и, исходя из этого, принимается решение о приеме или отклонении сообщения. Данный режим поддерживает две конфигурации. В первой конфигурации регистры банков фильтров являются 3-битными и могут использоваться для фильтрации 11- и 29-битных полей идентификаторов сообщения, а также бит RTR и IDE в 16-битном режиме.
Одни и те же банки фильтров могут использоваться для фильтрации группы сообщений
Во второй конфигурации, в первый 32-битный регистр записывается идентификатор сообщения, во второй - маска сообщения. Регистр маски маркирует биты регистра идентификатора, как 'важный' или 'неважный'. Благодаря этому, появляется возможность принимать группу сообщений с помощью одного банка фильтров. Если принимающие фильтры пропускают сообщение, то вместе с ним принимающий буфер FIFO будет записан указатель на определивший совпадение фильтр. Это позволит прикладной программе ускорить идентификацию сообщения без необходимости считывания и дешифрации идентификатора пакета сообщения.
Все CAN-контроллеры поддерживают два режима работы: нормальный режим для приема и передачи пакетов сообщений и режим инициализации для задания параметров связи. Как уже говорилось, МК STM32 могут работать в экономичном режиме SLEEP. В этом режиме синхронизация модуля bxCAN отключена, однако доступ к регистрам почтовых ящиков остается возможным. Модуль bxCAN имеет возможность активизации работы при обнаружении активности на шине CAN. Его работу можно также реактивировать прикладной программой. Работая в нормальном режиме, поддерживаются два дополнительных подрежима. Первый подрежим - режим SILENT. В нём CAN-контроллер может принимать сообщения, но не может передавать и не генерирует бит ошибок в посылке и подтверждения сообщения. Данный режим рассчитан на CAN-шины с пассивным мониторингом. Второй подрежим - режим LOOPBACK. В этом режиме, передаваемые сообщения сразу же принимаются в приемный буфер. Он необходим для реализации диагностических функций и также полезен на фазе отладки кода программы. Оба рассмотренных режима можно комбинировать. Они идеальны для выполнения функций самотестирования при подключении к работающей шине.
|