CANNY 7. Драйвер LIN

Общее описание

Два из одиннадцати каналов ввода-вывода CANNY 7, которые могут быть переданы под управление драйвера UART/RS-232 (Канал №9 и Канал №10), могут быть использованы для организации приема-передачи данных как два независимых канала драйвера LIN.

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

Драйвер LIN в своей работе использует ресурсы каналов контроллера, но имеет более высокий приоритет чем драйвер дискретного ввода-вывода. Таким образом, при активации драйвера LIN, для задействованных в его работе каналов, изменение значений в связанных с ними регистрах драйвера дискретного ввода-вывода будет проигнорировано контроллером.

Регистры драйвера

Ниже приведено описание допустимых значений регистров управления работой драйвера LIN.

Регистры конфигурации драйвера LIN.

Регистры конфигурации драйвера LIN позволяют установить параметры работы контроллера в качестве узла шины LIN:

Регистры конфигурации драйвера LIN.
Регистр Ожидаемые значения
Регистр конфигурации LINx 1…N = установить конфигурацию канала драйвера LIN контроллера, определяющую текущий режим и параметры его работы (задается специальной константой из справочника констант);
0 = отключить канал от драйвера LIN, вернуть управление каналом драйверу каналов ввода-вывода и разрешить изменения его состояния из функциональной диаграммы.

Конфигурация канала для работы в данном режиме, определяется константой, представляющей собой комбинацию параметров: версии протокола, скорости передачи данных, режима работы и наличия внутренней «подтяжки» контакта контроллера.

Конфигурация канала для работы в режиме LIN.
Параметр Перечень допустимых значений
Версия LIN 1.3; 2.0
Скорость передачи данных, бод 2400; 9600; 10500; 19200
Режим работы MASTER; SLAVE
Подтяжка плюс; воздух

Именованные константы, представляющие доступные пользователю комбинации параметров конфигурации LIN, содержатся в разделе «Конфигурация LIN» справочника констант CannyLab, доступ к которому осуществляется через контекстное меню входа функционального блока, имеющего тип «Константа».

Регистры диагностики драйвера LIN.
Регистр Возвращаемые значения
Регистр переполнения буфера LINx 1 = буфер соответствующего канала драйвера LIN переполнен;
0 = переполнения соответствующего канала драйвера LIN не зафиксировано.
Регистр ошибки приема LINx 1 = во время приема сообщения по соответствующему каналу драйвера LIN произошла ошибка;
0 = драйвер работает в нормальном режиме.
Регистр готовности буфера передачи данных LINx 1 = буфер передачи данных соответствующего канала драйвера LIN свободен и готов к работе;
0 = буфер передачи данных драйвера LIN занят.
Регистр успешной отправки данных драйвера LINx 1 = при работе в режиме SLAVE, признак успешной отправки данных из буфера передачи соответствующего канала драйвера LIN в ответ на запрос MASTER-узла;
0 = при работе соответствующего канала драйвера LIN в режиме SLAVE, запроса от MASTER-узла не поступало.
Регистр флагов успешной отправки дополнительных буферов LINx SLAVE 1…255 = при работе в режиме MULTISLAVE, признак успешной отправки данных из дополнительного буфера передачи соответствующего канала драйвера LIN в ответ на запрос MASTER-узла; при успешной отправке значение «1» присваивается биту, номер которого совпадет с номером отправленного дополнительного буфера SLAVE, т.е. при успешной отправке
буфера №0 - регистр флага = 1 = 0x01 = 0b00000001,
буфера №1 - регистр флага = 2 = 0x02 = 0b00000010,
буфера №2 - регистр флага = 4 = 0x04 = 0b00000100,
буфера №3 - регистр флага = 8 = 0x08 = 0b00001000,
буфера №4 - регистр флага = 16 = 0x10 = 0b00010000,
буфера №5 - регистр флага = 32 = 0x20 = 0b00100000,
буфера №6 - регистр флага = 64 = 0x30 = 0b01000000,
буфера №7 - регистр флага = 128 = 0x40 = 0b10000000;
0 = при работе соответствующего канала драйвера LIN в режиме MULTISLAVE, запроса на получение данных от узлов, номера которых присвоены дополнительным буферам LIN SLAVE, от MASTER-узла не поступало.
Регистры приема драйвера LIN.
Регистр Возвращаемые значения
Регистр наличия принятых данных LINx 1 = сообщение успешно получено и доступно в регистрах буфера приема соответствующего канала драйвера LIN;
0 = в буфере приема соответствующего канала драйвера LIN отсутствуют актуальные данные.
Регистр отсутствия активности данных LINx 1 = активность соответствующего канала драйвера LIN отсутствует, линия находится в пассивном режиме;
0 = зафиксирована активность на линии соответствующего канала драйвера LIN.
Регистр принятого сообщения LINx LEN 0…8 = значение, равное количеству байт данных в пакете, принятом по соответствующему каналу драйвера LIN.
Регистр принятого сообщения LINx ID 0…63 = значение идентификатора полученного по соответствующему каналу драйвера LIN сообщения. (см. примечание).
Регистр принятого сообщения LINx D1:D0

