Доброго времени суток!
Я пока ещё совсем зелёный новичок во встраиваемом линуксе, для первого знакомства с ним приобрёл SK-MNUC950 и SK-MI0430FT-Plug.
Вопрос такой: как достучаться до тачскрина? На движения подключенной usb-мышки 'cat /dev/mice' реагирует потоком байтов, на касания тачскрина - нет. Если я верно понимаю, нужно собирать ядро с поддержкой драйвера тачскрина. Так ли это? И можно ли, не меняя ядро, поработать с тачскрином на низком уровне непосредственно из приложения? Если да, то как?
Чтобы не плодить темы, сразу задам второй вопрос, насчёт framebuffer'а.
В него прекрасно выводятся как изображения (dd if=img.bin of=/dev/fb0), так и символы (через /dev/vcsa), однако в обоих случаях изображение на экране циклически сдвинуто вниз на 1 пиксель (т. е., например, фоновые цвета знакомест последней строки на 1 пиксель выглядывают сверху), что немного раздражает. Где искать разгадку?
Какой ревизии Ваша плата (указана в верхнем левом углу)?
Если не 1.С, тогда в принципе до тачскрина нет доступа (если самому проводами не навесить), т.к. свободных GPIO у процессора крайне мало на более ранних версиях плат я не подключал ничего к пинам TS контроллера.
Начиная с 1.C, я запараллелил часть GPIO сигналов с другого разъема.
В составе штатного BSP так же нет пока драйвера, но на днях собираюсь этим заняться.
Вобщем, как говорится - приехали ...
Решил настроить штатный драйвер ADS7846 через GPIO SPI, выпросил у товарищей сорцы своих наработок (спасибо rw9uao), подставляю свои линии GPIO в драйвере - не работает.
Как выяснилось, в их варианте, прерывание PENIRQ идет не "штатным" образом, а формируется по IRQ1.
К счастью, в моем варианте подключения для PENIRQ задействован IRQ0, меняю, запускаю - как ни странно, при старте системы отваливается консоль, но сама система грузится успешно и драйвер ADS7846 номинально работает, но реально видимо нужно еще что то с прерываниями докручивать, т.к. через /proc/interrupts количество событий от ADS7846 идет почт и как от системного таймера (хотя PENIRQ свободна) ...
Разбираться дальше не стал, т.к. понял свой принципиальный промах в выборе пинов для GPIO SPI, как оказывается (ттолько сейчас узнал :)) пины GPIO конфигурируются у NUC950 не по битно (как у всех контроллеров-процессоров) а по блочно!
Т.е. например, в моем случае, CLK=MK_P164=GPIO_D8, чтобы сконфигурировать его как GPIO, нужно прописать в MFSEL[7...4] битах 0, но при этом пины SD интефейса так же перейдут в GPIO.
Т.е. как ни крути, придется перекидывать с учетом этого линии GPIO, например, использовать линии AC97.
Паш. там еще вылезла интересность. я тебе закидывал доработку по CS и прямо на плате с экраном потребовалось напаять конденсатор в 15 нф с 16-й ноги ADSки на массу. шлейф длинный, лезет чёрти-чё.
Я видел, там до вольта какая то беготня вылазит (причем на DI), это явно не простая наводка (для этого кабель пятиметровым должен быть), с LPC2478 или AT91SAM9G45 подобного нет, откуда-что, разбираться не стал.
Спасибо за ответы, я даже половину из написанного смог понять :)
Плата у меня ревизии 1.C
Теперь возник вопрос: как мне без драйверов, напрямую из приложения "подёргать за ноги" тот же ADS7846 (кажется, это называется bit-banging)?
На мою попытку сделать что-то наподобие *((volatile unsigned char *)0x...) = ... операционная система ответила "Segmentation Fault", намекнув тем самым, что шалости с доступом к портам ввода-вывода из приложения с ней не пройдут :)
Значит ли это, что мне нужно писать модуль ядра, или всё же есть возможность пообщаться с железом из приложения?
можно и драйвер написать, но это не универсально
тут пробегала статья про мапинг памяти. по мойму она даже в местной вики есть для SAM9200.
Для Вашей платы будет примерно тоже самое
пардон за молчание - жадные немцы с платным инетом :-/
выплываю в Балтику, есть инет - жизнь наладилась :)
как-как.. искать свободные "ненужные" пины и пробовать. в каком-то треде (о мнуке и мио430) описывались подобные неудобства
выбрал паябельные пины, привернул туда тачскрин, при попытке загрузки драйвера отсыхала консоль. вывернулся, припаявшись к 0.65 площадке, т.е. физически сменил пин
зато теперь часы на И2Ц работают, консоль жива и драйвер тача грузится, но не работает ибо неправильный..
я, когда колбасился с аппаратным SPI на мнуке, столкнулся с этой же хренью - расшаренные пины на 2 шины И2Ц и SPI - четко или тот или другой.. если бы пошел хардварный SPI, то навесить программный i2c задача несложная
зы: у меня счас "страдная" пора - в ближайший месяц паяльником помахать не дадут :-/