2013-11-20 2 views
4

Я заинтересован в работе с устройствами SPI, доступными в Linux. У меня есть специальный контроллер, который поддерживает SPI как в главном, так и в ведомом режиме. Мне нужно настроить контроллер SPI в ведомом режиме.Ядро Linux Контроллер как подчиненный SPI

Мой вопрос: поддерживает ли фрейм Linux поддержку SPI-подчиненных? Я получаю асинхронные данные на шине SPI, я должен прочитать эти данные и обработать их, а затем отправить обратно команду.

ответ

3

Нет, Linux не поддерживает работу в качестве ведомого SPI.

От Overview of Linux kernel SPI support:

А "структура spi_device" инкапсулирует мастер-интерфейс на стороне между этими двумя типами водителя. На этом написании Linux не имеет подчиненного интерфейса .

+2

Конечно, вы всегда можете отображать регистры SPI и писать код для slave spi. Таким образом, можно создать настраиваемое устройство, которое является ведомым SPI. Тем не менее, нет никакой общей инфраструктуры, поэтому задача нелегкая. –

2

Два наиболее распространенные примеры реализации ведомого SPI на Linux являются i.MX28 специфичными патчами:

  1. патч Тони Лин доступен на https://community.nxp.com/thread/325404
  2. Марека Вастут доступен на http://www.spinics.net/lists/arm-kernel/msg190860.html

Ishaqe Ahamed опубликовал некоторый код для slave-драйвера SPI для OMAP2 на https://e2e.ti.com/support/embedded/linux/f/354/t/162748, но не опубликовал полный патч.

Возможно, вы можете получить информацию от чип-контроллера Intel Moorestown SPI Slave Controller, размещенного по адресу http://git.yoctoproject.org/cgit/cgit.cgi/meta-extras/plain/recipes-kernel/linux/linux-netbook-2.6.33.2/linux-2.6.34-moorestown-spi-slave-controller-driver-1.1.patch.

Обратите внимание, что все эти примеры были выполнены несколько лет назад и должны быть перенесены на любое новое ядро, которое вы используете. Ни один из примеров не предусматривает рамки кросс-архитектуры для ведомых драйверов SPI.

2

Поддержка режима ведомого SPI была в ядре Linux из версии v4.13-rc1. От SPI Documentation из ядра Linux:

Этот документ (и Linux) поддерживает как ведущий и ведомый стороны SPI взаимодействий.

[...]

А «структура spi_device» инкапсулирует контроллер интерфейс на стороне между этими двумя типами драйверов.

[...]

/sys/devices/.../CTLR/slave ... виртуальный файл для (ООН), регистрирующей ведомое устройство для ведомого контроллера SPI.

Запись имени драйвера ведомого обработчика SPI в этот файл регистрирует ведомое устройство; запись "(null)" отменяет ведомое устройство.

Чтение из этого файла показывает имя подчиненного устройства («(null)», если оно не зарегистрировано).

/sys/class/spi_slave/spiB ...symlink (или фактический узел устройства) к логическому узлу, который может содержать состояние класса для ведомого контроллера SPI на шине «B». При регистрации здесь присутствует одно устройство spiB. *, Возможно разделение физического сегмента шины SPI с другими подчиненными устройствами SPI.

У меня нет примеров кода C++/C для поддержки этого.

Смежные вопросы