реклама на сайте
подробности

 
 
> Проблема с I2C интерфейсом контроллера тачскрина FocalTech FT5306, Нужно увеличить задержку при чтении регистров
Hoodwin
сообщение Jul 10 2014, 20:23
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 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 такой задержки нет, и тач на дисплеях большего размера работает нормально.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Hoodwin
сообщение Jul 11 2014, 07:30
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107



Jury093

Так я ж говорю, все делалось на штатном TI-ном стартер-ките. Поэтому:
1) питание и резисторы там есть и соответствуют параметрам FT5306
2) скорость шины пробовали и 400 и 100 кГц, но в обоих случаях не успевает.
3) Поменять шины i2c мы не можем, у нас уже к этой штатный разъемчик для экрана припаян sm.gif Да и смысла нет
4) Осциллографом смотрели времянки, никаких серьезных косяков в сигналах там нет, даже пуллапы вытягивают сигналы до 3В, прежде чем они снова проседают.

Душить проблему скоростью не хочется, так как тач не мышка, у него на порядок больший объем регистров с данными, особенно при мультитаче.
Естественно, что не хотелось бы увеличивать загрузку шины, и ограничиться точечным воздействием на код.

Даже более конкретно могу спросить.

Вот сейчас, насколько я вижу, чтение регистров в драйвере FT5x06 делается вызовом i2c_transfer, состоящем из двух сообщений. Одно на запись, второе на чтение. Что если я разобью один i2c_transfer на i2c_master_send и i2c_master_recv, поставлю задержку между ними? По идее должно получиться именно оно, с той лишь разницей, что это будет не
S Addr|W REG S Addr|R Data P
а
S Addr|W REG P ... S Addr|R Data P

насколько чревато то, что будет один лишний STOP? С точки зрения протокола I2C?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th August 2025 - 22:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016