Регистр принятого сообщения LINx D7:D6
0…0xFFFF = значения соответствующих байт данных приемных буферов LIN каждого канала, по два байта на регистр.

Примечание: В регистре идентификатора принятого сообщения LIN отображаются только младшие 6 бит идентификатора: 4 бита адреса устройства и 2 два бита использовавшихся в LIN версии 1.1 для кодирования длины сообщения, а в более поздних версиях расширяющие адрес. 10 старших бит регистра идентификатора принятого сообщения LIN всегда равны нулю.

Регистры передачи драйвера LIN.
Регистр Ожидаемые значения
Регистр начала передачи LINx ≥ 1 = загрузить данные из регистров передачи в регистрах буфера приема соответствующего канала драйвера LIN;
0 = не загружать данные в буфер передачи соответствующего канала драйвера LIN.
Регистр номера дополнительного буфера передачи LINx SLAVE 0…7 = при работе в режиме MULTISLAVE, номер дополнительного буфера передачи SLAVE соответствующего канала драйвера LIN, заполнение которого осуществляется на данном цикле выполнения диаграммы.
Регистр сообщения передачи LINx LEN 0…8 = количество байт данных, которое будет необходимо передать в шину, при получении команды на отправку соответствующего канала драйвера LIN.
Регистр сообщения передачи LINx ID 0…63 = значение идентификатора LIN-сообщения для передачи по соответствующему каналу драйвера LIN.
Регистр сообщения передачи LINx D1:D0

Регистр сообщения передачи LINx D7:D6
0…0xFFFF = значения соответствующих байт данных для передачи по соответствующему каналу драйвера LIN, по два байта на регистр.

Примечание: При передаче LIN-сообщения, драйвер отбрасывает все кроме младших 6 бит значения установленного в регистре идентификатора LIN-сообщения, автоматически генерирует два бита четности и дополняет ими идентификатор, в соответствие с требованиями стандарта.

Примечание: Если, работая в режиме SLAVE, регистр номера дополнительных буферов LIN SLAVE не использован, т.е. дополнительные буферы LIN SLAVE не заполнены, то драйвер работает в обычном SLAVE-режиме, с единственным буфером передачи LIN.

Примечание: Если, работая в режиме SLAVE, дополнительные буферы LIN SLAVE заполнены с помощью регистра номера дополнительных буферов LIN SLAVE, то драйвер работает в режиме MULTISLAVE.

Примечание: При работе в режиме MULTISLAVE, дополнительные буферы LIN SLAVE заполняются последовательно, по одному за один цикл выполнения диаграммы.

Примечание: При работе в сетях LIN версии ниже 1.3, будьте внимательны при формировании исходящих сообщений. Драйвер позволяет использовать комбинации значений длины и идентификатора передаваемого сообщения недопустимые в этом стандарте.

Работа контроллера в режиме MASTER

Для перевода канала драйвера LIN в режим MASTER, необходимо в соответствующий каналу драйвера «Регистр конфигурации LINx» передать значение константы, соответствующей выбранному режиму работы.

Для получения MASTERом данных от SLAVE-узла, необходимо передать в шину LIN соответствующий запрос: отправить заголовок сообщения, содержащий идентификатор ведомого узла, от которого запрашиваются данные. Длина сообщения передачи LIN LEN должна быть установлена равной нулю, в регистр старта передачи должно быть записано ненулевое значение. При получении ответа от ведомого устройства, он будет помещен в Регистры принятого сообщения соответствующего канала драйвера LIN с одновременной установкой признака в Регистре наличия принятых данных LIN этого канала.

Пример 1

Пример функциональной диаграммы для получения MASTERом данных от SLAVE-устройства. MASTER каждые 100мс отправляет в шину запрос на получение данных от ведомого устройства с идентификатором 0х02. Получив ответ, контроллер запоминает 2 первых байта данных, в D-триггере.

Пример функциональной диаграммы для получения MASTERом данных от SLAVE-устройства.

Для передачи данных в режиме MASTER необходимо заполнить регистры идентификатора, и данных передаваемого сообщения LIN, установив при этом в Регистре передаваемого сообщения LIN LEN, значение равное количеству байт данных передаваемого сообщения, которое должно быть больше нуля но меньше девяти. Команда драйверу на отправку сообщения посылается путем установки ненулевого значения в «Регистр начала передачи сообщения LINх», в результате чего, содержимое регистров данных копируется в буфер передачи LIN-сообщения, если он свободен, драйвер немедленно приступит к отправке сообщения.

Примечание: С целью предотвращения потери данных, перед отправкой нового сообщения LIN рекомендуется убедиться в готовности буфера передачи соответствующего канала драйвера LIN к передаче очередного сообщения, проверив значение в Регистре готовности буфера передачи данных LINx.

Пример 2

Пример функциональной диаграммы отправки данных в шину LIN ведущим устройством. MASTER каждые 500мс отправляет в шину сообщение с идентификатором 0х01, содержащее 2 байта данных (0х0А и 0х55)

Пример функциональной диаграммы отправки данных в шину LIN ведущим устройством MASTER.

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

Пример 3

Пример функциональной диаграммы для передачи MASTERом данных SLAVE-устройству, с последующим запросом данных по трем идентификаторам. MASTER каждые 50мс, циклично, отправляет в шину 4 сообщения, одно из которых содержит данные (ID=0x00C), а три остальных - запросы на получение данных от ведомых устройств. Получение данных на запрос с ID=0x015 MASTER подтверждает коротким включением своего зеленого светодиода и сохраняет два байта данных этого сообщения (D1:D0) в D-триггере для дальнейшей обработки.

Пример функциональной диаграммы обмена данными между MASTERом и SLAVE-устройствами.

Работа контроллера в режиме SLAVE

Работая в режиме SLAVE, узел сети LIN успешно принимает любые данные передаваемые по сети, но не может сам передавать данные в LIN, не получив на то соответствующего запроса от MASTER.

Для перевода канала контроллера в режим SLAVE, необходимо в соответствующий каналу «Регистр конфигурации LINx» передать значение константы, соответствующей выбранному режиму работы.

Для обеспечения успешной отправки данных узлом находящемся в режиме SLAVE по запросу MASTER-узла, необходимо заранее, не дожидаясь запроса, подготовить данные к передаче. Для этого необходимо заполнить все необходимые регистры сообщения передачи драйвера LIN, а именно: регистр идентификатора LIN ID, регистр длины сообщения LIN LEN и разместить передаваемую информацию в регистрах данных LIN. Разрешение на отправку сообщения дается путем установки значения «1» в «Регистр начала передачи сообщения LINх», в результате чего содержимое регистров данных копируется в буфер передачи LIN-сообщения, если он свободен. Отправка однажды помещенных в буфер передачи данных будет выполняться драйвером автоматически, при каждом получении запроса от MASTERа.

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

