EEPROM тачскрина I2C
- Войдите на сайт для отправки комментариев
Пнд, 12/01/2015 - 10:00
У меня EEPROM контроллер FT5316 с интерфейсом i2c slave mode.
По спецификации, я должен отправить 6бит адреса, затем еще бит - флаг чтения/записи.
Нашел простой способ читать с девайса данные:
#include <Wire.h> void setup() { Wire.begin(); // join i2c bus (address optional for master) Serial.begin(9600); // start serial for output } int i=56; void loop() { //Serial.print(i); //Serial.print(": "); Wire.requestFrom(i, 64); // request 64 bytes from slave device int r=0; while(Wire.available()) // slave may send less than requested { r++; char c = Wire.read(); // receive a byte as character Serial.print(c,HEX); // print the character } if(r>0)Serial.println(" "); delay(1000); }
Где 56 - адрес, найденный перебором.
Этот код выдает 16 нулевых байт. Вот мне не понятно, реальные ли это данные..
Даташит здесь: http://wenku.baidu.com/view/51ad225c69eae009581becb8.html
Для поиска устройств на шине загугли i2cscanner ;)
Для того, чтобы что-то прочитать, попробуй туда что-то записать для начала.
Radjah,
Загуглил, прогоню еще=)
Дело в том, что ЕЕПРОМ этот уже был прошит неверной прошивкой, от чего сам тач софтварно сдох.
Поэтому хотелось бы сделать дамп для начала того, что там есть..
Да, кажется, нужно сделать Wire.write туда тех битов, которые контроллеру нужны, а затем уже читать=)
В общем, буду пробовать=)
Сделал так:
Все равно читаются нули, хотя пин WAKE замыкал как на землю, так и на V+
А точно с нулевого адреса чтение производить?
Эм..по идее адресация же с нуля идет?
Можно попробовать и пройтись по адресам.
В даташите про адрес написано, что: Slave address A[6:0]: address bits are identical to those of I2CADDR [7:1] register.
Здесь даташит похожего чипа, рисунки не искажены: http://www.displayfuture.com/Display/datasheet/controller/FT6x06.pdf
Проверил сейчас правильность подключения SDA/SCL, все верно, только при текущем подключении находит устройство:
Вывел дамп регистров после записи в них - одни нули, как и было..использовал внутренности библиотеки, что выложил выше..
А есть ли способ замерить уровни сигнала с линии I2C, чтобы понять, достаточен ли он для общения с устройством в данном случае?
Возможно уровень низкий и не проскакивает как HIGH/LOW, поэтому и не происходит чтение/запись?
Не хочется верить в то, что попрощался с тачем..тач от смарта, восстановить хочется..
По уму надо осциллографом в линии потукать, чтобы убедиться, что устройство вообще что-то отвечает на запросы.
Вот его нет к сожалению..можно конечно вторую arduino присабачить с дисплеем, замутить скетч с замером импульсов, только это же надо по длительности определяться как-то..
Заказал конвертер уровней с 5 до 3v3, попробую через него.
У меня pro mini аналог, номинальное 5v, поэтому использовать на поддержке 3.3 вольтами не есть гуд.
Кстати, ACK же читает, значит согласовыватьать и не нужно=)
Только пока не понял, почему все-таки не выходит записать-прочитать записанные значения..
Сделал программное включение "по мануалу", история та же..
Это я уже дергать пин WAKE начал..он оказывается работает как вход и как выход..думал уже, что необходимо ждать с этого пина сигнала на прерывание и читать с контроллера данные только в этот момент, но посмотрев мануалы по привязке контроля прерывания к пину понял, что нужно использовать пины 2 и 3, а у меня он на 4-м висит, перевтыкать не стал, пора было спать=)
Но не думаю, что реализация такой штуки помогла бы в решении проблемы, только появились бы новвые=)
Написал второй раз в FocalTech, может сейчас ответят..
FocalTech молчат, у них мылоящик поломался =(
Решение
http://pastebin.com/YFhxnZ2A
Некропост: решил описать, как всё было. https://mikhail-yudin.ru/blog/hardware/proshivka-touchscreen-ft5316