Доброго дня, All!
Подскажите, как работать с SPI под Linux? Надо будет из программы пару раз обратиться к внешнему устройству. Можно ли обойтись без пересборки ядра, и как обращаться к устройству? Вполне достаточно будет, если можно через внешние утилиты, по типу i2c-tools Ну или через перенаправление на/из устройства. И правильно ли я понял, что SPI3 реализован через "дрыг-нога"?
Поддержка на плате вроде есть, вот для информации, чтобы предметно общаться:
Покопался, чёт как-то сложно пока. Поправьте, если где ошибся.
SPI устройства можно наращивать последовательно, но тогда системе надо знать, сколько байт считать/записать. А задаётся это в структурах, пример по ссылке привели. А значит - надо пересобрать ядро. SPI0 и SPI1 уже заняты, на 0 висит датафлеш, на втором нехилая такая горстка переферии. SPI 3 сделан через GPIO, что тоже имеет свои минусы, хоть и не критичные в моём случае. (мне надо коммутировать неспешно внешние цепи) В любом случае - работать из userspace простыми способами не получится (например, просто подключив в свою программу библиотеки).
Поэтому делать буду на i2c, благо есть и i2c-tools.
Буду признателен, если кинете в меня примерами с описаниями на русском (english читаю, но не свободно).
У каждого канала SPI до 4 слэйвов может быть, а датафлеша на местных платах с 9g45 вообще нет.
к слову i2c (TWI) на атмеловских процессорах не рекомендутся использовать, по умолчанию включена софтовая эмуляция на GPIO, как и в случае 3-го spi-мастера, но с i2c в юзерспейс конечно проще работать без пересборки ядра чем с spi.
Чтобы под себя надостроить SPI придется ядро пересобраать в любом случае (вернее файл board-9g45.c чутка подкорректировать).
А на счет сложности работы - не понятно, что именно сложно? Там три вызова для файлов /dev/spidev*.*- read, write и ioctl, первые два в полудуплексе, последний - в полном. Т.е. работа происходит как с любыми другими файлами.
Я иногда и просто эхом не гнушаюсь слать в spi команды.