Jump to content

    

Вопрос про CY7C68013 EZ-USB FX2

Добрый день. Систуация такая. Имеется готовое устройство от буржуйских разработчиков, построенное на базе CY7C68013. К нему прилагается программа под винду, которую мне нужно полностью заменить своей самопальной программой. При этом прошивку устройства требуется оставить нетронутой. Использует она драйвер ezusb.sys. Имеется также бумажка с описанием USB команд и формата пакетов для устройства. Никогда с данным чипом дела не имел. Сейчас скачал CY3681 EZ-USB FX2 Development Kit, запустил EZ-USB Control Panel. Устройство успешно определилось. Смотрю на все это, и возникают у меня вопросы, и не могу я удержаться и не задать их вам.

 

1. Как мне скопировать всю информацию из чипа (программу, EEPROM и.т.д.), и что вообще нужно копировать, чтобы в процессе изучения не испортить объект изучения?

 

2. Я правильно понимаю, что EZ-USB Control Panel позволяет мне вручную потестировать интерфейс взаимодействия с устройством, напрямую посылая байты в оконечные точки и принимая оттуда данные?

 

3. uVision2 - это программа для написания прошивки? Нужно ли мне вообще в ней что-то делать, если я прошивку менять не хочу?

 

4. Я скачал и установил Suite USB 3.4 for Visual Studio. В самой студии ничего не изменилось. Как мне ее найти? Умеет ли она работать с драйвером ezusb.sys? Если нет, то можно ли мне использовать новый драйвер cyusb.sys, если прошивка написана под старый?

 

5. Как узнать, в каком режиме девайс работает - full speed или high speed?

 

6. Сейчас сижу под вистой. Могут ли возникнуть проблемы из-за несовместимости с ней старого драйвера?

 

7. (пространный) Может ли в устройстве быть защита, которая не позволит ему работать не с родной программой? (догадываюсь, что может). Может ли быть защита, которая не позволит ему работать с инструментарием от cypress? Может ли быть защита, которая что-нибудь сломает, если "узнает", что я пытаюсь написать свою софтину?

 

8. Какой алгоритм дальнейшей работы посоветуете? Какие программы использовать? Какие вопросы у меня еще не возникли, но могут возникнуть в ближайшее время? На какие подводные камни я могу напороться?

 

 

На некоторые из этих вопросов на форуме в том или ином виде уже есть ответы, но меня они не совсем устроили. Большое спасибо всем, кто откликнется!

Edited by niktagor

Share this post


Link to post
Share on other sites

При попытках понять работу примера BulkXfer, родился вот такой код:

 

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

int _tmain(int argc, _TCHAR* argv[])

{
HANDLE phDriver;

SECURITY_ATTRIBUTES security;	
security.nLength = sizeof(security);
security.lpSecurityDescriptor = NULL;
security.bInheritHandle = false;

LPCWSTR completeDeviceName;
completeDeviceName = (LPCWSTR)"Ezusb-0";
phDriver = CreateFile(   completeDeviceName,
	                            GENERIC_WRITE,
	                            FILE_SHARE_WRITE,
	                            &security,
	                            OPEN_EXISTING,
	                            0,
	                            NULL);
printf("%d\n",phDriver);
getchar();
return 0;
}

 

 

Програмка упорно выдает -1 с кодом ошибки 2(ERROR_FILE_NOT_FOUND). В чем ошибка? EZ-USB Control Panel говорит, что девайс называется Ezusb-0.

 

 

Share this post


Link to post
Share on other sites
1. Как мне скопировать всю информацию из чипа (программу, EEPROM и.т.д.), и что вообще нужно копировать, чтобы в процессе изучения не испортить объект изучения?

Читайте в теме Проблема с cy7c68013a. Скопировать нужно все содержимое EEPROM. По типу EEPROM определите ее емкость. Посмотрите, может быть Ваш модуль содержит перемычку или джампер, с помощью которых можно отключить EEPROM.

 

2. Я правильно понимаю, что EZ-USB Control Panel позволяет мне вручную потестировать интерфейс взаимодействия с устройством, напрямую посылая байты в оконечные точки и принимая оттуда данные?

Да. EZ-USB Control Panel это бабушка Cypress USB Console (CyConsole.exe).

 

