PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Программаторы (http://pccar.ru/forumdisplay.php?f=151)
-   -   Программатор контроллеров RTD2660 на базе FT2232H (http://pccar.ru/showthread.php?t=20565)

Alex_St 23.03.2014 14:06

Программатор контроллеров RTD2660 на базе FT2232H
 
Вложений: 3
Предыстория:
Как-то приобрел я себе IPS монитор китайский на базе контроллера RTD2660. Всем хорош, но оказалось, что на нем невозможно отключить синий экран при отсутствии сигнала. Оказалось, что убрать его можно только путем смены прошивки в нем.
В контроллере используется микросхема Flash памяти 25X40. Можно ее выпаивать (или просто к ней подпаяться), и программировать отдельно. А можно программировать через один из трех каналов DDC, которые есть на каждом входе VGA, DVI, HDMI.
Т.к. сразу стало ясно, что одной прошивкой дело не обойдется, то было решено, что выпаивать микросхему - не наш метод. Начал искать программатор для программирования через VGA разъем. Таких оказалось три варианта:
1. Детище человека с ником Postal2, которое имеет созвучное название: Postal2. Работает через LPT порт, и только под 32бит системой. Поэтому на новых компьютерах, увы не работает. А прога очень хорошая и мощная.
2. Китайский LPT программатор. Стоит около 35$, но опять же - только LPT, и только 32бит.
3. Китайский USB программатор. Стоит уже около 80$ (при стоимости контроллера около 40$), поэтому тоже отпал.

Так и не найдя готового решения - возникла мысль - а не сделать ли такое устройство самому на базе чего-то относительно стандартного? Ведь документация на чип есть, и относительно понятно что делать.
К сожалению, разобраться в документации без опыта работы с такими девайсами, оказалось весьма непросто.
К счастью, уважаемый Postal2 любезно поделился своими исходниками для работы с RTD2660, и процесс пошел.

Представляю Вашему вниманию первый результат данной работы.

Программа умеет:
1. Считывать прошивку из флеша. Результат контролируется по контрольной сумме, расчитанной самим чипом.
2. Записывать прошивку в флеш. Результат контролируется так же.
3. Сравнивать контрольную сумму данных в флеше с контрольной суммой данных в файле.
4. Читать данные EDID из контроллера для входа, к которому мы подключены.
5. Посылать в контроллер тестовые команды (только для тех, кто знает что делает).
Все это происходит через разъем VGA контроллера монитора без выпаивания микросхемы памяти.

Программа может использовать любой преобразователь от фирмы FTDI, которые поддерживает режим MPSSE (Multi-Protocol Synchronous Serial Engine). Например, FT232H, FT2232H, FT4232H.
Схема подключения к преобразователю на примере FT2232H:
Вложение 49261

Я для своих целей использую такую платку. В ней подключение происходит к разъему SPI1. Назначение ног на этом разъеме такое:
1 DI (ADBUS1)
2 Vcc (connected to on board 3.3V)
3 SCK (ADBUS0)
4 DO (ADBUS2)
5 CS (ADBUS3)
6 GND
Линии данных на этом разъеме буферированы, и резисторы подтяжки уже присутствуют. Поэтому паять резисторы не нужно. Достаточно только одного диода шоттки и пары разъемов для подключения к плате и к контроллеру монитора.

Вид окна программатора:
Вложение 35556

Назначение кнопок:
Open - открыть порт FT2232H
Close - закрыть порт FT2232H
EnterISP - перевести чип RTD2660 в режим внутрисхемного программирования.
Reset - Выйти из режима внутрисхемного программирования. При этом произойдет сброс контроллера RTD2660.
Find Devices - поиск устройств на шине. Программа сканирует шину и выводит список ID устройств, которые отозвались.
Варианты ID:
37 (6E) - устройство DDC-CI для управления монитором
4A (94) - устройство для внутрисхемного программирования RTD2660
50 (A0) - устройство, предоставляющее EDID информацию в компьютер
Chip size - размер Flash памяти чипа 2660 в байтах.
Read chip - Прочитать содержимое Flash памяти RTD2660. При нажатии на кнопку надо указать куда сохранить результат. По окончании чтения программатор сравнит CRC данных в файле с CRC данных в Flash-памяти RTD2660.
Write chip - записать прошивку в Flash память контроллера. По окончании записи программатор сравнит CRC данных в файле с CRC данных в Flash-памяти RTD2660.
Verify chip - Проверить CRC данных в указанном файле с CRC данных в Flash-памяти RTD2660.
ReadEE - Прочитать данные EDID для текущего входа из RTD2660. Данные читаются точно так же, как и из обычной микросхемы 24C16. Поэтому программа пытается вычитать все 8 секций этой микросхемы. Как правило - для мониторов удается вычитать только одну - две.
ReadProt, WriteProt - соответственно чтение и запись команды DDC-CI по адресу 0x37. В окошке справа вводится код команды в виде: "51 84 03 12 00 4B E1" (установить контрастность 75%). Команды можно посмотреть, скажем, в программе SoftMCCS. Для записи последний байт - CRC. Не рекомендую нажимать на эти кнопки просто так, можно чего-то испортить )).
Read94,Write94 - соответственно чтение и запись команды ISP контроллера RTD2660. Команды так же вводятся в окошко справа в виде шестнадцатиричных последовательностей. Слева есть окошко с количеством байт для чтения и чекбокс Step. Галочка в этом чекбоксе говорит, что контроллер будет автоинкрементировать адрес при чтении. Все команды описаны в документации к RTD2660. Не рекомендую нажимать на эти кнопки просто так.. Можно чего-то испортить )).

