can4linux - это драйвер устройства CAN Linux-Kernel с открытым исходным кодом . Разработка началась в середине 1990-х годов для автономного чипа контроллера CAN Philips 82C200 на плате ISA AT-CAN-MINI. В 1995 году была создана первая версия для использования CAN-шины с Linux для автоматизации лабораторий в рамках проекта Linux Lab Project в FU Berlin .
Растущее распространение технологии полевой шины CAN для автоматизации, особенно во встроенных устройствах, и рост Linux в этой области приводят к растущему значению драйверов устройств как основы для протоколов CAN более высокого уровня, таких как CANopen , J1939 и DeviceNet .
Помимо NXP SJA1000 как преемника первого поддерживаемого CAN-контроллера Philips 82C200 и Intel 82527, с 2005 года активизировались разработки мощных микроконтроллеров со встроенными CAN-контроллерами, способными работать под операционной системой Linux. Процессоры ColdFire [1] или модели ARM от ATMEL [2] и Freescale [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]
/ * простой пример приложения CAN * * используется в статье Википедии о can4linux * / #include #include #include #include int main ( int argc , char ** argv ) { int fd ; canmsg_t frame ; / * open (), битрейт определяется параметрами в proc / sys / dev / Can * / fd = open ( "/ dev / can0" , O_RDWR ); рамка . id = 100 ; рамка . длина = 2 ; рамка . данные [ 0 ] = 5 ; рамка . данные [ 1 ] = 0 ; написать ( fd , & frame , 1 ); / *! count - это количество кадров, а не байт * / читать ( fd , & frame , 1 ); / *! count - это количество кадров, а не байт * / printf ( "получен CAN Frame Id% ld, DLC =% d \ n " , frame . id , frame . length ); возврат 0 ; }
can4linux может быть скомпилирован таким образом, чтобы позволить нескольким процессам иметь доступ к одному и тому же аппаратному обеспечению CAN-контроллера для чтения и записи кадров по CAN-шине. Помимо реального приложения, к шине могут получить доступ другие процессы, такие как регистраторы данных или другие процессы диагностики.
Рекомендации
- ^ Freescale ColdFire
- ^ ATMEL SAM9263
- ^ Freescale i.MX35 Familie [ постоянная мертвая ссылка ]
- ^ Автономный CAN MCP2515
- ^ Сайт проекта can4linux
- ^ Спецификация CAN FD, заархивированная 22 августа 2013 г., в Wayback Machine (PDF; 314 kB)
- ^ Документ конференции CAN FD Архивировано 2012-11-13 в Вайбак Machine (PDF, 624 кБ)
- ^ Online can4linux-examples Архивировано 28 июня 2018 г. на Wayback Machine