3. uVision2 - это программа для написания прошивки? Нужно ли мне вообще в ней что-то делать, если я прошивку менять не хочу?

Нет.

 

4. Я скачал и установил Suite USB 3.4 for Visual Studio. В самой студии ничего не изменилось. Как мне ее найти? Умеет ли она работать с драйвером ezusb.sys? Если нет, то можно ли мне использовать новый драйвер cyusb.sys, если прошивка написана под старый?

В самой студии ничего измениться и не должно. Suite USB 3.4 содержит драйвер cyusb.sys и библиотеки для общения с драйвером для Visual Studio: cyapi.lib - для C++ и cyusb.dll для C#. А также документацию и примеры. Прочитайте "ReleaseNotes.pdf".

Нет ezusb.sys это дедушка cyusb.sys.

Можно, нужно отредактировать cyusb.inf файл, добавив в него VID и PID для Вашего устройства, а затем выполнить принудительную установку драйвера cyusb.sys.

 

5. Как узнать, в каком режиме девайс работает - full speed или high speed?

Посмотреть с помощью CyConsole.exe. Если для Bulk endpoint "Max Pkt Size" равно 512, то девайс работает в high speed, если 64, то в full speed.

 

6. Сейчас сижу под вистой. Могут ли возникнуть проблемы из-за несовместимости с ней старого драйвера?

Могут, используйте cyusb.sys для Vista.

 

7. (пространный) Может ли в устройстве быть защита, которая не позволит ему работать не с родной программой? (догадываюсь, что может). Может ли быть защита, которая не позволит ему работать с инструментарием от cypress? Может ли быть защита, которая что-нибудь сломает, если "узнает", что я пытаюсь написать свою софтину?

Если под программой Вы понимаете firmware для FX2LP, то не может, даже если модуль содержит внешний watchdog. Если под программой Вы понимаете программу для ПЭВМ, то это не защита, а незнание протокола обмена с firmware.

 

8. Какой алгоритм дальнейшей работы посоветуете? Какие программы использовать? Какие вопросы у меня еще не возникли, но могут возникнуть в ближайшее время? На какие подводные камни я могу напороться?

Читать документацию, темы данного подфорума и задавать вопросы.

Современные.

Почему никто не отвечает на Ваши вопросы.

На нежелание читать документацию и злобные ответы на Ваши вопросы :)

 

Невнимательно я прочитал Ваш топик. Увы мне.

В качестве совета: Вам будет легче выполнить поставленную задачу если Вы перейдете от ezusb.sys к cyusb.sys и от C++ к C#.

Edited by Konst_777

Share this post


Link to post
Share on other sites
Можно, нужно отредактировать cyusb.inf файл, добавив в него VID и PID для Вашего устройства, а затем выполнить принудительную установку драйвера cyusb.sys.

Читая сайт сайпресс, нашел, что новый драйвер "не будет работать со старыми разработками". Я правильно Вас понял, что не меняя старую прошивку устройства, написанную под ezusb.sys, я смогу так же осуществлять с ней взаимодействие через драйвер сyusb.sys? В чем тогда несовместимость? Только со стороны софта? То есть программа от разработчика перестанет работать, а я свой софт все же смогу написать? Или вообще совместимость полная, а я запутался...

 

Посмотреть с помощью CyConsole.exe. Если для Bulk endpoint "Max Pkt Size" равно 512, то девайс работает в high speed, если 64, то в full speed.

64. А проблема именно со скоростью. Может можно просто изменить режим на high speed, не меняя софта и не создавая себе проблем? Как это сделать? Такое изменение потребует изменения прошивки, софта, или и того и другого?

 

Читайте в теме Проблема с cy7c68013a. Скопировать нужно все содержимое EEPROM. По типу EEPROM определите ее емкость. Посмотрите, может быть Ваш модуль содержит перемычку или джампер, с помощью которых можно отключить EEPROM.

На всякий случай, еще раз обращу внимание на то, что мне требуется именно написать софт для уже готового устройства с готовой прошивкой. Я даже открывать его не могу, т.к. на нем гарантийная пломба и.т.д. Я в самом крайнем случае могу прошить его через USB, но для этого нужно сначала быть уверенным, что я ничего не потеряю.

 

Konst_777, большое спасибо за развернутый ответ.

Share this post


