Перейти к содержанию
    

Linux программирование

допустим в системе есть

\dev\SPIdev0

как в контектсе Си будет выглядеть запрос и обмен по устройству SPI?

можно ли применить функции работы с файлами из стандартной библиотеки, если SPIdev0 - это файл?

требуется организовать в пользовательском приложении связь по SPI с подчинённым устройством в приложении

незнаю как подступиться

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

незнаю как подступиться

 

В первую очередь - смотреть документацию

http://lxr.free-electrons.com/source/Docum...tion/spi/spidev

http://lxr.free-electrons.com/source/Docum...pi/spidev_fdx.c

http://lxr.free-electrons.com/source/Docum...i/spidev_test.c

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

допустим в системе есть

\dev\SPIdev0

Во-первых, скорее всего имеется в виду /dev/spidevB.X,

где B - номер шины, X - номер Chip-Select'а.

как в контектсе Си будет выглядеть запрос и обмен по устройству SPI?

Если требуетсмя half-duplex обмен данными, то тупо read()/write() из файла устройства. Если нужен full-duplex обмен данными, то это придётся делать через соответсвующий ioctl(). Ссылки на примеры выше уже привели.

можно ли применить функции работы с файлами из стандартной библиотеки, если SPIdev0 - это файл?

требуется организовать в пользовательском приложении связь по SPI с подчинённым устройством в приложении

незнаю как подступиться

Правильный метод - написать модуль ядра, который будет предоставлять userspace прриложению интерфейс через атрибуты sysfs или символьное устройство. Городить огород через spidev не очень светлая мысль, а если понадобится прерывание обрабатывать или GPIO дёргать? Будете /dev/mem мучать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во-первых, скорее всего имеется в виду /dev/spidevB.X,

где B - номер шины, X - номер Chip-Select'а.

 

Если требуетсмя half-duplex обмен данными, то тупо read()/write() из файла устройства. Если нужен full-duplex обмен данными, то это придётся делать через соответсвующий ioctl(). Ссылки на примеры выше уже привели.

 

Правильный метод - написать модуль ядра, который будет предоставлять userspace прриложению интерфейс через атрибуты sysfs или символьное устройство. Городить огород через spidev не очень светлая мысль, а если понадобится прерывание обрабатывать или GPIO дёргать? Будете /dev/mem мучать?

Интересно, можно подробнее об этом, что такое sysfs ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрите в исходниках Documentation/filesystems/sysfs.txt или поиском в гугл

Если коротко, то это виртуалньая файловая система, с помощью которой из userspace можно получить доступ к интерфейсам в ядре линукс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

допустим в системе есть

\dev\SPIdev0

как в контектсе Си будет выглядеть запрос и обмен по устройству SPI?

можно ли применить функции работы с файлами из стандартной библиотеки, если SPIdev0 - это файл?

требуется организовать в пользовательском приложении связь по SPI с подчинённым устройством в приложении

незнаю как подступиться

Стандартно: через системные вызовы : open("/devspi"), ioctl("/devspi"), read("/devspi"), write("/devspi"), close("/devspi"), select("/devspi")

Все, что пишется ф-ей по write-: уходит в spi

Все, что читается по read- ,берется из буфера драйвера (ранее пришло из spi)

select("/devspi") - ожидание прихода данных по spi

можно организовать ввод/вывод не read()/write()?, а через ioctl()

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если кому интересно, можете почитать мои старые статьи на эту тему:

http://habrahabr.ru/blogs/linux/123145/

http://habrahabr.ru/blogs/linux/123266/

Может содержать некоторые ошибки, ибо когда писал, только начинал вникать в эту тему, но в целом понимание основных структур давать должно.

Что касается прриведённого там примера драйвера, то там для "полного счастья" следует все совместно используемые данные выносить в структуру с общей блокировкой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильный метод - написать модуль ядра, который будет предоставлять userspace прриложению интерфейс через атрибуты sysfs или символьное устройство. Городить огород через spidev не очень светлая мысль, а если понадобится прерывание обрабатывать или GPIO дёргать? Будете /dev/mem мучать?

 

Собственно никто не мешает включить поддержку в ядре gpio в sysfs. Через /dev/spidev можно вполне себе производить первоначальную отладку программы, религия это не запрещает, а в книге по Linux Device Drivers именно этот и описывается как опциональный первоначальный вариант разработки драйвера через userspace, т.к. имеется возможность использовать дебаггер и не перезагружать постоянно модули

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во-первых, скорее всего имеется в виду /dev/spidevB.X,

где B - номер шины, X - номер Chip-Select'а.

 

Если требуетсмя half-duplex обмен данными, то тупо read()/write() из файла устройства. Если нужен full-duplex обмен данными, то это придётся делать через соответсвующий ioctl(). Ссылки на примеры выше уже привели.

 

Правильный метод - написать модуль ядра, который будет предоставлять userspace прриложению интерфейс через атрибуты sysfs или символьное устройство. Городить огород через spidev не очень светлая мысль, а если понадобится прерывание обрабатывать или GPIO дёргать? Будете /dev/mem мучать?

 

"Модули ядра Linux" + с примерами того, что вам надо.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...