В большом текстовом поле выводится детальный лог происходящих операций.

Для работы с контроллером необходимо:
1. Выбрать нужное устройство FT2232H в выпадающем списке. У меня оно зовется "Dual RS232-HS A".
2. Нажать кнопку "Open" чтобы открыть порт.
3. Нажать на кнопку "Enter ISP" чтобы войти в режим программирования.
4. Далее можно в произвольном порядке читать, писать и проверять содержимое Flash памяти контроллера.

Сама программа - в аттаче. Для запуска и работы необходимы фреймворк .Net 4.0 и установленные драйверы чипа и D2XX (можно скачать на сайте FTDI).

Update 2017-09-12:
Так же с данной микросхемой успешно работает программа Rova Tools:
Цитата:

Сообщение от xaxexa (Сообщение 392122)
прошить удалось программой ROVATool, там все просто, запускаем от Администратора, жмем сетингс выбираем generic FTDI, далее ставим точку на против 2660, далее опен банк 0, подкидываем прошивку, жмем "программ таргет".

Так же с программой RovaTools успешно протестирован дешевый программатор:
Цитата:

Сообщение от xaxexa (Сообщение 392122)
вот он NEW-CJMCU-FT232H-Multifunction-High-Speed-USB-to-JTAG-UART-FIFO-SPI-I2C-Module

стоит он примерно 500 рублей, там FT232H

но с оговорками:
AD0 на SCK
AD1 и AD2 замыкаем и на SDA

моя платка PCB800099 (незабываем что на разъеме перепутаны SDA и SCK
обе линии подтянул резисторами 20kohm к 3.3v
диод не ставил,
и землю соединил с массой программатора,
питание 2660 от блока питания было


YAM1966 23.03.2014 15:23

Вот спасибо!
Имею программатор AVREAL и давно приобретенную платку LCD контроллера.
Теперь будет чем заняться....

Alex_St 23.03.2014 15:30

Ну вот, я неделю без компутера в машине сидел, пока отлаживал, а оказывается, совсем рядом все это время лежала совершенно свободная плата )))
А что за программатор AVREAL?
Программу для AVR знаю, сам пользуюсь. А программатор? Имеется в виду что-то типа того, что я по ссылке дал?

