|
Проблема с I2C интерфейсом контроллера тачскрина FocalTech FT5306, Нужно увеличить задержку при чтении регистров |
|
|
|
Jul 10 2014, 20:23
|
Знающий
   
Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107

|
Вот напоролись тут на следующую проблему. Имеется экран от Newhaven Display с емкостным тачем, основанном на чипе FT5306 от FocalTech. Он отказался работать по I2C в линуксе от TI, поставляемом вместе с стартер китом для AM3359. В процессе разбора полетов выяснилось, что чип немного туповат, и транзакция чтения его регистров на шине I2C вида S Addr|W REG S Addr|R Data P выдает обратно значение адреса регистра REG вместо данных Data. А все потому, что ARM слишком быстро шуршит сигналами, видимо чип (у него внутри 8051 на самом деле) не успевает обработать прерывание у себя там и выставить правильные данные в регистре передачи своего I2C-кора. Когда я переподключил дисплей к микроконтроллеру и стал медленнее сигналы дергать, то все там нормально читается.
В итоге имею такой вопрос. Можно ли научить линукс как-то притормаживать операцию чтения данных после выдачи первой части команды с номером регистра? И если можно, то как? Суть в том, что транзакция на шине состоит из двух частей, и драйвер вызывает ее одним вызовом I2C SMBUS API. Можно наверное попробовать это запатчить в яре, но мне эта идея не очень нравится, так как, по-хорошему, задержка нужна только для вполне конкретного типа i2c клиента, причем я еще даже не знаю точно какая она есть на самом деле. Известно пока, что 100 мкс мало, а 1000 мкс - достаточно. Может быть, можно как-то разбить само операцию на две более примитивные, но неделимые, и между ними вставить задержку? Тогда такой вызов можно будет перенести именно в драйвер для FT5306, и задержка будет только у него.
Еще замечено, что для чипа FT5406 такой задержки нет, и тач на дисплеях большего размера работает нормально.
|
|
|
|
|
 |
Ответов
|
Jul 11 2014, 11:12
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(Hoodwin @ Jul 11 2014, 14:39)  Сейчас рабочая гипотеза, что если на старте FT5306 сигналы /INT и /WAKE не притянуты к питанию, то он не заводится. На ките они подключены к GPIO без пуллапов. А линукс или U-Boot начинает ими рулить со значительной задержкой после старта. Когда передергиваем при уже запущенном всем, то работает. не, гипотезы хороши в астрономии - в случае электроники все должно быть однозначно.. тащим даташит, читаем: 3.5 POWER ON/Reset/Wake Sequence The GPIO such as Wake, INT and I2C should be pulled down to be low before powering on. The signal of waking up should be set to be high after powering on. INT signal will be sent to the host after initializing all parameters and then start to report points to the host.
попробуйте на контакты WAKE и INT навесить резистор 10/100к на gnd.. и в момент инита системы выставить сигнал WAKE в "1", если есть проводок до АРМа.. если нет, то RC цепочку для теста запуска..
|
|
|
|
Сообщений в этой теме
Hoodwin Проблема с I2C интерфейсом контроллера тачскрина FocalTech FT5306 Jul 10 2014, 20:23 Jury093 Цитата(Hoodwin @ Jul 11 2014, 00:23) FT53... Jul 11 2014, 05:53 Hoodwin Jury093
Так я ж говорю, все делалось на штатном T... Jul 11 2014, 07:30 Jury093 Цитата(Hoodwin @ Jul 11 2014, 11:30) Так ... Jul 11 2014, 07:57 Hoodwin Цитатая бы не стал пока трогать ветку i2c шины ядр... Jul 11 2014, 08:05 Jury093 Цитата(Hoodwin @ Jul 11 2014, 12:05) Так ... Jul 11 2014, 08:22 Hoodwin Так вот я и говорю, что оно странно, не работает т... Jul 11 2014, 11:54 Jury093 Цитата(Hoodwin @ Jul 11 2014, 15:54) По ф... Jul 11 2014, 12:28 Hoodwin Цитатаесли с резистором все работает, то оставьте ... Jul 11 2014, 15:55
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|