This documentation is out of date.
The new version of the documentation is here: https://cannylogic.com/docs |
Difference between revisions of "CANNY 7, LIN Driver"
[unchecked revision] | [unchecked revision] |
(→Driver registers) |
(→Driver registers) |
||
Line 58: | Line 58: | ||
Named constants that represent LIN configuration parameters combination, available to the user in the "LIN Modes" CannyLab constants directory, which can be accessed via function block entry context menu having "constant" type. | Named constants that represent LIN configuration parameters combination, available to the user in the "LIN Modes" CannyLab constants directory, which can be accessed via function block entry context menu having "constant" type. | ||
− | + | LIN driver diagnostic registers. | |
{|border="1" style="border-collapse:collapse;" align="left" width="100%" | {|border="1" style="border-collapse:collapse;" align="left" width="100%" | ||
|- align="center" valign="top" | |- align="center" valign="top" | ||
− | !width="250px"| | + | !width="250px"|Address |
− | ! | + | !Return Values |
|- valign="top" | |- valign="top" | ||
| | | | ||
{|border="0" align="left" | {|border="0" align="left" | ||
|- valign="top" | |- valign="top" | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|LIN1 Overflow Register |
|- valign="top" | |- valign="top" | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|LIN2 Overflow Register |
|} | |} | ||
|valign="top"| | |valign="top"| | ||
Line 76: | Line 76: | ||
|width="70px" style="padding-left:0.5em;"|1 | |width="70px" style="padding-left:0.5em;"|1 | ||
|style="padding-left:0.5em;"|= | |style="padding-left:0.5em;"|= | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|corresponding channel LIN buffer is full; |
|- valign="top" | |- valign="top" | ||
|width="70px" style="padding-left:0.5em;"|0 | |width="70px" style="padding-left:0.5em;"|0 | ||
|style="padding-left:0.5em;"|= | |style="padding-left:0.5em;"|= | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|corresponding channel LIN no buffer overflow detected. |
|} | |} | ||
|- valign="top" | |- valign="top" | ||
Line 86: | Line 86: | ||
{|border="0" align="left" | {|border="0" align="left" | ||
|- valign="top" | |- valign="top" | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|LIN1 Error Register |
|- valign="top" | |- valign="top" | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|LIN2 Error Register |
|} | |} | ||
| | | | ||
Line 95: | Line 95: | ||
|width="70px" style="padding-left:0.5em;"|1 | |width="70px" style="padding-left:0.5em;"|1 | ||
|style="padding-left:0.5em;"|= | |style="padding-left:0.5em;"|= | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|during LIN data reception an error occurred; |
|- valign="top" | |- valign="top" | ||
|width="70px" style="padding-left:0.5em;"|0 | |width="70px" style="padding-left:0.5em;"|0 | ||
|style="padding-left:0.5em;"|= | |style="padding-left:0.5em;"|= | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|the driver is operating normally. |
|} | |} | ||
|- valign="top" | |- valign="top" | ||
Line 105: | Line 105: | ||
{|border="0" align="left" | {|border="0" align="left" | ||
|- valign="top" | |- valign="top" | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|LIN1 Ready to Send Register |
|- valign="top" | |- valign="top" | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|LIN2 Ready to Send Register |
|} | |} | ||
| | | | ||
Line 114: | Line 114: | ||
|width="70px" style="padding-left:0.5em;"|1 | |width="70px" style="padding-left:0.5em;"|1 | ||
|style="padding-left:0.5em;"|= | |style="padding-left:0.5em;"|= | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|corresponding channel LIN data transmit buffer is free and ready; |
|- valign="top" | |- valign="top" | ||
|width="70px" style="padding-left:0.5em;"|0 | |width="70px" style="padding-left:0.5em;"|0 | ||
|style="padding-left:0.5em;"|= | |style="padding-left:0.5em;"|= | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|LIN driver data transmission buffer is busy. |
|} | |} | ||
|- valign="top" | |- valign="top" | ||
Line 124: | Line 124: | ||
{|border="0" align="left" | {|border="0" align="left" | ||
|- valign="top" | |- valign="top" | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|LIN1 Data Delivered Register |
|- valign="top" | |- valign="top" | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|LIN2 Data Delivered Register |
|} | |} | ||
| | | | ||
Line 133: | Line 133: | ||
|width="70px" style="padding-left:0.5em;"|1 | |width="70px" style="padding-left:0.5em;"|1 | ||
|style="padding-left:0.5em;"|= | |style="padding-left:0.5em;"|= | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|in SLAVE mode, successful data transfer indication from the buffer of corresponding channel LIN, in response to MASTER node request; |
|- valign="top" | |- valign="top" | ||
|width="70px" style="padding-left:0.5em;"|0 | |width="70px" style="padding-left:0.5em;"|0 | ||
|style="padding-left:0.5em;"|= | |style="padding-left:0.5em;"|= | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|when the corresponding LIN channel is in a SLAVE mode, there were no MASTER node request received. |
|} | |} | ||
|} | |} | ||
− | + | LIN Receive Registers. | |
{|border="1" style="border-collapse:collapse;" align="left" width="100%" | {|border="1" style="border-collapse:collapse;" align="left" width="100%" | ||
|- align="center" valign="top" | |- align="center" valign="top" | ||
− | !width="250px"| | + | !width="250px"|Address |
− | ! | + | !Return Values |
|- valign="top" | |- valign="top" | ||
| | | |
Revision as of 05:18, 15 January 2016
Contents
General description
Two of eleven input-output channels of CANNY 7, which can be placed under control of UART/RS-232 driver (Channel №9 and №10), can be used to organize data reception and transmission as two independent LIN driver channels.
LIN driver channels can be connect both together and individually, have individual baud rate settings , pull-up line and bus node type- MASTER or SLAVE.
LIN driver in its operation uses the resources of controller channels, but has a higher priority than discrete input-output driver. Thus, upon LIN driver activation, for the involved channels in its operation, changing values in registers associated controllers' discrete input-output driver will be ignored.
Driver registers
The following describes the acceptable LIN driver operation control registers values.
LIN driver configuration Registers allows to set up the controller as a LIN bus node:
Address | Expected values | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
|
Channel configuration for operation in this mode is determined by a constant, which is a combination of parameters: protocol version , baud rate, operation mode and the availability of internal channel pull-up.
Parameter | The list of acceptable values |
---|---|
LIN protocol version | 1.3; 2.0 |
baud rate | 2400; 9600; 19200 |
Operation mode | MASTER; SLAVE |
Pull-up | plus; float |
Named constants that represent LIN configuration parameters combination, available to the user in the "LIN Modes" CannyLab constants directory, which can be accessed via function block entry context menu having "constant" type.
LIN driver diagnostic registers.
Address | Return Values | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
| ||||||||
|
| ||||||||
|
| ||||||||
|
|
LIN Receive Registers.
Address | Return Values | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||
|
| |||||||||
|
| |||||||||
|
| |||||||||
|
|
Примечание: | В регистре идентификатора принятого сообщения LIN отображаются только младшие 6 бит идентификатора: 4 бита адреса устройства и 2 два бита использовавшихся в LIN версии 1.1 для кодирования длины сообщения, а в более поздних версиях расширяющие адрес. 10 старших бит регистра идентификатора принятого сообщения LIN всегда равны нулю. |
Регистры передачи драйвера LIN.
Адрес | Ожидаемые значения | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||
|
| |||||||||
|
| |||||||||
|
|
Примечание: | При передаче LIN-сообщения, драйвер отбрасывает все кроме младших 6 бит значения установленного в регистре идентификатора LIN-сообщения, автоматически генерирует два бита четности и дополняет ими идентификатор, в соответствие с требованиями стандарта. |
Примечание: | При работе в сетях LIN версии ниже 1.3, будьте внимательны при формировании исходящих сообщений. Драйвер позволяет использовать комбинации значений длины и идентификатора передаваемого сообщения недопустимые в этом стандарте. |
Работа контроллера в режиме MASTER
Для перевода канала драйвера LIN в режим MASTER, необходимо в соответствующий каналу драйвера адрес «Регистр конфигурации LINx» скопировать значение константы, соответствующей выбранному режиму работы.
Для получения MASTERом данных от SLAVE-узла, необходимо передать в шину LIN соответствующий запрос: отправить заголовок сообщения, содержащий идентификатор ведомого узла, от которого запрашиваются данные. Длина сообщения передачи LIN LEN должна быть установлена равной нулю, в регистр старта передачи должно быть записано ненулевое значение. При получении ответа от ведомого устройства, он будет помещен в Регистры принятого сообщения соответствующего канала драйвера LIN с одновременной установкой признака в Регистре наличия принятых данных LIN этого канала.
Пример функциональной диаграммы для получения MASTERом данных от SLAVE-устройства. MASTER каждые 100мс отправляет в шину запрос на получение данных от ведомого устройства с идентификатором 0х02. Получив ответ, контроллер запоминает 2 первых байта данных, в D-триггере.
Для передачи данных в режиме MASTER необходимо заполнить регистры идентификатора, и данных передаваемого сообщения LIN, установив при этом в Регистре передаваемого сообщения LIN LEN, значение равное количеству байт данных передаваемого сообщения, которое должно быть больше нуля но меньше девяти. Команда драйверу на отправку сообщения посылается путем установки ненулевого значения в «Регистр начала передачи сообщения LINх», в результате чего, содержимое регистров данных копируется в буфер передачи LIN-сообщения, если он свободен, драйвер немедленно приступит к отправке сообщения.
Примечание: | С целью предотвращения потери данных, перед отправкой нового сообщения LIN рекомендуется убедиться в готовности буфера передачи соответствующего канала драйвера LIN к передаче очередного сообщения, проверив значение в Регистре готовности буфера передачи данных LINx. |
Пример функциональной диаграммы отправки данных в шину LIN ведущим устройством. MASTER каждые 100мс отправляет в шину сообщение с идентификатором 0х01, содержащее 2 байта данных (0х0А и 0х55).
Примечание: | Если в регистре начала передачи сообщения LINх постоянно установлено ненулевое значение, то попытки копирования данных в буфер передачи для отправки сообщения LIN будут предприниматься на каждом цикле выполнения диаграммы. Во избежание переполнения буфера передачи LIN инициируйте начало передачи данных единичными импульсами, используя, например, функциональные блоки детекторов фронта. |
Работа контроллера в режиме SLAVE
Работая в режиме SLAVE, узел сети LIN успешно принимает любые данные передаваемые по сети, но не может сам передавать данные в LIN, не получив на то соответствующего запроса от MASTER.
Для перевода канала контроллера в режим SLAVE, необходимо в соответствующий каналу адрес «Регистр конфигурации LINx» скопировать значение константы, соответствующей выбранному режиму работы.
Для обеспечения успешной отправки данных узлом находящемся в режиме SLAVE по запросу MASTER-узла, необходимо заранее, не дожидаясь запроса, подготовить данные к передаче. Для этого необходимо заполнить все необходимые регистры сообщения передачи драйвера LIN, а именно: регистр идентификатора LIN ID, регистр длины сообщения LIN LEN и разместить передаваемую информацию в регистрах данных LIN. Разрешение на отправку сообщения дается путем установки значения «1» в «Регистр начала передачи сообщения LINх», в результате чего содержимое регистров данных копируется в буфер передачи LIN-сообщения, если он свободен. Отправка однажды помещенных в буфер передачи данных будет выполняться драйвером автоматически, при каждом получении запроса от MASTERа.
Примечание: | Если в регистре начала передачи сообщения LINх постоянно установлено ненулевое значение, то попытки копирования данных в буфер передачи для отправки сообщения LIN будут предприниматься на каждом цикле выполнения диаграммы. Во избежание переполнения буфера передачи LIN инициируйте начало передачи данных единичным импульсом, используя, например, функциональные блоки детекторов фронта. |
Контролировать поступление запроса от MASTER и успешную отправку автоматического ответа на него драйвером узла находящегося в режиме SLAVE можно по появлению значения «1» в Регистре успешной отправки данных драйвера LINx. Обновлять данные находящиеся в буфере передачи возможно после его освобождения. Состояние буфера передачи можно отслеживать по значению соответствующего регистра драйвера.
Пример функциональной диаграммы передачи данных LIN узлом в режиме SLAVE.
Пример функциональной диаграммы получения SLAVEом данных от ведущего устройства. Получая сообщение с идентификатором 0х01, содержащее какие-либо данные, контроллер сохраняет первые два байта данных сообщения в D-триггере.