|
|
|
Digilent программатор Xilinx, кто пользовал? |
|
|
|
Dec 17 2013, 09:04
|
Местный
Группа: Свой
Сообщений: 218
Регистрация: 2-02-09
Из: Харьков
Пользователь №: 44 266
|
Цитата(rloc @ Dec 3 2013, 20:30) Например для HS2... Как думаете, если подсунуть impact-у HS2 сделанный не на ft232h , а на ft2232h (двухпортовом) - будет работать? (по идее система команд в драйвере у них должна быть одинаковая на 1-й порт) и было бы здорово иметь полный dump с eeprom для hs2 - чтобы это попробовать, а не только с 0x50 до 0х78...
|
|
|
|
|
Jan 9 2014, 13:16
|
Местный
Группа: Свой
Сообщений: 218
Регистрация: 2-02-09
Из: Харьков
Пользователь №: 44 266
|
Цитата(rloc @ Dec 17 2013, 13:12) HS2 full dump Огромное спасибо за dump/ Однако, по ниму есть вопрос: в ДШ (AN_121_FTDI_Device_EEPROM_User_Area_Usage) про user area сказано, что = Цитата First Block= Size – 128 bytes. The start address of the user area within this 1st block is as follows: Start Address = 0x14 (for FT232B and FT245B) 0x16 (for FT2232D) 0x1A (for FT2232H and FT4232H)
Т.е. вроде как user area должна начинаться с 0х14 в вашем случае. У себя я наблюдаю следующую картину = Код Read EEPROM Device 0 Word 0000: 0101 0304 1460 0007 8032 0800 0000 9A12 0008: AC28 D41A 0000 0000 5600 0100 C792 6A35 0010: 5201 9030 4A74 6167 4873 3200 0000 0000 0018: 0000 0000 0044 6967 696C 656E 7420 4A54 0020: 4147 2D48 5332 0000 0000 0000 0000 0000 0028: 0000 1100 0000 0000 0000 0000 0000 0000 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0038: 0000 0000 0000 0000 0000 0000 0000 0000 0040: 0000 0000 0000 0048 0000 0000 0000 0000 0048: 0000 0000 0000 0000 0000 1203 4400 6900 0050: 6700 6900 6C00 6500 6E00 7400 2803 4400 0058: 6900 6700 6900 6C00 6500 6E00 7400 2000 0060: 5500 5300 4200 2000 4400 6500 7600 6900 0068: 6300 6500 1A03 3200 3100 3000 3200 3400 0070: 3900 3800 3500 3400 3600 3000 3600 0000 0078: 0000 0000 0000 0000 0000 0000 0000 6D4A Как видно из моего dump-a - последним словом перед user area было 0х5600 далее по смещению 0х1А будут находиться user area data. Однако, у Вас слово 0х5600 находится по смещению дальше моего и user area у вас начинается со смещения 0х20. Следовательно вопрос: почему 0х20 вместо 0х14? ЗЫ: Правильно ли я понимаю, что CRC16, что стоит в конце eeprom, от user area не считается?
|
|
|
|
|
Jan 9 2014, 15:00
|
Участник
Группа: Участник
Сообщений: 46
Регистрация: 17-11-12
Пользователь №: 74 440
|
Цитата(ADA007 @ Jan 9 2014, 17:16) Т.е. вроде как user area должна начинаться с 0х14 в вашем случае. Не вижу в списке FT232H
|
|
|
|
|
Jan 9 2014, 19:13
|
Местный
Группа: Свой
Сообщений: 218
Регистрация: 2-02-09
Из: Харьков
Пользователь №: 44 266
|
Цитата(alver @ Jan 9 2014, 17:00) Не вижу в списке FT232H Потому, что про user area упоминают FTDI только в этом документе. И больше ничего не нашел про это - вот и подумал, что распространяется на всю серию микросхем FT232x. К тому же ребята с сайта используют тот же 232h и ссылаются на тот же документ, что я привел выше. Если кто подскажет, где написано конкретно про ft232h - буду очень благодарен.
|
|
|
|
|
Jan 9 2014, 19:58
|
Узкополосный широкополосник
Группа: Свой
Сообщений: 2 316
Регистрация: 13-12-04
Из: Moscow
Пользователь №: 1 462
|
Действительно, FT232H несколько отличается от остальных. Из открытых источников http://www.intra2net.com/en/developer/libftdi/ можно выудить следующий код: Код // eeprom size check switch (ftdi->type) { case TYPE_AM: case TYPE_BM: user_area_size = 96; // base size for strings (total of 48 characters) break; case TYPE_2232C: user_area_size = 90; // two extra config bytes and 4 bytes PnP stuff break; case TYPE_R: user_area_size = 88; // four extra config bytes + 4 bytes PnP stuff break; case TYPE_2232H: // six extra config bytes + 4 bytes PnP stuff case TYPE_4232H: user_area_size = 86; break; case TYPE_232H: user_area_size = 80; break; default: user_area_size = 0; break; } Там есть и алгоритм вычисления чексуммы, который весьма далек от CRC16: Код // calculate checksum checksum = 0xAAAA;
for (i = 0; i < eeprom->size/2-1; i++) { value = output[i*2]; value += output[(i*2)+1] << 8;
checksum = value^checksum; checksum = (checksum << 1) | (checksum >> 15); }
output[eeprom->size-2] = checksum; output[eeprom->size-1] = checksum >> 8;
|
|
|
|
|
Jan 10 2014, 08:54
|
Местный
Группа: Свой
Сообщений: 218
Регистрация: 2-02-09
Из: Харьков
Пользователь №: 44 266
|
Цитата(rloc @ Jan 9 2014, 21:58) Действительно, FT232H несколько отличается от остальных. Спасибо, действительно отличается, код чипа (0x56) записывается => Код ft2232h output[0x18] = eeprom->chip; ft232h output[0x1e] = eeprom->chip; т.е. user_area у 232h начинается действительно с 0х20 адреса... Цитата(rloc @ Jan 9 2014, 21:58) Там есть и алгоритм вычисления чексуммы, который весьма далек от CRC16: Судя из приведенного кода сумма считается от все памяти и похоже, что ftdi-ка не считывает данные, если контрольная сумма не правильная...
|
|
|
|
|
Jan 16 2014, 11:38
|
Местный
Группа: Свой
Сообщений: 218
Регистрация: 2-02-09
Из: Харьков
Пользователь №: 44 266
|
Все оказалось до безобразия просто. Цитата(Flood @ Dec 6 2013, 23:31) Перешивать пользовательскую зону FT_Prog не может, надо делать свой софт (или найти готовый, который умеет). Так и получилось...пришлось написать свой софт, который использует функцию FT_EE_UAWrite. В общем алгоритм следующий, испытанный для FT2232H, которая была у меня под рукой: 1. В FT_Prog-e настраиваем Product Description, Manufacturer, Serial Number, порты в режим 245FIFO и драйвер D2xx - записываем в EEPROM. 2. Прописываем User_Area из дампа в посте , любезно, предоставленного от rloc вписываем данные. User_Area там по адресам с 0х0010 по 0х002С в конце добавляем необходимое кол-во байт 0х00 в зависимости от типа ftdi и используемой eeprom. Контрольная сумма считается автоматически драйвером ftdi при записи eeprom. Расположение ног расписано несколькими постами выше. ADBUS0 и ADBUS4 замыкать не нужно - и так все работает!В общем можно это отдельной статьей оформить, чтоб не затерялась инфа на просторах форума, главное, чтобы Digilent не обиделись ЗЫ: vid/pid нужно оставлять оригинальными, а иначе не из той области eeprom будет вычитываться.
|
|
|
|
|
Jan 20 2014, 19:21
|
Местный
Группа: Свой
Сообщений: 218
Регистрация: 2-02-09
Из: Харьков
Пользователь №: 44 266
|
Цитата(rloc @ Jan 17 2014, 19:54) Алгоритм расчета контрольной суммы в драйверах D2XX - какой-то свой, не CRC16 и не как в libftdi... Я тут только что проверил алгоритм подсчета вот этот Код // calculate checksum checksum = 0xAAAA;
for (i = 0; i < eeprom->size/2-1; i++) { value = output[i*2]; value += output[(i*2)+1] << 8;
checksum = value^checksum; checksum = (checksum << 1) | (checksum >> 15); }
output[eeprom->size-2] = checksum; output[eeprom->size-1] = checksum >> 8; Он рабочий....мне удалось с его помощью посчитать выложенный вами dump и свой тоже - все сошлось (правда пришлось немного допилить,чтобы идея суммы сохранилась)...сырцы прилагаю, если что ЗЫ: за код больно не бить....писал на скорую руку
|
|
|
|
|
|
23 чел. читают эту тему (гостей: 23, скрытых пользователей: 0)
Пользователей: 0
|
|
|