Link to post
Share on other sites
На всякий случай, еще раз обращу внимание на то, что мне требуется именно написать софт для уже готового устройства с готовой прошивкой. Я даже открывать его не могу, т.к. на нем гарантийная пломба и.т.д. Я в самом крайнем случае могу прошить его через USB, но для этого нужно сначала быть уверенным, что я ничего не потеряю.

В таком случае, почему есть уверенность, что у Вас в этом черном ящике контроллер FX2, а не FX1 (только Full Speed)? Тогда было бы понятно почему нет High-Speed соединения. Какая документация есть у Вас на это устройство?

 

64. А проблема именно со скоростью. Может можно просто изменить режим на high speed, не меняя софта и не создавая себе проблем? Как это сделать? Такое изменение потребует изменения прошивки, софта, или и того и другого?

На всякий случай проверьте, что Ваш компьютер поддерживает High-Speed USB: проверьте, что в менеджере устройств в ветке "Контроллеры USB" присутствует "Стандартный расширенный USB хост-контроллер". Или измерьте среднюю скорость копирования большого по объему файла с современной флэшки на диск ПЭВМ.

 

Читая сайт сайпресс, нашел, что новый драйвер "не будет работать со старыми разработками".

Можете дать ссылку?

 

... Я правильно Вас понял, что не меняя старую прошивку устройства, написанную под ezusb.sys, я смогу так же осуществлять с ней взаимодействие через драйвер сyusb.sys? В чем тогда несовместимость? Только со стороны софта? То есть программа от разработчика перестанет работать, а я свой софт все же смогу написать? Или вообще совместимость полная, а я запутался...

Любое устройство USB (USB device) представляет собой набор endpoints. Или говорят о pipes - каналах обмена. Так вот, сyusb.sys является универсальным драйвером USB устройств и может общаться со всеми endpoint-ми, которые поддерживает firmware устройства USB.

Share this post


Link to post
Share on other sites
В таком случае, почему есть уверенность, что у Вас в этом черном ящике контроллер FX2, а не FX1 (только Full Speed)? Тогда было бы понятно почему нет High-Speed соединения. Какая документация есть у Вас на это устройство?

 

Есть хитрым путем добытый ОЕМ-мануал, в котором написано, что контроллер CY7C68013. Так же там есть описание всех USB-команд с форматами пакетов для режимов high speed и full speed.

 

Проверьте, что в менеджере устройств в ветке "Контроллеры USB" присутствует "Стандартный расширенный USB хост-контроллер

 

Есть. Intel® ICH8 Family USB2 Enhanced Host Controller - 2836.

 

Читая сайт сайпресс, нашел, что новый драйвер "не будет работать со старыми разработками".

Можете дать ссылку?

 

Прошу прощения, ввел в заблуждение из-за дефекта днк своего устройства памяти. Там написано:

"Please note that the cyusb.sys driver has a different API (CYAPI) than the ezusb.sys driver that host applications will have to communicate through. Thus, host applications written for one driver will not be compatible with the other. It is recommended that new designs start with the cyusb.sys driver."

http://www.cypress.com/?rID=32538

 

 

Опишу всю историю в надежде, что это поможет. Этот девайс был заказан из заморских стран по причине того, что именно скоростные характеристики указаны очень хорошие. Но оказалось, что они не соответствуют заявленным и работает он примерно в 2 раза медленнее, а это для нас недопустимо. На все возмущенные запросы в службу технической поддержки ответ был один - раньше(при тестах) он работал быстрее, но потом у всех что-то случилось и такой скорости уже не удается добиться. А команда разработчиков софта для девайса была сторонняя. Они деньги получили и ошибки уже править отказываются. Фантастика! Сначала не верилось. Начали изучать. Оказалось, что во время работы девайса процессор загружается на 100%. Программа написана на Java. Скорее всего, перестало у всех работать из-за выхода новой версии джавы. Пытались скачать старые, но это результата не дало. Вот и появилась идея свой софт написать. А сейчас оказалось, что девайс работает в bulk mode, да еще и с full speed. Можно ли просто full заменить на high и избавиться от проблем?

 

 

Share this post


Link to post
Share on other sites
...Можно ли просто full заменить на high и избавиться от проблем?

Начинать нужно с установки драйвера cyusb.sys. А затем разбираться, какой все таки используется контроллер и что не дает ему работать в High Speed.

 

 