YAM1966 23.03.2014 15:37

Вложений: 1
Цитата:

Сообщение от Alex_St (Сообщение 291650)
....А что за программатор AVREAL?
Программу для AVR знаю, сам пользуюсь. А программатор? Имеется в виду что-то типа того, что я по ссылке дал?

Ну, может я не корректно выразился :yes4:
Я имею в виду схему на FT2232 для программирования AVR-ок через программу AVREAL собранную мною давным давно.
Вложение 35382

Alex_St 24.03.2014 00:49

Обновил версию проги в шапке.
Изменения:
+ Теперь не надо нажимать кнопки "Open" и "EnterISP" перед операциями записи/чтения чипа. Прога сама откроет порт, если он не открыт, и войдет в ISP, если еще не вошла.
+ Добавлен автоматический сброс контроллера после успешной заливки или считывания прошивки.
- Верификация вызывается только в случае успешного чтения или записи прошивки.

Skiw 26.03.2014 13:07

Подскажите, можно ли использовать такую платку?
http://dangerousprototypes.com/docs/...2-breakout.jpg

Цена на ebay менее $30

Alex_St 26.03.2014 13:12

Можно, но гораздо выгоднее доплатить еще 6$, и за 33$ взять ту платку, что я привел в первом посту.
Там уже есть и буфер, который может уберечь ее от внешних факторов, и распаянные RS232/TTL последовательные порты, и отдельные разъемы для SPI/i2c, и отдельный разъем JTAG...
Я ей и меги прошиваю, и сюда приспособил...
Очень получилась универсальная плата.

Skiw 26.03.2014 13:26

Наверное Вы правы.
Даже, можно сказать, убедили :). Спасибо.
А нет ли, случаем, документации на нее?

filinmd 26.03.2014 13:42

а ftdi 232 на Arduino nano не прокатит?
Для чего нужна MPSSE ?

Alex_St 26.03.2014 13:57

Доки есть тут.
Девайс зовется "TIAO USB Multi Protocol Adapter"

Alex_St 26.03.2014 14:47

Цитата:

Сообщение от filinmd (Сообщение 292065)
а ftdi 232 на Arduino nano не прокатит?
Для чего нужна MPSSE ?

Если там стоит FT232H - то прокатит. Иначе - нет.
MPSSE - это Multi-Protocol Synchronous Serial Engine. Это именно та самая фича, которая и позволяет FTDI общаться с I2C шиной. Поэтому - подходят только те чипы, которые ее поддерживают )

filinmd 26.03.2014 15:45

Цитата:

Сообщение от Alex_St (Сообщение 292075)
Если там стоит FT232H - то прокатит. Иначе - нет.
MPSSE - это Multi-Protocol Synchronous Serial Engine. Это именно та самая фича, которая и позволяет FTDI общаться с I2C шиной. Поэтому - подходят только те чипы, которые ее поддерживают )

там FT232R.

Т.е. я правильно понял, что для прошивки нужно устройство, которое умеет общаться с шиной I2С?

Для Arduino есть библиотека Wire, которая предназначена для работы с I2С, вечером попробую прочитать прошивку таким способом.

Alex_St 26.03.2014 16:09

Таким - это каким?

filinmd 26.03.2014 16:26

Цитата:

Сообщение от Alex_St (Сообщение 292089)
Таким - это каким?

С помощью arduino и библиотеки Wire

Alex_St 26.03.2014 16:33

А каким образом? )

filinmd 26.03.2014 16:50

Цитата:

Сообщение от Alex_St (Сообщение 292096)
А каким образом? )

Попробую залить скетч в Arduino, типа такого

PHP код:

#include <Wire.h>
#define SLAVE_ADDRESS 0x04
int number 0;
int state 0;
void setup() {
    
pinMode(13OUTPUT);
    
Serial.begin(9600);         // start serial for output
    // initialize i2c as slave
    
Wire.begin(SLAVE_ADDRESS);
    
Wire.onReceive(receiveData);
    
Wire.onRequest(sendData);
    
Serial.println("Ready!");
}
void loop() {
    
delay(100);
}
// callback for received data
void receiveData(int byteCount){
    while(
Wire.available()) {
        
number Wire.read();
        
Serial.print("data received: ");
        
Serial.println(number);
        if (
number == 1){
            if (
state == 0){
                
digitalWrite(13HIGH); // set the LED on
                
state 1;
            }
            else{
                
digitalWrite(13LOW); // set the LED off
                
state 0;
            }
         }
     }
}
// callback for sending data
void sendData(){
    
Wire.write(number);



Подключу пины I2C к VGA разъему на контроллере
На платах Arduino, линия данных — SDA (data line) выведена на аналоговый пин 4, а линия тактирования — SCL (clock line) выведена на аналоговый пин 5.
http://www.rootfront.com/image/photo/8104921.jpg

и буду пробовать, может что получится

Alex_St 26.03.2014 16:54

Не получится. Это не простая микросхема памяти, это процессор, которому можно давать команды и по которым он будет обращаться к памяти. Общение происходит по шине DDC, поверх DDC реализован хитрый протокол. Т.е. надо сделать множество "лишних" действий, чтобы процессор выдал нам содержимое флешины.
Собственно, поэтому я и городил свой хитрый программатор.

В случае с ардуйной можно попробовать сделать другое. Посмотреть схему программатора Postal3, и если по пинам получается - то залить в мегу прошивку от Postal3, и воспользоваться его софтом. Шанс на успех есть, и немалый.
Хоть в Postal3 это и не заявлено, у меня есть большое ощущение, что он поддерживает RTD2660. Но это лишь мое ощущение, не более....

Gorynch 26.03.2014 17:04

в программе postal 3 окна настроек для rtd2662 - пустые
т.е. может код там и есть в программе, но в интерфейс он не выведен. И соот-но в меге тоже вряд ли что-то есть, видимо как раз из-за сложной реализации на самой меге. Иначе смысл не добавить эту функцию в прогу?

ты ведь используешь аппаратные возможности ft232h ;)

filinmd 26.03.2014 17:11

я попробую, и отпишусь.

Alex_St 26.03.2014 17:11

Задай вопрос на форуме Постала. Интересно )
Да, я использую их.

filinmd 27.03.2014 11:51

Вообщем ничего не получилось, а прошивка для PostalAvr я так понял, что не распространяется.

Alex_St 27.03.2014 11:59

Не факт. Я в теме видел, что он выкладывал ее неоднократно. И даже исходники одной из первых версий были. Надо тему полистать его.

filinmd 27.03.2014 12:08

Цитата:

Сообщение от Alex_St (Сообщение 292262)
Не факт. Я в теме видел, что он выкладывал ее неоднократно. И даже исходники одной из первых версий были. Надо тему полистать его.

хм, сейчас займусь тогда)) 150 страниц это жесть))

Alex_St 27.03.2014 12:17

Да, именно так.
Лучше спроси явно - поддерживает ли он 2660.
Правда, автор не особо любит отвечать на неинтересующие его вопросы )
Подумай о покупки FTDI ). Потом пригодится не только в данном деле ;)

filinmd 27.03.2014 12:24

Цитата:

Сообщение от Alex_St (Сообщение 292265)
Да, именно так.
Лучше спроси явно - поддерживает ли он 2660.
Правда, автор не особо любит отвечать на неинтересующие его вопросы )
Подумай о покупки FTDI ). Потом пригодится не только в данном деле ;)

Я так понял, что там вообще не любят вопросы))
Да я уже подумываю об этом, но я раньше все что мне нужно "читал" Arduinкой, уж больно это универсальная штука, и по этому хочется дожать е доконца))


P.S. нашел hex файл для прошивки 88 megи . Сейчас буду ковырять

mendisabal 27.03.2014 14:04

немного не ясна мне цель ваших трудов ,если это:
Цитата:

Сообщение от Alex_St (Сообщение 291640)
на нем невозможно отключить синий экран при отсутствии сигнала. Оказалось, что убрать его можно только путем смены прошивки в нем.

то как бы ,всем ясно куда ведут все дороги :big:
и да , 2662 ,экран не всегда синий ,цвета меняются ,зеленый желтый красный ,с интервалом в секунду (на стоковой прошивке) ,было бs круто запилить туда логотип марки авто ,но это "мигание" не напрягает ,совсем ,ибо висит максимум секунду после пропадания acc.

Alex_St 27.03.2014 14:12

Изначально была цель иметь возможность заливать в флеху любые прошивки. Китаез даже дал прошивку без синего экрана. Она работала, но криво.

А дальше варианты такие:
1. Требовать от китаеза новую прошивку, которая будет работать хорошо.
2. Пытаться самому дизасемблировать и править бинарник.
3. Попробовать вот такой проект.
4. Попробовать сделать прошивку самому на базе одного из открытых проектов.
Похоже, пока остановился на 3м варианте.
Но не факт, что не попробую 4й )

mendisabal 27.03.2014 14:32

интузиазма хоть отбавляй :) чтож удачи вам.

han2001 31.03.2014 01:55

Вложений: 1
Купил такую плату. Заметил один глюк по программе. Если к компьютеру по мимо платы подключен еще FT232RL, то при нажатии на кнопку OPEN программа зависает. Если FT232RL отключить, то все ОК.

31.03.2014 0:40:06.926: openDevice()
31.03.2014 0:40:07.040: Device[0]: Dual RS232-HS A
31.03.2014 0:40:07.057: device is opened.
31.03.2014 0:40:07.183: MPSSE is initialyzed!

Данная плата и программа нужна для прошивки RTD2660. Но она почему то не хочет этого делать. При нажатии на кнопку Enter ISP выдает

31.03.2014 0:46:27.524: write94(): 6F 80
31.03.2014 0:46:27.526: Error!
31.03.2014 0:46:27.527: write94(): 6F
31.03.2014 0:46:27.528: Error!
31.03.2014 0:46:27.529: Read94( 1 bytes )
31.03.2014 0:46:27.530: Error!
31.03.2014 0:46:27.530: FF

По схеме выходного каскада в качестве VD1 впаял 1N4148, т.е. то что было. Резисторы подтяжки паять не стал т.к. они уже есть на плате RTD2660. Осциллографом посмотрел, на плате импульсы на ADBUS0, ADBUS1 и ADBUS2 есть.

Чего ему еще не хватает?

Alex_St 31.03.2014 02:15

Питание RTD2660 - 3.3В. Уровень ноля на выходе FT2232 - скажем, 0.2..0.3В. Падение на диоде около 0.7В. Итого уровень ноля может быть уже около 0.9..1В, что при уровне питания 3.3В - уже многовато. Причина может быть в этом. Надо поискать именно шоттки.

Но на этой плате нет буфера. Поэтому можно включить вообще без диода.

Можно попробовать сделать обманку - посадить на линию SDA "поддтяжку вниз" в виде резистора 1...100к (подбирать экспериментально) на землю. Может помочь скомпенсировать падение на диоде.

Попробуй сделать FindDevices. Найдет что-нибудь? Если да - проблема скорее всего не в диоде.

Ну и вдогонку - пока FindDevices ничего не нашел - смысла пробвать другие
кнопки нет )

По поводу FT232RL - да, есть такое. Я пока не различаю разные устройства, и ищу всегда первый канал из имеющихся. Запишем в планы доработку.

han2001 31.03.2014 02:23

При нажатии на кнопку FindDevices

31.03.2014 1:20:26.321: findDevices()
31.03.2014 1:20:26.962: No devices found