Пример 1

Пример передачи данных LIN узлом в режиме SLAVE. Контролировать поступление запроса от MASTER и успешную отправку автоматического ответа на него драйвером узла находящегося в режиме SLAVE можно по появлению значения «1» в Регистре успешной отправки данных драйвера LINx. Обновлять данные находящиеся в буфере передачи возможно после его освобождения. Состояние буфера передачи можно отслеживать по значению соответствующего регистра драйвера.

Пример функциональной диаграммы передачи данных LIN узлом в режиме SLAVE.

Пример 2

Пример функциональной диаграммы получения SLAVEом данных от ведущего устройства. Получая сообщение с идентификатором 0х01, содержащее какие-либо данные, контроллер сохраняет первые два байта данных сообщения в D-триггере.

Пример функциональной диаграммы получения SLAVEом данных от ведущего устройства.

Работа контроллера в режиме MULTISLAVE

Работая в режиме MULTISLAVE, каждый интерфейс LIN контроллера может выступать в качестве нескольких (максимум восьми) узлов сети LIN, т.е. отвечать на запросы MASTERa по нескольким ID.

Переход драйвера соответствующего интерфейса LIN в режим MULTISLAVE осуществляется автоматически при заполнении данными дополнительных буферов LINx SLAVE.

При получении от MASTERa запроса на получение данных от узла LIN-сети, идентификатор которого присвоен одному из дополнительных буферов LINx SLAVE, данные будут переданы автоматически, асинхронно с работой функциональной диаграммы.

Информация об успешной отправке данных из дополнительных буферов LINx SLAVE доступна пользователю через «Регистр флагов отправки данных дополнительных буферов LINx SLAVE».

Заполнение данными дополнительных буферов LINx SLAVE происходит через общие для всех буферов регистры: «Регистр начала передачи LINx», «Регистр сообщения передачи LINx LEN», «Регистр сообщения передачи LINx ID» и регистры «Регистр сообщения передачи LINx Dy:Dz».

При этом данные и ID сообщения помещаются в тот буфер, номер которого (от 0 до 7) установлен в «Регистре номера дополнительного буфера передачи LINх SLAVE» на момент записи в «Регистр начала передачи LINх» значения «1».

Пример работы контроллера в режиме MULTISLAVE, в котором после подачи питания выполняется заполнение и постоянное обновление 4х дополнительных буферов передачи LIN1 SLAVE. Заполнение буферов выполняется последовательно, по одному на каждом цикле выполнения диаграммы:

Пример работы контроллера в режиме MULTISLAVE.

Фактически, работа интерфейса LIN в режиме SLAVE представляет собой работу в режиме MULTISLAVE с одним задействованным буфером передачи - буфером №0.

Режим экономии энергии (режим пониженного энергопотребления)

Для экономии энергии спецификацией LIN предусмотрена возможность перехода всех узлов сети LIN в режим пониженного энергопотребления. Чаще всего такой переход инициируется ведущим устройством путем отправки соответствующего сообщения в шину либо осуществляется ведомыми устройствами самостоятельно при отсутствии активности на шине в течение определенного интервала времени. Выход из режима сна может быть инициирован любым узлом шины. MASTER-узел инициирует пробуждение шины обычным началом опроса SLAVE-узлов. Пробуждение же по инициативе SLAVE-узла, осуществляется кратковременной установкой на линии потенциала «GND».

В драйвере LIN контроллеров CANNY 7 для пробуждения шины MASTER-устройству достаточно начать передачу данных или запросов ведомым устройствам. SLAVE-узлы отправляют запрос на пробуждение шины передачей сообщения с любым идентификатором, но имеющим нулевую длину, т. е. «Регистр сообщения передачи LINх LEN» = 0.

СМОТРИ ТАКЖЕ