Поиск:  
  
  






  ***

06.11.2005 - CAN 201: CAN-контроллеры


РобоКлуб/Технологии робототехники/Микроконтроллеры/06.11.2005 - CAN 201: CAN-контроллеры



CAN 201: CAN-контроллеры
В своей статье CAN 201: CAN Controllers, опубликованной на сайте Electronic Design, Вильям Вонг (William Wong) описывает работу контроллеров c поддержкой CAN.


Наконец-то, я возвращаюсь к теме сетей CAN (Controller Area Networks, локальные сети контроллеров). Статья CAN 101: CAN Can Where Ethernet Does Not, ED Online 9131 была написана в прошлом году. Я надеюсь, следующей статьи не придется ждать так долго. В ней мы познакомимся с высокоуровневыми протоколами CAN.



В этой статье мы посмотрим, как работают контроллеры CAN, в особенности те, которые используются в 8-битных PIC-микроконтроллерах компании Microchip. Они содержат ECAN-контроллеры (Enhanced CAN, расширенные CAN контроллеры) компании Microchip, которые поддерживают стандарт CAN редакции 2.0B при скорости до 1 Мбит/с. ECAN-контроллер поддерживает 29-битные CAN идентификаторы, стандартные 8-байтовые сообщения, три буфера передачи данных с индивидуальными приоритетами (на самом деле два буфера и один компоновочный буфер), шесть 29-разрядных карт входного полосового фильтра, две маски входного полосового фильтра, и приоритет буфера получения сообщений. Он также может работать с 11-разрядными CAN идентификаторами.


Компания Microchip имеет несколько демонстрационных комплектов CAN и LIN (Local Interconnect Network). Я посмотрел комплект CAN-LIN 2 (см. рис 1). Плата содержит три гнезда для двух 28-контактных/40-контактных PIC-микроконтроллеров с CAN и для 16-контактного PIC-микроконтроллера с LIN. Два гнезда CAN подключены к микросхемам CAN с разъёмами и 9-контактному коннектору. Плата также содержит 3-контактный LIN разъем. Для каждого PIC CAN контроллера имеется отдельный снабженный разъемами чип синхронизации.


На плате присутствуют множество контрольных точек, места для подсоединения перемычек и встроенные периферийные устройства, такие как индикаторные светодиоды, потенциометры и кнопки. Их можно использовать с образцами приложений или с вашими собственными клиентскими приложениями. В общем, плата является чрезвычайно гибкой.


Микроконтроллеры можно запрограммировать и затем подсоединить, а можно разрабатывать программу на уже подключенных чипах, используя пару элементов Microchip MPLAB ICD 2 (см. рис. 2). На самом деле вы можете обойтись одним ICD, однако, если вы пытаетесь отладить передачу данных в CAN, то это определенно проще сделать с помощью двух ICD. При использовании двух элементов я имел возможность наблюдать, как данные передавались между двумя микроконтроллерами, при этом контрольные точки устанавливались перед тем, как первое устройство пошлет сообщение и во втором устройстве после получения им сообщения.


Установка


На CD диске с дистрибутивом есть все программное обеспечение, необходимое для начала работы, включая код ассемблера LIN slave. Узлы LIN спроектированы не очень сложно. Во многих случаях тот же самый код можно использовать для установки и опроса контактов ввода-вывода.


На диске нет автозапуска, так что мне пришлось исследовать его содержимое вручную. Большую часть диска занимают PDF файлы с описание платы, микросхем и программного обеспечения. Для всех устройств предусмотрены исходные коды, микросхемы на плате поставляются изначально запрограммированы этим кодом. Перепрограммировать PIC-микроконтроллеры с помощью оригинальных приложений собственным кодом было несложно.


Первое, на что надо посмотреть – это руководство пользователя. В нем рассказано о процессе установки платы, программном обеспечении CANKing и о том, как перепрограммировать PIC-микроконтроллеры с помощью оригинального программного обеспечения.


