К SAM9XE512 подключен внешний измеритель по SPI. От измерителя, так же идёт сигнал аппаратного прерывания. Нужно в драйвере забирать данные, записывая их в буфер , причём измеритль является мастером на шине.
Когда прерывание сработает, нужно выдавать данные наружу в userspace. А userspace application уже будет писать данные в файл.
Как написать такое с нуля? возможно, где-то есть примеры?
Я смотрел в сторону IIO-драйвера на примере ADE7758(из коробки), там для заполнения буфера используется триггер. Как это понять? Что есть триггер в контексте IIO?
более подробно опишу задачу:
Измеритель соединём с хостом через I2C, SPI, и линию прерывания.
каждые 0.2 секунды нужно считывать по I2C регистры из внешнего устройства(измеритель), и записывать в файл, как только приходит сигнал прерывания нужно через драйвер считать данные из буфера драйвера SPI, куда данные записываются непрерывно каждые 125 микросекунд.
Так вот обработку прерывания и запросы по I2C я хочу сделать в userspace (разумеется обращаясь к I2C через драйвер, а вот прерывание обрабатывать как простой сигнал GPIO(кнопка)).
А вот буфер, принимаемых данных по SPI сделать в драйвере (125мкс - слишком быстро для userspace).
Такое сработает?
и как реализовать такой буфер, запись в который осуществляестя на уровне ядра, а чтение из userspace? буфер должен быть циклический
там про обычные средства Linux статья, еше раз повторю - нет в Linux из коробки slave-режима, все с нуля придется писать, либо вы просто неподумавши написали про мастера у измерителя и он на самом деле обычный slave.
спасибо, но там действительно мастер в устройтсве. Ладно, на счёт SPI вопросы закрыт.
А как реализуется буфер? Чтобы читать его из пространства ядра в пространство пользователя? не поможете советом или ссылкой на полезную статью.