реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как прошить камень Cypress FX2, используя драйвер CyUsb.sys
Warlord
сообщение Jan 17 2007, 12:47
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 23-09-05
Из: Москва
Пользователь №: 8 874



Сначала пользовался драйвером EzUsb.sys, там прошивка реализована с помошью кода IOCTL_EZUSB_ANCHOR_DOWNLOAD Теперь перешел на драйвер CyUsb.sys но ничего подобного в мануалах не нашел sad.gif Есть 2 варианта: прошивка загружается операционной системой с помощью скрипта сразу после загрузки драйвера, и второй - с помошью утилиты CyConsole. Хочется третий вариант - самому. Может кто уже сталкивался или реализовал??
Go to the top of the page
 
+Quote Post
jur
сообщение Jan 17 2007, 15:13
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 16-10-05
Пользователь №: 9 704



Цитата(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). Правда, пример написан на Борландовском Си...


--------------------
MPEG-4 - в массы!
Go to the top of the page
 
+Quote Post
Warlord
сообщение Jan 17 2007, 16:26
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 23-09-05
Из: Москва
Пользователь №: 8 874



Огромное, спасибо, jur! А то я уже начал копать CyConsole и обнаружил что сначала она загружает VendAX прошивку, которая зашита внутри, а потом уже собсно рабочую. Я тоже пишу на борланде, так что не надо будет перекраивать код smile.gif
З.Ы. Я несколькими неделями ранее уже копал этот проект FxEEPROM, так ради интереса, но до конца не разбирался (так как использовал ezusb.sys) и поэтому пропустил его мимо :\
Go to the top of the page
 
+Quote Post
jur
сообщение Jan 17 2007, 20:23
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 16-10-05
Пользователь №: 9 704



Цитата(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.

Я верно понимаю этот процесс?


--------------------
MPEG-4 - в массы!
Go to the top of the page
 
+Quote Post
Doka
сообщение Jan 17 2007, 21:38
Сообщение #5


Electrical Engineer
******

Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778



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

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


я бы не связывал так однозначно загрузку нового бинарника и исчезновения/появление устройства.
процесс ренумерации довольно подробно описан в TRM и в цайпрессных слайдах.
(по памяти): FX2 отключением подтягивающего резистора от шины переводит автомат состояний USB в состояние disconnected. Затем из программы востанавливается значение бита регистра - состояние - connected и последующие ритуалы распознания и инциализации USB-девайса.


--------------------
Блог iDoka.ru
CV linkedin.com/in/iDoka
Sources github.com/iDoka


Never stop thinking...........................
Go to the top of the page
 
+Quote Post
jur
сообщение Jan 18 2007, 08:22
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 16-10-05
Пользователь №: 9 704



Цитата(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, так и осталось.

В общем, покумекать еще нужно :-)


--------------------
MPEG-4 - в массы!
Go to the top of the page
 
+Quote Post
Warlord
сообщение Jan 18 2007, 10:47
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 23-09-05
Из: Москва
Пользователь №: 8 874



Цитата(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.
Go to the top of the page
 
+Quote Post
-Al-
сообщение Jan 18 2007, 14:26
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



Цитата(Warlord @ Jan 17 2007, 12:47) *
Сначала пользовался драйвером EzUsb.sys, там прошивка реализована с помошью кода IOCTL_EZUSB_ANCHOR_DOWNLOAD Теперь перешел на драйвер CyUsb.sys но ничего подобного в мануалах не нашел sad.gif Есть 2 варианта: прошивка загружается операционной системой с помощью скрипта сразу после загрузки драйвера, и второй - с помошью утилиты CyConsole. Хочется третий вариант - самому. Может кто уже сталкивался или реализовал??

А не проще CyLoad.sys использовать для этих целей?? Скрипт драйвера сам разберется, что делать...
Go to the top of the page
 
+Quote Post
Warlord
сообщение Jan 18 2007, 14:49
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 23-09-05
Из: Москва
Пользователь №: 8 874



Уж не знаю чем 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
Go to the top of the page
 
+Quote Post
-Al-
сообщение Jan 18 2007, 15:31
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



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

Ну если только так... не у всех же девайсы перестраиваются на лету smile.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01456 секунд с 7
ELECTRONIX ©2004-2016