Попробую найти диод щоттки, но по осцилу падение напряжения особо не заметил, токи то ничтожные. Но все же завтра опробую с диодом шоттки.

Alex_St 31.03.2014 10:53

Так в случае с указанной платой диод вообще не нужен. Он нужен только для плат с встроенным буфером.
Вот картинка из документации на микросхему:
http://habr.habrastorage.org/post_im...950f4a1c99.png

И есть еще одно предположение - к каким ногам какого разъема подключался? Если к VGA - то все гуд. Если к однорядному разъему, который рядом с разъемом VGA - то следует учесть, что на нем перепутана маркировка линий i2c - SCL и SDA перепутаны местами. Это может быть причиной. Рекомендую прозвонить до разъема VGA их.
П.с. Сейчас увидел осцилограмму в предыдущем посте. По ней видно, что RTD2660 не отвечает на запросы вообще. Каждый последний бит (9й) - это Ack. Если микросхема приняла байт - то она ответит нулем.

han2001 31.03.2014 14:33

Все большое спасибо добрый человек. Не догадался перепроверить, вот и верь теперь документации. Спаял без диода и поменял местами SCL и SDA и микросхема стала определяться. Теперь все пишется и читается. Еще раз спасибо.

Alex_St 31.03.2014 15:17

Ура! Это радует!

Глупый вопрос. Кто-то знает, можно ли получить доступ к шине DDC (I2C) через драйверы видеокарты? Подозреваю, что можно. Даже когда-то был такой проектец - WinI2C/DDC. Но он заглох, и либу эту я нигде не нашел. Везде либо ссылка на их сайт, на котором ее давно уже нет, либо ссылка на exe загрузчики, которых я боюсь ).
Больше пока ничего не нагуглил..
Если такое возможно - то можно было бы программировать чип прямо через видеокарту, без использования внешних программаторов.

Alex_St 01.04.2014 00:29

Нашел, что да, в драйверах есть возможность вызывать методы I2CRead, I2CWrite, I2CStart, I2CStop. Вроде то, что нужно. Но есть одно но. Для драйвера доступно, а вот как с использованием существующего драйвера видеокарты получить доступ к столь низкоуровневым функциям без написания собственного драйвера - для меня загадка.

filinmd 02.04.2014 19:45

http://habrahabr.ru/post/217583/ думаю данная статья может быть интересна

Alex_St 02.04.2014 19:54

Пасиба, читал.
Странный у него телевизор. У него стоит просто еепром, которая причем не защищена от записи...

filinmd 02.04.2014 20:01

Цитата:

Сообщение от Alex_St (Сообщение 292879)
Пасиба, читал.
Странный у него телевизор. У него стоит просто еепром, которая причем не защищена от записи...

Т.е. в нашем случае это не прокатит? Или стоит попробовать поднять Linux?

Alex_St 02.04.2014 21:49

Его опыт только под линухом. Учитывая, что мало у кого стоит линух, и мало кто захочет себе его ставить ради перепрошивки, нам это не пойдет.
Под виндой я пока не нашел как получить доступ. Только из драйверов. Но свой драйвер для этого писать я еще не готов ни по знаниям и опыту, ни по затратам времени...

Alex_St 07.04.2014 12:37

Обновил программу в первом сообщении. Теперь появилось выпадающее окошко с идентификатором устройства, через которое будем программировать. Это позволяет использовать программатор в случае, если еще подключены одно или несколько других устройств на базе FT232. Например, GPS приемник, последовательный порт, ардуйна, и другое.
Стоит заметить, что есть ограничения:
1. Выбрать порт необходимо до выполнения каких либо действий.
2. Список портов получается только при старте программы. Далее при изменении конфигурации устройств в программе ничего не меняется. Автообновление конфигурации портов сделать можно, но нужно ли?


Часовой пояс GMT +4, время: 06:02.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot