Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как прошить камень Cypress FX2
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Warlord
Сначала пользовался драйвером EzUsb.sys, там прошивка реализована с помошью кода IOCTL_EZUSB_ANCHOR_DOWNLOAD Теперь перешел на драйвер CyUsb.sys но ничего подобного в мануалах не нашел sad.gif Есть 2 варианта: прошивка загружается операционной системой с помощью скрипта сразу после загрузки драйвера, и второй - с помошью утилиты CyConsole. Хочется третий вариант - самому. Может кто уже сталкивался или реализовал??
jur
Цитата(Warlord @ Jan 17 2007, 11:47) *
Есть 2 варианта: прошивка загружается операционной системой с помощью скрипта сразу после загрузки драйвера, и второй - с помошью утилиты CyConsole. Хочется третий вариант - самому. Может кто уже сталкивался или реализовал??
Никаких проблем. В Cypress'овской USB DevStudio есть пример FxEEPROM, в котором расписана, в числе прочего, и процедура загрузки RAM микросхемы FX2 (функция LoadHexToRAM). Все делается простыми операциями через Control Endpoint с запросом Vendor Request = 0xA0 (Upload/Download on-chip RAM). Правда, пример написан на Борландовском Си...
Warlord
Огромное, спасибо, jur! А то я уже начал копать CyConsole и обнаружил что сначала она загружает VendAX прошивку, которая зашита внутри, а потом уже собсно рабочую. Я тоже пишу на борланде, так что не надо будет перекраивать код smile.gif
З.Ы. Я несколькими неделями ранее уже копал этот проект FxEEPROM, так ради интереса, но до конца не разбирался (так как использовал ezusb.sys) и поэтому пропустил его мимо :\
jur
Цитата(Warlord @ Jan 17 2007, 15:26) *
Огромное, спасибо, jur!
Без вопросов :-)

Кстати, я вот об этом процессе ренумерации думаю, думаю... Как-то мне не до конца понятно, как же в деталях, по шагам, он происходит? В общем виде - все понятно, но бес кроется в мелочах... Меня смущает вот что. Напишу я свою программу, которая загружает FX2. Когда FX2 загрузится, она ренумерируется и появляется уже как другая микросхема. Но ведь прежняя-то пропадает! Детально этот процесс мне видится так:

1. Запускается моя программа.
2. Она должна найти исходную FX2, до ренумерации (с моими VID/PID).
3. Программа загружает процессор FX2 и рестартует его.
4. (Вот тут интересно) Моя программа должна закрыть исчезнувшее устройство с исходной FX2!
5. Программа открывает уже новую FX2 и может работать с моим устройством.

Встает вопрос: что делать, если FX2 уже сконфигурирована? Предусмотреть какие-нибудь спец-регистры? Или зашить еще и разные DID для моих VID/PID? В простейшем случае можно, конечно, наплевать на предупреждение Cypress и работать с их VID/PID (0x04B4/0x8613) для начальной загрузки, и со своими VID/PID после ренумерации. Тогда следует предварительно проверить, существует ли в системе устройство с моими VID/PID. Если существует - то просто начинаем работать. Если не существует, то проверяем, имеется ли устройство с VID/PID равными 0x04B4/0x8613. Если есть - загружаем свою прошивку, если нет - Error.

Я верно понимаю этот процесс?
Doka
Цитата(jur @ Jan 17 2007, 20:23) *
Детально этот процесс мне видится так:

1. Запускается моя программа.
2. Она должна найти исходную FX2, до ренумерации (с моими VID/PID).
3. Программа загружает процессор FX2 и рестартует его.
4. (Вот тут интересно) Моя программа должна закрыть исчезнувшее устройство с исходной FX2!
5. Программа открывает уже новую FX2 и может работать с моим устройством.


