Последовательный интерфейс, реализующий протокол шины

advertisement
Последовательный интерфейс, реализующий протокол шины CAN
Протокол CAN, разработанный компанией Bosch в середине 80-х годов, обеспечивает
быструю и надежную передачу данных в широковещательном режиме с возможностью работы в
сети нескольких ведущих устройств (контроллеров). Особенностью этого протокола является
отсутствие адресов, назначаемых включенным в сеть контроллерам. Вместо этого каждое
передаваемое в сети сообщение имеет идентификатор ID, который характеризует его содержание.
Идентификатор принимается всеми контроллерами сети, которые затем производят его
“фильтрацию” – сравнение с хранящимися в контроллере шаблонами. Фильтр выделяет те
идентификаторы, на которые должен реагировать данный контроллер. Если идентификатор
“проходит” через фильтр, то контроллер принимает данные, поступающие в сообщении, или
передает запрошенные в нем данные. Путем соответствующей настройки фильтров обеспечиваются
возможности приема одного сообщения несколькими контроллерами (широковещательный режим)
или приема одним или несколькими контроллерами определенной группы сообщений.
Таким образом прием данных определяется не адресом контроллера, а содержанием
передаваемой информации, которое задается идентификатором сообщения. Отсутствие
адресации обеспечивает легкую возможность включения в сеть или отключения от нее любого
количества контроллеров.
С помощью идентификаторов решается также проблема коллизий, когда одновременно
несколько контроллеров пытаются передать сообщение. В этом случае будет передаваться
сообщение, идентификатор которого имеет наименьшее значение ID. Каждый контроллер,
выдающий идентификатор, одновременно принимает значение сигнала на линии. Если при передаче
очередного бита идентификатора, имеющего значение 1, контроллер принимает с линии сигнал 0, то
он переходит в режим приема, прекращая передачу сообщения. При этом продолжится передача
сообщения, идентификатор которого имеет нулевое значение соответствующего бита. Таким
образом приоритет сообщения определяется его идентификатором. Возниковение коллизии при
данном режиме доступа к шине не вызывает прекращения передачи. Приоритет сообщения
выявляется непосредственно в процессе выдачи идентификатора, и сразу же выполняется арбитраж,
обеспечивающий продолжение передачи сообщения с наименьшим значением ID.
Для реализации арбитража протокол CAN предполагает использование для выдачи сигналов
выходных каскадов с «открытым стоком» («открытым коллектором»). При подключении нескольких
таких каскадов к общей шине реализуется логическая операция «Монтажное И», то-есть на шине
будет установлен уровень 0, если хотя бы одно из подключенных к ней устройств выдает 0. Потому
поступающий на CAN-шину нулевой бит называется доминантным (преобладающим), так как он
обеспечивает уровень 0 на шине при любом значении битов, поступающих от других устройств.
Соответственно, поступающий единичный бит называется рецессивным (подавленным), так как
при одновременной выдаче на шину доминантного (нулевого) бита на ней устанавливается уровень
0, то-есть единичный бит будет подавлен.
а)
б)
SOF
Поле
арбитража
Поле
управления
Поле данных
Поле
CRC
Поле
АСК
Поле
EOF
Промежуток
между кадрами
1 бит
12 или 32 бит
6 бит
от 0 до 8 байт
16 бит
2 бита
7 бит
3 бита
SOF
Поле
арбитража
Поле
управления
Поле
CRC
Поле
АСК
Поле
EOF
Промежуток
между кадрами
1 бит
12 или 32 бит
6 бит
16 бит
2 бита
7 бит
3 бита
Рис. 1. Формат кадров передачи данных (а) и запроса данных (б).
Сообщения, передаваемые с помощью CAN-интерфейса, формируются в виде кадров
стандартного формата. Кадры, используемые для передачи данных и запроса данных, имеют
формат, показанный на рис. 1. Кадр передачи данных содержит поле посылаемых данных,
которое имеет длину до 8 байт. Кадр запроса данных не содержит поле данных. При его
получении запрашиваемый контроллер выполняет передачу кадра данных. В промежутках
между кадрами на шину поступают три рецессивных бита. В состав кадров передачи и
запроса данных входят следующие обязательные биты и поля:
SOF (Start Of Frame) - стартовый бит имеет доминантный уровень, устанавливающий
шину в состояние 0; служит для синхронизации передаваемого потока битов;
поле арбитража (рис. 2) – содержит идентификатор ID, определяющий содержание и
приоритет сообщения;
поле управления (рис. 2) – содержит 4-битный код DLC (Data Length Code), который
имеет значения от 0000 до 1000, указывая длину поля данных - от 0 до 8 байт;
поле контрольной суммы CRC (Control …Code) – содержит 15 бит контрольной
суммы сообщения и один разделительный бит, который имеет рецессивный уровень;
поле подтверждения ACK (Acknowledge) – передающий контроллер выдает в этом
поле два рецессивных бита, а контроллер, принявший сообщение, посылает на шину два
доминантных бита, указывающих, что сообщение получено;
поле EOF (End Of Frame) – поле окончания кадра, в котором передаются 7
рецессивных битов.
При передаче длинных последовательностей одинаковых битов возможна
потеря синхронизации обмена из-за рассогласования частоты синхроимпульсов
передающего и принимающих контроллеров. Чтобы избежать этого, передающий
контроллер реализует процедуру битстаффинга, вставляя после пяти идущих подряд 0 или 1
дополнительный бит противоположного значения. Таким образом последовательность битов
111111 преобразуется в 1111101, а последовательность 000000 – в 0000010. Принимающий
контроллер выполняет де-битстаффинг – обратную процедуру удаления вставленного бита.
Содержимое полей арбитража и управления зависит от используемого формата
сообщения. Протокол CAN предусматривает два возможных варианта:
- стандартный формат (спецификация CAN Specification 2.0A),
- расширенный формат (спецификация CAN Specification 2.0B).
Бит IDE (ID Extension) определяет используемый формат данного сообщения:
стандартный, если IDE доминантный бит, расширенный, если IDE - рецессивный бит.
Стандартный формат (рис. 2,а) предусматривает использование 11-битного
идентификатора ID, который позволяет различать 2048 видов сообщений. Последним
(двенадцатым) в поле арбитража выдается бит RTR (Remote Transmission Request),
указывающий тип кадра: в кадре передачи данных RTR является доминантным битом, в
кадре запроса данных – рецессивным битом. Поле управления содержит бит указания
формата IDE, резервный доминантный бит r0 и код длины передаваемых данных DLC.
Расширенный формат (рис. 2,б) использует 29-битный идентификатор ID,
позволяющий распознавать свыше 536 миллионов различных сообщений. В этом случае
двенадцатым битом в поле арбитража является бит SRR (Substitute Remote Request), который
замещает бит RTR, выдаваемый в данной позиции при стандартном формате сообщения.
Далее следуют бит IDE и дополнительные 18 бит идентификатора. Последним в поле
арбитража выдается бит типа кадра RTR, а поле управления содержит два резервных бита r0,
r1 и код DLC.
а)
SOF
Поле арбитража
Поле арбитража
RTR
11 бит ID
Поле управления
IDE
Поле арбитража
б)
SOF
арбитража
11 бит ID
SRR
r0
Поле данных
DLC
Поле управления Поле данных
IDE 18 бит ID RTR r1
R
r0
Рис.2. Форматы полей арбитража и управления
DLC
Контроль ошибок и перегрузки сети. При передаче сообщений в сети подключенные к
шине контроллеры выявляют следующие виды ошибок:
ошибка контрольной суммы (CRC Error) – возникает при несовпадении контрольной
суммы сообщения, вычисленной принимающим контроллером, и значения этой суммы,
переданной в поле CRC (Сyclic Redundant Check);
ошибка формата кадра (Frame Error) – возникает при обнаружении несоответствия
размеров или содержания полей формату передаваемого сообщения;
ошибка подтверждения (Acknowledge Error) – указывает на отсутствие поля ACK (два
доминантных бита) в кадре сообщения;
ошибка передачи бита (Bit Error) - выявляется контроллером-передатчиком, если он
обнаруживает, что состояние шины не соответствует значению передаваемого им бита;
ошибка битстаффинга (Staff Error) - возникает при обнаружении в поле сообщения
последовательности из шести или более одинаковых бит (нарушение правил битстаффинга).
Ошибка
Незавершенный
ошибочный кадр
Флаг
ошибки
Дополнительные
биты ошибки
Разделитель
Промежуток
между кадрами
6 бит
от 0 до 6 бит
8 бит
3 бита
Суперпозиция флагов ошибки
а)
Кадр ошибки
Конец кадра
или разделитель
Флаг
перегрузки
Дополнительные
биты перегрузки
Разделитель
Промежуток
между кадрами
6 бит
от 0 до 6 бит
8 бит
3 бита
Суперпозиция флагов перегрузки
б)
Кадр перегрузки
Рис. 3. Формат кадров ошибки (а) и перегрузки (б)
Любой активный контроллер в сети, первым обнаруживший одну из указанных
ошибок, передает на шину кадр ошибки (рис. 3,а), не дожидаясь окончания передачи
текущего сообщения. Этот кадр содержит активный флаг ошибки – последовательность из
шести доминантных битов. Пассивные контроллеры при обнаружении ошибки выдают
пассивный флаг ошибки – последовательность из шести рецессивных битов. Поэтому флаг
ошибки от пассивного контроллера будет подавляться битами сообщения, если оно
поступает от активного контроллера. Другие активные или пассивные контроллеры,
подключенные к шине, могут обнаружить другие ошибки и выдать на шину доминантные
или рецессивные биты, дополняющие флаг ошибки. Если эти контроллеры не обнаруживают
других ошибок, то они воспринимают поступивший флаг ошибки, как ошибку
битстаффинга, и выдают свой флаг ошибки (шесть одинаковых бит) после приема
первоначального флага ошибки. Таким образом в кадре ошибки возникает суперпозиция
флагов ошибки, поступающих от различных контроллеров в сети, которая содержит от 6 до
12 битов. После флагов ошибки в этом кадре передается разделитель из 8 рецессивных
битов. Приняв кадр ошибки, контроллер, передававший сообщение с обнаруженной
ошибкой, повторно посылает его на шину.
Каждый контроллер, подключенный к CAN-шине, имеет два внутренних счетчика:
ошибок, обнаруженных при приеме, и ошибок, выявленных в процессе передачи. В
зависимости от количества обнаруженных ошибок контроллеры сети могут находиться в
одном из следующих состояний:
активное состояние (Error Active) – контроллер принимает участие в процессе обмена
данными и выдает активный флаг ошибки (шесть доминантных бит) при обнаружении
ошибки в любом сообщении, передаваемом по сети;
пассивное состояние (Error Passive) – контроллер принимает участие в обмене
данными и выдает на шину пассивный флаг (шесть рецессивных бит) при обнаружении
ошибки, если ошибка содержится в сообщении, которое передает этот контроллер;
отключенное состояние (Bus Off) – контроллер отключен от CAN-шины и не
участвует в обмене данными и контроле ошибок.
В исходном состоянии все контроллеры в сети являются активными. При
обнаружении определенного количества ошибок приема или передачи, которые фиксируются
соответствующими счетчиками, контроллер переводится в пассивное состояние. Пассивный
контроллер может прервать передачу только собственного ошибочного сообщения. В
промежутке после кадра, переданного пассивным контроллером, выдается не три (см. рис. 1),
а одиннадцать рецессивных бит. Контроллер отключается от сети, если происходит
переполнение счетчика ошибок передачи. Выход из отключенного состояния производится
путем повторного запуска контроллера, при котором счетчики ошибок устанавливаются в
нулевое состояние.
Обычно используются 8-разрядные счетчики ошибок, обеспечивающие переход в
пассивное состояние после обнаружения 127 ошибок и в отключенное состояние после 255
ошибок. Таким образом контроллер, обнаруживший большое количество ошибок
переводится сначала в пассивное, а затем в отключенное состояние. Благодаря этому
механизму предотвращается возможность блокировки обмена в сети из-за кадров ошибки,
выдаваемых неисправными контроллерами, которые сами неправильно передают или
принимают сообщения.
Кадр перегрузки (рис. 3,б), который имеет формат аналогичный кадру ошибки,
выдается контроллером, который не готов к приему сообщения или обнаружил доминантные
биты в разделителе или промежутке между кадрами. Кадр перегрузки обеспечивает только
задержку обмена. Он не влияет на содержимое счетчиков ошибок и не вызывает повторную
передачу сообщения, которая выполняется после кадра ошибки.
Благодаря реализации эффективного контроля ошибок протокол CAN обеспечивает
надежный обмен данными с достаточно высокой скоростью. Согласно имеющимся оценкам
и рекомендациям скорость обмена 1 Мбит/c реализуется при использовании проводной сети
без гальванической развязки на расстоянии до 30 м, скорость 125 Кбит/c – на расстоянии до
500 м, скорость 10 Кбит/c – на расстоянии до 5 км. Протокол CAN широко используется в
современной автомобильной электронике, промышленной автоматике, контрольноизмерительных системах и сложной бытовой технике.
Download