Установочный диск для Microchip's ICD 2 поставляется в пакете ICD 2, который не входит в комплект дистрибутивов CAN-LIN 2. Процесс его установки существенно отличается. Вставьте CD-диск в ПК, работающий под ОС Windows, и пройдите через стандартный процесс инсталляции. ICD 2 представляет собой USB-устройство, которое автоматически распознается при подключении. Оно подключается к плате набора CAN-LIN с помощью короткого провода, похожего на телефонный.


У меня не возникло никаких проблем ни с ICD 2, ни с комплектом CAN-LIN, однако, я использовал продукцию компании Microchip ранее. Исходный код я смог протестировать за час. Тем, кто раньше не имел дела с PIC-микроконтроллерами, придется потратить денек на то, чтобы разобраться в архитектуре PIC и в том, как использовать программное обеспечение MPLAB. Эмулятор с набором команд MPLAB IDE позволяет экспериментировать, не внося изменений в процессоры набора CAN-LIN.


Отладка CAN


Одной из необходимых частей комплекта CAN-LIN является программное обеспечение Kvaser's CANKing (см. рис. 3). Это ПО представляет собой инструмент для диагностики CAN на базе Windows, который работает с демонстрационными программами, первоначально установленными на PIC-микроконтроллеры. Этот инструмент позволяет следить за трафиком CAN. Он разработан для PIC18F458, однако в сети должно быть лишь одно такое устройство. Этот инструмент можно использовать в сетях CAN, включающих в себя другие типы CAN устройств, хотя необходимо будет убедиться, что связанные с CANKing сообщения не конфликтуют с сообщениями, которые используются в шине CAN.


Конфигурация CANKing построена на шаблонах. CANKing также позволяет вам управлять сообщениями, которые будут зарегистрированы, что обеспечивает возможность изолировать трафик для определенной части приложения и не разбираться со всем трафиком CAN. Данная способность захватывать поток информации, похожа на возможности Ethernet сканеров и коммерческих сканеров шины CAN. CANKing не сможет вытеснить последние с рынка, поскольку это ПО не предназначено для систем с большим объёмом трафика. Однако его более чем достаточно в качестве средства разработки PIC-микроконтроллеров. Компания Kvaser и другие предоставляют более надёжные средства мониторинга CAN.


В CANKing очень много окон, однако, каждое из них легко как в понимании, так и использовании. По существу, данное ПО обеспечивает ECAN-контроллер «оконным» интерфейсом. CANKing также предоставляет полезную статистическую информацию о трафике шины CAN. В CANKing есть несколько окон специально для платы СAN-LIN. Они обеспечивает доступ к светодиодным выключателям, потенциометрам и выходу широтно-импульсного модулятора PIC-микроконтроллера.


ECAN-контроллеры


Те, кто искал в этой статье информацию о сравнительных характеристиках CAN-контроллеров и CAN-LIN, наконец-то её нашли.


ECAN-контроллеры компании Microchip (см. рис. 4) разработаны специально для PIC-контроллеров этой фирмы. Однако основные принципы их работы очень похожи на реализации CAN-контроллеров от других производителей. Этот обзор будет полезен для понимания других контроллеров при исследовании микроконтроллеров с поддержкой CAN, от конкурирующих компаний.


Три основных составляющих ECAN-контроллеров – это движок протокола, передатчик и приемник. Передатчик и приемник работают независимо друг от друга. Движок протокола обрабатывает данные на уровнях каналов передачи и на физическом уровне, включая обработку ошибок и обработку данных с помощью циклического избыточного кода (CRC).


По существу, приложению должно сначала настроить приемник и передатчик. Затем оно может помещать сообщения, которые надо отправить, в пустой буфер передатчика и получать принятые сообщения от приемника. Для обеспечения потока сообщений в системе можно использовать опросы или прерывания. Остальное – детали.


Сначала мы рассмотрим передатчик, поскольку его устройство не такое сложное как у приемника.


Передатчик состоит из трех одинаковых буферов сообщений. Каждый из них может обрабатывать 8 байт информации и имеет набор конфигурационных регистров для управления местом отправки сообщения. Как было отмечено в предыдущей статье о CAN, идентификатор сообщения представляет собой в большей степени описание его содержания, нежели адрес узла. Это станет более очевидно, когда мы перейдем к рассмотрению приемника. Четыре байта интерфейса используются для 29-разрядного идентификатора. Для каждого буфера установлен свой приоритет. Сообщения из буфера с самым высоким приоритетом будут отправляться, как только появится возможность. Этот приоритет не зависит от того приоритета, который относится к идентификатору и назначается протоколом CAN на шине.


Вот и все, что касается отправки данных. Установите приоритет, адрес, введите данные, дождитесь отправки сообщения и получите подтверждение о приеме сообщения.


Теперь поговорим о более интересной части – о приемнике. Приемник состоит из пары приемных буферов, еще одного буфера, в котором входящие данные обрабатываются, набор конфигурационных регистров и принимающих обрабатывающих регистров. Последние определяют то, какое сообщение будет получено контроллером. Это важно, поскольку сообщения принимаются при получении, если только контроллер не находится в режиме мониторинга, в этом случае он просто наблюдает за информацией, посылаемой по шине CAN.


Как только сообщение получено, его помещают в пустой буфер приемника. Приложение должно убирать сообщения до того, как они будут перезаписаны. Это может произойти, если оба буфера заполнены, и приоритет входящего сообщения выше, чем приоритеты сообщений, находящихся в буфере. Это позволяет контроллеру принимать сообщения с высоким приоритетом, приходящие самыми последними. Удаленные сообщения отмечаются (в отличие от их идентификаторов).


В общих чертах работа приемника представляется относительно простой. Настройте приемник (подробнее об этом речь пойдет позже) и удалите сообщения, которые были получены. По существу, это действия обратные к действиям приемника, за исключением того, что идентификатор и данные читаются, а не записываются.


Теперь сложная часть – процесс приема. Замечание: с точки зрения работы, нет никакой разницы между стандартным 11-разрядным режимом и расширенным 29-разрядным. В последнем случае просто требуется оперировать большим числом байт.


При ближайшем рассмотрении вы увидите, что два приемных буфера на самом деле являются независимыми. Оба они имеют одну маску приёма. У одного буфера (RBX0) есть два входных полосовых фильтра, а у другого (RBX1) – четыре. Каждому буферу присвоен приоритет, у RBX0 он выше. Если RBX0 принимает сообщение, то это сообщение не будет рассматриваться буфером RBX1, даже если критерий приема RBX1 соответствует идентификатору принятого сообщения.


Теперь о деталях приема. Первым делом смотрят на идентификатор полученного сообщения. Затем, идентификатор сравнивается с содержимым регистра фильтра. Для каждого бита происходит сравнение – совпадение или нет. Предположим на время, что совпадению соответствует 0, не совпадению – 1. Затем результат логически умножается (AND) с маской приёма. Сообщение принято, если для всех битов результат 0. Если контроллер получает сообщения, то они будут приняты после того, как данные и CRC будут приняты и проверены. Затем принятое сообщение помещается в подходящий приемный буфер, где приложение может его прочитать. Далее приведены некоторые стандартные сравнения для 11-разрядного идентификатора.


Неуспешно: (результат не ноль)
Идентификатор сообщения 001 1010 0000
Приёмный фильтр 100 1010 0000
Сравнение результатов 101 0000 0000
Маска приёма 111 1111 0000
Результат логич. умнож. 101 0000 0000

Успешно: (результат нулевой)
Идентификатор сообщения 101 1100 0001
Приёмный фильтр 101 1100 1010
Сравнение результатов 000 0000 1011
Маска приёма 111 1111 0000
Результат логич. умнож. 000 0000 0000


В этих примерах приведена приёмная маска, которая игнорирует четыре последних значащих бита (в этом примере самый левый бит является самым важным). В первом случае два бита отличаются от приёмного фильтра. Во втором примере отличаются три бита, но они находятся в тех позициях, которые игнорируются приёмной маской. Для буфера RBX0 производятся две проверки, поскольку у него два приёмных фильтра. Все сравнения производятся на аппаратном уровне и происходят параллельно, так что этот процесс на самом деле очень быстрый.


