Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Кадр ошибки, представленный на рис. 9.4, информирует узлы сети о том, что на шине CAN произошла ошибка. Каждый кадр ошибки состоит из поля признака ошибки и поля разделителя ошибки. Поле признака ошибки содержит либо активные флаги ошибки (шесть доминантных бит), либо пассивные флаги ошибки (шесть рецессивных бит). Мы дадим определение понятиям активных и пассивных ошибок в разделе обработки ошибок. Следует заметить, что в системах с многочисленными узлами на шине CAN число доминантных бит в признаке ошибки может увеличиваться до 12. Это необходимо, чтобы все компоненты системы могли использовать флаги ошибки. Поле разделителя ошибки состоит из восьми рецессивных бит.
Рис. 9.4. Кадр ошибки CAN
Кадр перегрузки, как показано в рис. 9.5, имеет тот же формат, что и кадр ошибки. Флаг перегрузки составлен из шести доминантных бит. Биты флага перегрузки устанавливаются, когда:
• принимающий узел не может обработать корректные кадры за выделенное время, и требует задержки;
• на интервале паузы появился доминантный бит.
Рис. 9.5. Кадр перегрузки CAN
Кадры данных и удаленного запроса на шине CAN отделяются от других кадров интервалами паузы, которые состоят, по крайней мере, из трех рецессивных бит. Разделитель перегрузки составлен из восьми рецессивных бит.
Обработка ошибок. Во время передачи сообщения по CAN шине могут происходить ошибки. Когда активным (передающим сообщение) или пассивным (принимающим) узлом системы обнаружена ошибка, соответствующий узел выставляет на шину кадр ошибки, рассмотренный выше. Если активный узел передает кадр ошибки, флаг ошибки называется активным флагом ошибки; если ошибка зафиксирована в пассивном узле, то и флаг называется пассивным. Имеются пять типов ошибок, которые могут вызывать передачу кадра ошибки: ошибка разряда (1), ошибка заполнения (2), ошибка избыточности (3), ошибка формы (4) и ошибка подтверждения (5).
Ошибка разряда происходит, когда передающий узел обнаруживает несоответствие выставляемого на шину бита и реального состояния шины в тот же момент времени. Флаг ошибки заполнения устанавливается, когда контроллер CAN обнаруживает в передаваемом кадре шесть последовательных доминантных или шесть последовательных рецессивных бит. Ошибка контроля происходит, когда значение контрольного числа CRC, вычисленное приемником, не соответствует контрольному числу CRC, полученному в конце передачи. Ошибка формы фиксируется, когда в одном из полей кадра содержатся недопустимые биты. И наконец, ошибка подтверждения происходит, когда отсутствует доминантный бит в поле ACK-Slot.
Синхронизация бита. На рис. 9.6 показано, что интервал времени передачи одного бита по шине CAN разбивается на четыре временных сегмента: сегмент синхронизации, сегмент распространения, сегмент буфера фазы 1 и сегмент буфера фазы 2. На интервале первого сегмента появляется фронт, который используется, чтобы синхронизировать узлы, подключенные к шине. Выборка логического состояния бита производится после окончания сегмента буфера фазы 1 (точка выборки). Сегмент времени распространения учитывает задержку передатчика и приемника и время распространения сигнала по шине. Сегменты фазы 1 и 2 могут увеличиваться или уменьшаться по длительности посредством программных уставок при инициализации. Такое решение позволяет увеличить надежность передачи данных по шине.
Рис. 9.6. Номинальные сегменты времени передачи бита
9.3.2. Модуль контроллера последовательного обмена msCAN12
Микроконтроллеры 68HC912BC32, 68HC912D60, 68HC912DG128 и 68HC912DT128 имеют в своем составе один или несколько встроенных контроллеров последовательного обмена в стандарте CAN. Эти контроллеры принято называть модулями msCAN (Motorola Scalable Controller Area Network). Семейство 68HC12/HCS12 отличается тем, что модели МК, входящие в его состав, оснащены сразу несколькими модулями msCAN. Например, МК 68HC912BC32 и 68HC912D60 имеют в своем составе один модуль msCAN, 68HC912DG128 — 2 модуля, 68HC912DT128 — 3 модуля, а в семействе HCS12 возможен даже вариант МК с 5 модулями «на борту».
Модули msCAN в составе разных МК полностью идентичны, работают в соответствии с протоколом CAN версии 2.0 A/B. Далее мы подробно рассмотрим, как работает один из них, в составе МК MC9S12DP256.
Каждый модуль msCAN связывается с внешним миром, используя выход TxCAN, подключенный к передатчику, и вход RxCAN, связанный с приемником. Названные входы/выходы МК через схему преобразования уровней, называемую трансивером CAN, подключены к CAN шине. Каждый модуль msCAN состоит трех подсистем: блока передатчика, блока приемника и блока прерывания. Мы опишем каждую из этих подсистем в следующих разделах.
Режимы работы CAN. Прежде, чем перейти к рассмотрению каждой из подсистем, входящих в состав модуля контроллера msCAN, сравним нормальный режим работы контроллера msCAN12 с его работой в режиме энергосбережения. Когда модуль CAN неактивен (т.е. не производит обмена с другим устройством по CAN шине), пользователь заинтересован в том, чтобы уменьшить мощность потребления самого модуля msCAN12. Для этого необходимо перевести модуль msCAN12 в энергосберегающий режим. Каждый модуль msCAN12 может работать не только в нормальном, но и в трех энергосберегающих режимах: спящем режиме, режиме программного сброса и режиме отключения.
Выбор одного из трех энергосберегающих режимов выполняется путем соответствующей конфигурации msCAN12 посредством изменения состояния регистра управления CMCR0, формат которого показан на рис. 9.7.
Рис. 9.7. Формат регистра управления CMCR0
Пятый бит этого регистра CSWAI (CAN-Stops-in-Wait) представляет собой бит выбора режима останова или режима ожидания. Если этот бит очищен, модуль переходит в режим ожидания. Если бит CSWAI =1, модуль не получает сигналов синхронизации, т.е останавливается. Четвертый бит — бит синхронизации SYNCH — указывает, готов ли модуль CAN к связи с другими узлами сети. Когда этот бит очищен, msCAN12 не синхронизирован с шиной CAN, когда же бит установлен, то msCAN12 и шина CAN синхронизированы. Третий бит TLNKEN представляет собой бит состояния входа таймера. Когда этот бит очищен, то вход таймера связан с соответствующим портом. Если же установлен, это указывает, что на вход таймера подается выходной сигнал msCAN12.
Второй бит SLPAK является флагом спящего режима. Он показывает, находится или нет контроллер msCAN12 в спящем режиме: логический 0 указывает, что msCAN12 не находится в спящем режиме, в то время, как логическая 1, показывает что этот режим установлен. Бит запроса спящего режима SLPRQ используется, чтобы запросить перевод модуля msCAN12 в спящий режим: установка этого бита заставляет модуль функционировать в рабочем режиме, очистка — переводит модуль в спящий режим.
И наконец, бит SFTRES используется центральным процессором, чтобы немедленно перевести модуль msCAN12 в состояние сброса. Когда этот бит установлен, любая текущая передача информации прерывается и прекращается синхронизация контроллера CAN с шиной CAN. Когда этот бит очищен, msCAN12 работает в нормальном режиме.
Флаги SFTRES, SLPAK и CSWAI регистра CMCR0 используются, чтобы выбрать один из четырех режимов работы msCAN12 (нормальный, программного сброса, спящий и выключения). Мы обсудим эти режимы в следующих трех разделах. Поскольку ЦП микроконтроллера 68HC12 может работать в трех режимах (рабочем, ожидания и останова), имеются 12 возможных комбинаций режимов функционирования ЦП и модуля msCAN12. Четыре из этих 12 комбинаций не могут быть реализованы.
Когда ЦП функционирует в рабочем режиме, модуль msCAN12 может функционировать в спящем режиме, режиме программного сброса или в нормальном режиме. Режим выключения не допускается. ЦП может выбрать один из режимов msCAN12, конфигурируя три бита регистра CMCR0 следующим образом:
• Спящий режим: CSWAI = 0 или 1, SLPAK = 1 и SFTRES = 0;
• Режим программного сброса: CSWAI = 0 или 1, SLPAK = 0 и SFTRES = 1;
• Нормальный режим: CSWAI = 0 или 1, SLPAK = 0 и SFTRES = 0.
Обратите внимание, что бит SLPAK предназначен только для чтения и не может быть изменен под управлением программы. Чтобы установить или очистить бит SLPAK, Вы должны установить или очистить бит SLPRQ (бит 1) регистра CMCR0.
Когда ЦП функционирует в режиме ожидания, модуль msCAN12 может функционировать в любом из четырех режимов. Следующие конфигурации из трех битов в регистре CMCR0 используются, чтобы назначить один из нижеперечисленных режимов:
• Режим выключения: CSWAI = 1, SLPAK = 0 или 1 и SFTRES = 0 или 1,
• Спящий режим: CSWAI = 0, SLPAK = 1 и SFTRES = 0,
• Режим программного сброса: CSWAI = 0, SLPAK = 0, и SFTRES = 1,
• Нормальный режим: CSWAI = 0, SLPAK = 0 и SFTRES = 0.
И наконец, когда ЦП функционирует в режиме останова, контроллер msCAN12 может находиться только в выключенном режиме. Когда ЦП вводит режим останова, то независимо от состояния битов CSWAI, SLPAK, и SFTRES регистра CMCR0, модуль msCAN12 вынужден перейти в режим выключения. Все другие режимы для модуля msCAN12 при этом невозможны.