Есть. Intel® ICH8 Family USB2 Enhanced Host Controller - 2836.

Все таки, подключите к тому же разъему USB ПЭВМ, к которому Вы подключаете Ваше устройство, современную USB-флешку и измерьте среднюю скорость копирования большого по объему файла с USB-флешки на диск ПЭВМ.

Edited by Konst_777

Share this post


Link to post
Share on other sites

Добрый день. Ситуация такая. Драйвер cyusb.sys настроил, работаю с ним в C++. Используя метод XferData, получаю из устройства в цикле 1000 раз по 4 Кбайта. Эта операция занимает от 2 до 5 секунд. Устройство может выдавать свои 4 Кбайта каждую миллисекунду, то есть операция должна занимать около секунды. Как узнать, где теряется скорость, и как это можно исправить? Возможно, нужно использовать более быстрые методы драйвера? Или 4МБ/с - это уже проблема для USB?

Share this post


Link to post
Share on other sites

Оно же USBee нескольких модификаций, оно же LOGIC-U (у последнего драйвера именно от saleae) ;)

24 Мб в секунду там не всегда получается, зависит от многих факторов. Например, Касперский...

Кстати, непонятно, почему 24 максимум - CY7C68013 может вытянуть 48 (по даташиту 96 MBps, но это в две стороны).

Share this post


Link to post
Share on other sites
Добрый день. Ситуация такая. Драйвер cyusb.sys настроил, работаю с ним в C++. Используя метод XferData, получаю из устройства в цикле 1000 раз по 4 Кбайта. Эта операция занимает от 2 до 5 секунд. Устройство может выдавать свои 4 Кбайта каждую миллисекунду, то есть операция должна занимать около секунды. Как узнать, где теряется скорость, и как это можно исправить? Возможно, нужно использовать более быстрые методы драйвера? Или 4МБ/с - это уже проблема для USB?

40 МБайт в секунду вполне реально, но нужен свой драйвер. Стандартные тормознутые, хотя и на них можно организовать обмен в 10-20 МБ/с.

По поводу "1000 раз по 4 Кбайта" - цикл выполняется в User Mode со всеми вытекающими из этого проблемами. Попробуй работать с блоками большего размера 64Кб к примеру.

Share this post


Link to post
Share on other sites
40 МБайт в секунду вполне реально, но нужен свой драйвер. Стандартные тормознутые, хотя и на них можно организовать обмен в 10-20 МБ/с.

По поводу "1000 раз по 4 Кбайта" - цикл выполняется в User Mode со всеми вытекающими из этого проблемами. Попробуй работать с блоками большего размера 64Кб к примеру.

Протокол устройства сделан таким образом, что читать приходится именно блоками по 4к и изменить это не возможно без вмешательства в него. User Mode это относится к контроллеру в устройстве или в PC? Где об этих режимах прочитать можно?

Share this post


Link to post
Share on other sites
Протокол устройства сделан таким образом, что читать приходится именно блоками по 4к и изменить это не возможно без вмешательства в него. User Mode это относится к контроллеру в устройстве или в PC? Где об этих режимах прочитать можно?

Что значит "именно блоками по 4К"? 4К - это несколько транзакций для USB протокола, а где их несколько - можно попробовать увеличить. Единственная проблема, если после каждого блока нужно слать ответ-подтверждение. В таком случае нормальной скорости не добьешься никак.

Kernel & User mode

Share this post


Link to post
Share on other sites
Что значит "именно блоками по 4К"? 4К - это несколько транзакций для USB протокола, а где их несколько - можно попробовать увеличить.

Устройство сделано так, что я отправляю туда один запрос размером 1 байт. Оно в ответ выплевывает 8 транзакций по 512 байт и одну с sync packet'ом. Потом все повторяется заново. Так вот, эта операция должна занимать не больше 1 миллисекунды. А получается какая-то ерунда. Используя USB monitor, получаю удивительные результаты. Все работает сверхбыстро, пока куда-то не пропадают 15мс(смотри скриншот). Где искать причину?

post-50601-1283938931_thumb.jpg

Share this post


Link to post
Share on other sites
...Все работает сверхбыстро, пока куда-то не пропадают 15мс(смотри скриншот). Где искать причину?

Происходит переключение на поток другого процесса. Это нормальная работа Windows.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this