Перейти к содержанию
    

Digilent программатор Xilinx

Есть у меня HW-USB модуль на FT4232. Кто подскажет - допилить, чтобы ксилинкс поддерживал можно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Например для HS2...

 

Как думаете, если подсунуть impact-у HS2 сделанный не на ft232h , а на ft2232h (двухпортовом) - будет работать? (по идее система команд в драйвере у них должна быть одинаковая на 1-й порт)

и было бы здорово иметь полный dump с eeprom для hs2 - чтобы это попробовать, а не только с 0x50 до 0х78...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

HS2 full dump

Read EEPROM Device 0
Word
0000: 0100 0304 1460 0009 80FA 0800 0000 A012 
0008: B228 DA1A 0000 0000 0000 0000 0000 5600 
0010: 0100 C792 6A35 5201 9030 4A74 6167 4873 
0018: 3200 0000 0000 0000 0000 0044 6967 696C 
0020: 656E 7420 4A54 4147 2D48 5332 0000 0000 
0028: 0000 0000 0000 0000 1100 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 0000 0000 4800 0000 0000 
0048: 0000 0000 0000 0000 0000 0000 0000 0000 
0050: 1203 4400 6900 6700 6900 6C00 6500 6E00 
0058: 7400 2803 4400 6900 6700 6900 6C00 6500 
0060: 6E00 7400 2000 5500 5300 4200 2000 4400 
0068: 6500 7600 6900 6300 6500 1A03 3200 3100 
0070: 3000 3200 3400 3900 3800 3500 3400 3600 
0078: 3000 3600 0203 0000 0000 0000 0000 102D

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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? :blink:

 

ЗЫ: Правильно ли я понимаю, что CRC16, что стоит в конце eeprom, от user area не считается? :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. вроде как user area должна начинаться с 0х14 в вашем случае.

Не вижу в списке FT232H

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не вижу в списке FT232H

Потому, что про user area упоминают FTDI только в этом документе. И больше ничего не нашел про это - вот и подумал, что распространяется на всю серию микросхем FT232x.

К тому же ребята с сайта используют тот же 232h и ссылаются на тот же документ, что я привел выше.

Если кто подскажет, где написано конкретно про ft232h - буду очень благодарен.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Действительно, 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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Действительно, FT232H несколько отличается от остальных.

 

Спасибо, действительно отличается, код чипа (0x56) записывается =>

 

ft2232h
output[0x18] = eeprom->chip;
ft232h
output[0x1e] = eeprom->chip;

 

т.е. user_area у 232h начинается действительно с 0х20 адреса...

 

Там есть и алгоритм вычисления чексуммы, который весьма далек от CRC16:

 

Судя из приведенного кода сумма считается от все памяти и похоже, что ftdi-ка не считывает данные, если контрольная сумма не правильная... :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все оказалось до безобразия просто.

 

Перешивать пользовательскую зону 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 не обиделись :rolleyes:

ЗЫ: vid/pid нужно оставлять оригинальными, а иначе не из той области eeprom будет вычитываться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поздравляю! ПЛИС прошивали?

 

ADBUS0 и ADBUS4 замыкать не нужно - и так все работает!

Предполагаю, в какой-то из версий вместо этой перемычки была петля по печатной плате по длине JTAG-цепочки для определения задержки тактового сигнала и автоматической установки максимальной частоты. Владельцы ZedBoard, откликнитесь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поздравляю! ПЛИС прошивали?

Да...прошивал...кабель определяется impact-ом как HS2...на днях еще попробую ChipScope

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возьму на заметку, пока использовал только FT232H: мультиплексировал между JTAG и пользовательскими данными. С дополнительным портом проще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ради такого случая решил поиздеваться над FT4232H mini module. В 14.7 версии софта импакт находит устройство, как программатор Digilent, это видно по лог-файлу, но потом выдает ошибку - "failed to open device handle". Так что не все йогурты одинаково полезны. И еще подтверждаю - доступа к eFUSE регистрам через Digilent нет, даже меню соответствующее не появляется, через Platform Cable на той же плате все программируется. Алгоритм расчета контрольной суммы в драйверах D2XX - какой-то свой, не CRC16 и не как в libftdi.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Алгоритм расчета контрольной суммы в драйверах 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 и свой тоже - все сошлось (правда пришлось немного допилить,чтобы идея суммы сохранилась)...сырцы прилагаю, если что

ЗЫ: за код больно не бить....писал на скорую руку

main.c.tar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Опа, никак под Линукс проверяли? Т.е. еще не факт, что FT2232H под Виндоус подойдет. Код завтра проверю. По-началу писал побайтно и контрольную сумму вычислял сам, но Импакт не видел программатор, потом - через запись юзеровской области целым блоком, драйвера сами посчитали контрольную сумму и все определилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...