Мы воздержимся от широкого обсуждения размещения идентификатора CAN. Существует множество способов сделать это, конечный выбор зависит от типа приложений используемых в сети CAN. В самом простом случае, каждое устройство имеет уникальный идентификатор и приёмная маска должна состоять только из 1. Маскируемая часть (которая игнорируется) также может являться функциональным кодом, который указывает на то, что за данные находятся в сообщении и что с ними надо делать. Ещё одна альтернатива состоит в том, что часть маски используется в качестве идентификатора места, куда должен быть послан ответ. Как видите, есть множество вариантов.


В любом случае, полный CAN идентификатор полученного сообщения сохраняется, так что приложение может использовать идентификатор и данные в своих целях.


Настройки приёмного фильтра и маски обычно производится при начальной загрузке микроконтроллера. Они редко меняются – только в том случае если приложение производит какие-то нестандартные действия, такие как наблюдение за шиной или выполнение функций другого устройства при сбое в его работе.


Контроллеры компании Microchip также поддерживают такую возможность как временная маркировка. Это дает возможность аппаратному обеспечению отслеживать, когда сообщение было получено. Это может быть важно в приложениях с жестким временным режимом, в которых действие или отклик основаны на времени получения команды, или в тех случаях, когда важно точное время между двумя сообщениями.


Это почти всё о CAN-контроллерах. Не стоит залазить в битовые поля регистров, используемых для управления ECAN-контроллерами Microchip, пока вы не занялись непосредственно программированием. На самом деле, многое из этого может быть скрыто от ваших глаз, если вы используете шаблоны, высокоуровневые API языка C или run-time библиотеки. Но всё же полезно иметь представление о том, как работает аппаратура, и на что она способна.


Загрузчик CAN


В комплект входит ряд указаний по применению, а еще больше их на сайте компании Microchip. Одно из руководств, на котором я задержался, было руководство по загрузчику (AN247). Оно показывает, как реализовать поддержку загрузчика в PIC-микроконтроллере таким образом, чтобы один микроконтроллер с поддержкой CAN мог бы программировать другой.


Более конкретно, PIC-микроконтроллер с поддержкой CAN загружает программу загрузки блоков CAN, которая никогда не перезаписывается. Он посылает запрос по сети CAN на программу загрузки. Другой узел CAN в ответ посылает программу. Хотя этим узлом может быть любой микроконтроллер, понятно, что компания Microchip поставляет пример программы только для своих чипов.


Вроде как всё просто. Это действительно так, однако поработать есть над чем по двум причинам. Во-первых, маленький размер пакета CAN означает, что для большей части приложений не хватит одного сообщения, так что придётся использовать сразу несколько. На самом деле, протокол устроен довольноё сложно, так что он может управлять такими действиями как очистка памяти. Во-вторых, поскольку операция загрузки обычно происходит в то время, когда сеть используется для других операций, возможно возникновение проблем с приоритетами и загрузкой. Ограниченная пропускная способность CAN означает, что правильное совместное использование этой полосы будет проблематичным.


Большая часть деталей реализации содержится в указании по применению и исходном коде. Возможно снижение или увеличение функциональности. Код написан таким образом, что многие опции можно включать по условию. Это стоит того, чтобы посмотреть, поскольку это также предоставляет возможность системных обновлений.


Единственный недостаток, который я смог обнаружить в комплекте CAN-LIN – это недостаточное количество образцов приложений. К счастью, дополнительная информация есть на сайте компании Microchip.


CAN является относительно простым в использовании интерфейсом. Он очень гибкий и надёжный. Возможно, что он не такой быстрый как Ethernet, но по многим показателям он более эффективен в управлении приложениями. Я определенно могу рекомендовать комплекты CAN-LIN, как хороший способ познакомиться с CAN и оценить преимущества PIC-микроконтроллеров.


Ссылки


Kvaser - www.kvaser.com

Microchip www.microchip.com










gale

Electronic Design