я бы не связывал так однозначно загрузку нового бинарника и исчезновения/появление устройства.
процесс ренумерации довольно подробно описан в TRM и в цайпрессных слайдах.
(по памяти): FX2 отключением подтягивающего резистора от шины переводит автомат состояний USB в состояние disconnected. Затем из программы востанавливается значение бита регистра - состояние - connected и последующие ритуалы распознания и инциализации USB-девайса.
jur
Цитата(Doka @ Jan 17 2007, 20:38) *
Цитата(jur @ Jan 17 2007, 20:23) *
4. (Вот тут интересно) Моя программа должна закрыть исчезнувшее устройство с исходной FX2!
я бы не связывал так однозначно загрузку нового бинарника и исчезновения/появление устройства.
Не понял. Какого бинарника? Я имел ввиду то, что после загрузки фирмвари в FX2 у нас происходит отключение из системы одного устройства (исходной, неренумерированной микросхемы) и подключение другого (моей целевой системы). Происходит ренумерация.

Цитата(Doka @ Jan 17 2007, 20:38) *
процесс ренумерации довольно подробно описан в TRM и в цайпрессных слайдах.
(по памяти): FX2 отключением подтягивающего резистора от шины переводит автомат состояний USB в состояние disconnected. Затем из программы востанавливается значение бита регистра - состояние - connected и последующие ритуалы распознания и инциализации USB-девайса.
Во, во. Т.е. эмулируется как бы физическое отключение одной микросхемы и подключение другой. А раз она отключилась, то нужно закрыть открытый для нее драйвер, выполнить "Close", так сказать, и потом заново "Open".

Потом еще это возможное существование моего устройства при запуске программы... Я ведь как? Могу один раз запустить программу, выйти из нее, и затем еще раз запустить. Так при первом запуске в системе будет присутствовать микросхема с одними VID/PID (0x04B4/0x8613), а при повторном запуске - уже с другими (с VID/PID целевой системы). Я ведь питание не отключал, мое железо как было ренумерировано на целевые VID/PID, так и осталось.

В общем, покумекать еще нужно :-)
Warlord
Цитата(jur @ Jan 17 2007, 20:23) *
1. Запускается моя программа.
2. Она должна найти исходную FX2, до ренумерации (с моими VID/PID).
3. Программа загружает процессор FX2 и рестартует его.
4. (Вот тут интересно) Моя программа должна закрыть исчезнувшее устройство с исходной FX2!
5. Программа открывает уже новую FX2 и может работать с моим устройством.
....
Я верно понимаю этот процесс?

Все правильно, после того как ядро usb отключает подтягивающий резистр от шины, ОС выгружает драйвер устройства, апликухе остается только освободить дескриптор (Close), поймать сообщение системы о том, что лист устройств изменился(дополнился), снова создать класс, если Count>0 то можно проверить VID/PID. Вот только надо быть осторожным с inf файлами, их д.б. 2 одинаковых с разными VID/PID. Я использую одинаковые V/P но разные DID.
-Al-
Цитата(Warlord @ Jan 17 2007, 12:47) *
Сначала пользовался драйвером EzUsb.sys, там прошивка реализована с помошью кода IOCTL_EZUSB_ANCHOR_DOWNLOAD Теперь перешел на драйвер CyUsb.sys но ничего подобного в мануалах не нашел sad.gif Есть 2 варианта: прошивка загружается операционной системой с помощью скрипта сразу после загрузки драйвера, и второй - с помошью утилиты CyConsole. Хочется третий вариант - самому. Может кто уже сталкивался или реализовал??

А не проще CyLoad.sys использовать для этих целей?? Скрипт драйвера сам разберется, что делать...
Warlord
Уж не знаю чем CyLoad(v1.3) отличается от CyUSB(v1.7) только CyUSB тоже может проигрывать скрипты:
Цитата
CyUSB.chm писал:
Features
· Supports automatic play-back of control transfer scripts at device startup

но это при подлючении устройства, после загрузки его драйвера, а мне надо в любой момент и любую прошивку, а не ту которая указана в inf файле. jur подсказал, и я реализовал загрузку, все получилось smile.gif
-Al-
Цитата(Warlord @ Jan 18 2007, 14:49) *
но это при подлючении устройства, после загрузки его драйвера, а мне надо в любой момент и любую прошивку, а не ту которая указана в inf файле. jur подсказал, и я реализовал загрузку, все получилось smile.gif

Ну если только так... не у всех же девайсы перестраиваются на лету smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.