Dubov 0 28 мая, 2012 Опубликовано 28 мая, 2012 · Жалоба Нужно забирать в драйвере данные по SPI по прерыванию от внешнего устройства. Нашёл классную статью(http://habrahabr.ru/post/123145/), но нигде невстречал примера забора данных по прерыванию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cpl 0 29 мая, 2012 Опубликовано 29 мая, 2012 · Жалоба Нужно забирать в драйвере данные по SPI по прерыванию от внешнего устройства. Нашёл классную статью(http://habrahabr.ru/post/123145/), но нигде невстречал примера забора данных по прерыванию. Что значит по прерыванию ? Из пользовательского пространства нет возможности работать с аппаратурой на прямую, только через драйвер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dubov 0 29 мая, 2012 Опубликовано 29 мая, 2012 · Жалоба Что значит по прерыванию ? Из пользовательского пространства нет возможности работать с аппаратурой на прямую, только через драйвер. вот и я о том же. Вот и задаю вопрос как написать такой драйвер Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dch 0 29 мая, 2012 Опубликовано 29 мая, 2012 · Жалоба В ликусксе 2.6 есть примеры драйверов SPI, например ядно 2.6.x поддерживает SPI для Atmel-овского проца AT91RM9200, в Development Kit от Atmel-а на один из SPI интерфесвов повешена SPI флэш типа AT45DB321/AT45DB642 , которая может использоваться в качестве диска. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dubov 0 30 мая, 2012 Опубликовано 30 мая, 2012 · Жалоба В ликусксе 2.6 есть примеры драйверов SPI, например ядно 2.6.x поддерживает SPI для Atmel-овского проца AT91RM9200, в Development Kit от Atmel-а на один из SPI интерфесвов повешена SPI флэш типа AT45DB321/AT45DB642 , которая может использоваться в качестве диска. но память не посылает сигнал прерывания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 30 мая, 2012 Опубликовано 30 мая, 2012 · Жалоба Что такое "внешнее устройство"? как оно подключено к Linux-устройству? каким образом оно собирается прерывать Linux-устройство? Если я ничего не путаю, то SPI это master-slave интерфейс, и slave не может просто так начать слать мастеру пакеты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dron_Gus 2 31 мая, 2012 Опубликовано 31 мая, 2012 · Жалоба Видимо помимо SPI от устройства к хост-процессору идет еще и сигнал IRQ. Посмотрите, например, как это сделано в drivers/net/can/mcp251x.c . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dubov 0 31 мая, 2012 Опубликовано 31 мая, 2012 · Жалоба Что такое "внешнее устройство"? как оно подключено к Linux-устройству? каким образом оно собирается прерывать Linux-устройство? Если я ничего не путаю, то SPI это master-slave интерфейс, и slave не может просто так начать слать мастеру пакеты. прерывание - это сигнал готовности данных с внешнего АЦП. По этому сигналу мастер забирает данные со слейва. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cpl 0 31 мая, 2012 Опубликовано 31 мая, 2012 · Жалоба прерывание - это сигнал готовности данных с внешнего АЦП. По этому сигналу мастер забирает данные со слейва. Сразу могли бы сказать что и как у вас подключено, а то поди угадай зачем прерывание к SPI??? :laughing: В драйвере устройства заведите обработчик прерывания, в обработчике прерывания считывайте данные с АЦП складывайте в промежуточный буфер например, затем по запросу пользователя отдавайте содержимое буфера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Drozd2 0 31 мая, 2012 Опубликовано 31 мая, 2012 · Жалоба Есть еще вариант вообще не трогать драйвер. Ногу процессора, на которой висит сигнал готовности, объявить входом для кнопки. В пользовательском приложении создать обработчик событий по нажатию на эту кнопку. В нем считывать данные с АЦП. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dubov 0 31 мая, 2012 Опубликовано 31 мая, 2012 · Жалоба Спасибо. Мне очень нужно чтобы драйвер отобразился в /sys/device/platform как это сделать? Хотелось бы пример увидеть или литературу толковую где написано как регистрировать драйвера. Ато читаю рекомендации с сайта Analog Devices: http://wiki.analog.com/resources/tools-sof.../iio-adc/ad7606 и в моей системе вот это появляется: root:/> cd /sys/bus/iio/devices/ root:/sys/bus/iio/devices> ls device0 trigger0 а этого не вижу root:/sys/devices/platform/ad7606-8.0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dron_Gus 2 1 июня, 2012 Опубликовано 1 июня, 2012 · Жалоба В бордовом файле вы делаете platform_add_devices(...) для своего устройства? struct platform_device ...{} для своенго устройства заполнили? Драйвер вкомпилировали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dubov 0 1 июня, 2012 Опубликовано 1 июня, 2012 (изменено) · Жалоба В бордовом файле вы делаете platform_add_devices(...) для своего устройства? struct platform_device ...{} для своенго устройства заполнили? Драйвер вкомпилировали? Я делаю at91_add_device_spi(...), аргументом которого служит указатель на массив структур SPI устройств, где и описаны параметры йстройства(номер шины, чипселект, имя) При всём при этом при инициализации драйвера функция probe проходит нормально, регистрируя драйвер толкьо в /sys/bus/iio/devices Изменено 1 июня, 2012 пользователем Dubov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xor.kruger 0 2 июня, 2012 Опубликовано 2 июня, 2012 · Жалоба Попробуйте указать в своей структуре, в которой "описано" ваше устройство, что то наподобие этого .irq = gpio_to_irq(AT91_PIN_PA31) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dubov 0 2 июня, 2012 Опубликовано 2 июня, 2012 · Жалоба Попробуйте указать в своей структуре, в которой "описано" ваше устройство, что то наподобие этого .irq = gpio_to_irq(AT91_PIN_PA31) с прерыванием разобрался. теперь проблема прописать устройство в /sys/devices/platform/ для инициализации устройства вызывается функция at91_add_device_spi(...), которая вызывает функции: 1) spi_register_board_info(), на входе которой структура с МОИМ устройством 2) platform_device_register(), а она в свою очередь регистрирует только atmel_spi1 в /sys/devices/platform/ при этом на входе platform_device_register() ВСЕГДА: static struct platform_device at91sam9260_spi1_device = { .name = "atmel_spi", .id = 1, .dev = { .dma_mask = &spi_dmamask, .coherent_dma_mask = DMA_BIT_MASK(32), }, .resource = spi1_resources, .num_resources = ARRAY_SIZE(spi1_resources), }; Получается что независимо от того какое устройство я регистрирую в /sys/devices/platform/ будет всегда atmel_spiX НО! На входе at91_add_device_spi(...) у меня структура, где прописано устройство с другим именем (.name = SPI_device) и я никак не могу увидеть его в /sys/devices/platform/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться