Добрый день.
Сейчас на плате SK-AT91SAM9XE512KE экспериментируем с шиной SPI и возникла проблема c чтением данных.
Мы запускает spidev_test данные через SPI1 выводятся. Однако когда соединяем MOSI и MISO оказывается, что MISO притянут к питанию и сигнал с MOSI подсаживается. Соответственно данные в SPI1 не читаются. SPI0 работает нормально.
Кроме того, некоторое время после загрузки Linux на линии MISO присутствует периодический сигнал из трех импульсов.
Мы предполагаем, что этот сигнал формирует сам контроллер, так как в соответствии со схемой платы больше к этой линии ничего не подключено.
Соответственно вопрос. Что нужно сделать в настройках ядра, чтобы освободить линию MISO для работы в качестве SPI?
Может быть кто-нибудь уже сталкивался с подобной проблемой? Заранее благодарен за помощь.
посмотрите по эл.схеме как зовется "подозрительный" пин, потом проверьте файл борды - может там его кто-то инициализирует. а также проверьте файл *devices к плате..
напишите примитивную прожку с выводом текущего статуса этого пина..
пином можно "подрыгать" на светодиод или осцил или запрограммировать на вход и проконтролировать работоспособность..
в свете недавних открытий по изменению адресов регистров для PTT фирмой Атмел, может они и тут чего накрутили - читайте свежий даташит и еррата - и проверяйте правильность инита SPI1..
я запускал на 9260 (почти близнец) оба канала SPI - все работало..
Проблема заключается в том, что другой драйвер может перехватить этот вывод.
Оказалось что если включены драйверы LCD, то вывод SPI1_MISO переключается на периферию B. При этом этот вывод конфигурируется как выход и управляется таймером. Также в периферии В включается контроллер ISI, который и работает с LCD.
Для того чтобы работать с выводом SPI1_MISO нужно в menuconfig /Device Drivers/Graphics support/ отключить Support for frame buffer devices. Возможно потребуется отключить Touchscreens в /Device Drivers/Input device support.
я не могу угадать вашу архитектуру железа, но знаю что у хе512(9260) нет контроллера LCD, т.е. либо вывод через GPIO на гребенку (удобно занять порт совпадающий с ISI), или SPI, или I2C
если есть желание оставить работающий фреймбуфер, то надо проследить кто и как интит пины, например для управления подсветкой LCD
в случае драйвера тачскрина по шине SPI, он (драйвер) может запросто занимать пины SPI1 под себя и если "позарез" требуется SPI1 для опытов, то тачскрин относительно легко пересаживается на канал SPI0
попробовать не использовать пин (должен быть такой режим при ините таймера) или использовать альтернативный (если есть свободный)..
Проблема больше в том что у а atmel пины используются без запроса на возможность их использования, у того же imx233 перед программированием функций пинов присутствует запрос gpio_request который исключает переопределение их ф-ций если до этого данный пин был задействован в другой части ядра.