CAN-200  1.4.0
Библиотека для работы с платами CAN-200PC, CAN-200MP, CAN-200PC104, CAN-200PCI, CAN-200-104PCI и CAN-200PCIe

Библиотека функций предназначена для предоставления доступа к ресурсам плат серии CAN-200PC, CAN-200MP, CAN-200PC104, CAN-200PCI, CAN-200-104PCI и CAN-200PCIe.

Условия работы

Установленное оборудование:

Программное обеспечение:

Поддерживаемые операционные системы:

Поддерживаемые платы:

Платы серии CAN-200 содержат два (CAN-200PC, CAN-200MP, CAN-200PC104, CAN-200PCI и CAN-200PCIe) или четыре (CAN-200-104PCI) полностью независимых CAN-канала. Каждый CAN-канал построен на CAN-контроллере PCA82C200 фирмы Philips. Этот CAN-контроллер поддерживает на аппаратном уровне обмен данными по протоколу CAN 2.0 part A. В 2002 году CAN-контроллер PCA82C200 снят с производства и в качестве его замены на платы серии CAN-200 устанавливается CAN-контроллер SJA1000, поддерживающий (в режиме PeliCAN) обмен данными по протоколу CAN 2.0 part B active. Этот CAN-контроллер имеет два режима функционирования: BasicCAN и PeliCAN.

Драйвер плат CAN-200

Драйвер плат CAN-200 представляет собой исполняемый файл.
Запуск драйвера осуществляется командой ./can200 [-a base_porta1[,base_porta2...] –b base_portb1[,base_portb2...] –i interrupt1[,interrupt2...]] [-p priority] [-n counter] [-r], где
base_porta1, base_porta2... – базовые адреса канала 1 для плат CAN-200PC, CAN-200MP, CAN-200PC104 (до 10 штук);
base_portb1, base_portb2... – базовые адреса канала 2 для плат CAN-200PC, CAN-200MP, CAN-200PC104 (до 10 штук);
interrupt1, interrupt2... – номера прерываний для плат CAN-200PC, CAN-200MP, CAN-200PC104 (до 10 штук);
priority – приоритет потоков обслуживающих прерывания (по умолчанию – 150);
counter - количество попыток выдачи каждого кадра при программном повторе выдачи (по умолчанию - 128);
флаг r позволяет настроить выдачу кадров с аппаратным повтором.

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

При использовании драйвера для плат CAN-200PC, CAN-200MP и CAN-200PC104 обязательно должны указываться параметры базовых портов и номера прерываний для каждой из плат (устанавливаются перемычками на платах). Платы CAN-200PCI, CAN-200-104PCI и CAN-200PCIe настраиваются автоматически. Драйвер поддерживает до 10 плат серии CAN-200. При работе драйвер создает в каталоге /dev файлы вида can200_n (по два или четыре файла на каждую плату). Каждый такой файл представляет собой один канал платы серии CAN-200.

Основы использования библиотеки
  1. Открыть требуемую плату для работы
    int hCan;
    hCan = open(file, O_RDWR); // или hCan = open(file, O_RDWR | O_NONBLOCK);
    if (-1 == hCan)
    {
    // Обработка ошибки
    }
    Указание флага O_NONBLOCK в вызове функции open позволяет открыть плату в неблокирующем режиме.
  2. Установить требуемую скорость и режим обмена по шине CAN
    result = CAN200_SetWorkMode(hCan, PeliCAN);
    if (EOK != result)
    {
    // Обработка ошибки
    if (EOK != result)
    {
    // Обработка ошибки
    }
  3. Установить фильтр для приема кадров
    // Разрешаем прием всех кадров
    result = CAN200_P_SetFilter(hCan, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff);
    if (EOK != result)
    {
    // Обработка ошибки
    }
  4. Разрешить работу платы
    // Разрешаем работу платы
    result = CAN200_SetDriverMode(hCan);
    if (EOK != result)
    {
    // Обработка ошибки
    }
  5. С использованием функций
    read, write, select
    организовать прием и выдачу CAN кадров.
    Поведение функций read и write отличается в зависимости от наличия флага O_NONBLOCK при открытии платы.
    Функция read в блокирующем режиме (плата открыта без указания флага O_NONBLOCK) будет ожидать приема указанного пользователем кол-ва CAN пакетов. Возврат из функции возможен в двух случаях: при приеме указанного пользователем кол-ва кадров или при переходе платы в режим BUS-OFF.
    В неблокирующем режиме (плата открыта с указанием флага O_NONBLOCK) функция read вернет столько кадров, сколько есть в буфере приема (но не более чем запросил пользователь). Если в буфере приема нет данных по функция вернет 0.
    Функция write в блокирующем режиме поставит указанное пользователем кол-во CAN кадров в очередь выдачи и будет ожидать окончания их выдачи. Возврат из функции возможен в двух случаях: после окончания выдачи всех переданных ей кадров или при переходе платы в режим BUS-OFF.
    В неблокирующем режиме функция write поставит указанное пользователем кол-во CAN кадров в очередь выдачи и вернет управление не ожидаю окончания выдачи. Для определения окончания выдачи можно использовать функцию CAN200_GetTransmitStatus.
    При попытке выдать следующую порцию данных (в неблокирующем режиме) до окончания выдачи предыдущей функция write вернет код ошибки EAGAIN.
  6. После окончания работы закрыть плату
    result = close(hCan);
    if (0 != result)
    {
    // Обработка ошибки
    }

CAN-200 documentation. Copyright (c) 2012 - 2017 Elcus Corporation. All rights reserved.