Can4linux
can4linux — это с открытым исходным кодом CAN Linux-Kernel драйвер устройства . В середине 1990-х годов началась разработка автономного чипа CAN-контроллера Philips 82C200 на плате ISA AT-CAN-MINI. В 1995 году была создана первая версия для использования CAN-шины с Linux для автоматизации лабораторий в рамках проекта Linux Lab Project в Берлинском университете .
полевой шины CAN Растущее распространение технологии для автоматизации, особенно во встроенных устройствах, и рост Linux в этой области приводят к растущей важности драйверов устройств как основы для протоколов CAN более высокого уровня, таких как CANopen , J1939 и DeviceNet .
Помимо NXP SJA1000 как преемника первого поддерживаемого CAN-контроллера Philips 82C200 и Intel 82527, с 2005 года активизировалась разработка мощных микроконтроллеров со встроенными CAN-контроллерами, способными работать под управлением операционной системы Linux. Примером этой разработки служат решения Freescale. Процессоры ColdFire [1] или модели ARM от ATMEL [2] и Фрискейл [3] а также автономный CAN-контроллер MCP2515, [4] подключен через шину SPI . Список поддерживаемых CAN-контроллеров доступен на сайте проекта can4linux. [5]
В последней версии реализован виртуальный режим CAN, который позволяет приложениям взаимодействовать без аппаратного обеспечения CAN, но только с использованием уровня программного обеспечения драйвера устройства . Этот режим уже включает поддержку нового формата кадров CAN под названием CAN FD. [6] [7] что позволяет длину кадра данных до 64 байт.
Использование
[ редактировать ]Прикладное программное обеспечение открывает дескриптор устройства CAN и возвращает дескриптор файла. Используя этот файловый дескриптор, стандартные функции операционной системы, такие как read()
и write()
используются для обмена кадрами CAN с другими узлами CAN на шине CAN.
Следующий код представляет собой пример, который помещает кадр CAN на шину, а затем ожидает кадра CAN, переданного другим узлом CAN. Дополнительные примеры доступны на сайте проекта can4linux. [8]
/* simple CAN application example
*
* used for the Wikipedia article on can4linux
*/
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <can4linux.h>
int main(int argc,char **argv)
{
int fd;
canmsg_t frame;
/* open(),
bit rate comes from parameters at proc/sys/dev/Can */
fd = open("/dev/can0", O_RDWR);
frame.id = 100;
frame.length = 2;
frame.data[0] = 5;
frame.data[1] = 0;
write(fd, &frame, 1); /* ! count is number of frames, not byte */
read(fd, &frame, 1); /* ! count is number of frames, not byte */
printf("received CAN Frame Id %ld, DLC=%d\n", frame.id, frame.length);
return 0;
}
can4linux можно скомпилировать таким образом, чтобы позволить нескольким процессам иметь доступ к одному и тому же аппаратному обеспечению контроллера CAN для чтения и записи кадров на шине CAN. Помимо реального приложения, к шине могут обращаться и другие процессы, такие как регистраторы данных или другие процессы диагностики.
Ссылки
[ редактировать ]- ^ Freescale ColdFire
- ^ АТМЕЛЬ SAM9263
- ^ Семейство Freescale i.MX35 [ постоянная мертвая ссылка ]
- ^ Автономный CAN MCP2515
- ^ сайт проекта can4linux
- ^ Спецификация CAN FD, заархивированная 22 августа 2013 г. на Wayback Machine (PDF; 314 КБ).
- ^ Документ конференции CAN FD. Архивировано 13 ноября 2012 г. в Wayback Machine (PDF; 624 КБ).
- ^ Онлайн -примеры can4linux, заархивированные 28 июня 2018 г. на Wayback Machine.