Это для тех, у кого "программаторов много не бывает". Некто решил подгадить, целью выбрал драйвер Cypress. У И90 возникли проблемы, поэтому пришлось сделать под WinUSB. Никаких улучшений не даёт (идентично работает), поэтому пока не выкладываю.
Чтобы немножко сдвинуть массовое скудоумие в положительную сторону, а также учитывая, что тему могут читать страдающие оным, но считающие себя "разработчиками", выкладываю текст функции инициализации usb-девайса (любого).
Код
void myCyDeviceGetHandle() { //uses myCyDeviceNumber as global var, and store result to HANDLE hCyDevice (global) //if (hCyDevice == INVALID_HANDLE_VALUE) myMesShow(_T("hDevice=null.")); //hCyDevice = (HANDLE)0xF0F0FAFA; //return; SP_DEVINFO_DATA devInfoData; SP_DEVICE_INTERFACE_DATA devInterfaceData; PSP_INTERFACE_DEVICE_DETAIL_DATA functionClassDeviceData;
ULONG requiredLength = 0; //int deviceNumber = 0;//set to 0 for init data for first interface - use global myCyDeviceNumber
//exit if driver cypress not installed??? - not, always returned some, must be destroyed. if (hwDeviceInfo == INVALID_HANDLE_VALUE) {if(0 == myCyDeviceNumber) myMesShow(_T("SetupDiGetClassDevs failed.")); return;}
Текст функции приведён из-за того, что какой-то тугоумный "разработчик" мотивировал использование им "библиотеки" тем, что "WinUSB трудно инициализировать", и у многих его братьев по разуму аналогичное мнение. Ну и вот вы можете видеть, насколько всё просто. Скопируйте текст функции и используйте.
Я сделал в Программе переключение для работы через драйвер WinUSB. Меня раньше не интересовал вопрос WinUSB. Оказалось, что драйвер WinUSB простой как полено. Мало того, драйвер ставится автоматически, и надо быть очень тупым, чтобы сделать устройство WinUSB, требующее каких-то манипуляций при установке. Если вы думаете, что ручная установка драйвера на устройство WinUSB это дно, то вы ошибаетесь. Людям с особо узким лбом не понравилась простота WinUSB, и они понаделали кучу "надстроек", т.наз. "библиотек", в которых после миллиона ненужных операций в конце концов вызывается всё тот же простой как полено WinUSB.
WinUSB нам понадобится для поддержки USB 3.0 при реализации UFS, а также при реализации USB 2.0 HS на микроконтроллерах не Cypress. Прошивки iic для fx2lp будут помечаться "winusb", если они под этот драйвер. Если вы переводите fx2lp с драйвера Cypress на драйвер WinUSB, то вам нужно загрузить прошивку winusb строго в eeprom, отключить Девайс, сосчитать до пяти и подключить его снова. Драйвер WinUSB установится автоматически.
при помощи FT_Prog сохранил дефолтное содержимое EEPROM,
Я тебе подскажу содержимое словами, не ищи. Там одни FF. Из Великой Программы можешь записать файлом с таким содержанием, если драйвер на FT232H встал.
Для FT232H max.speed переместить на 30 (для eMMC), остальное ничего трогать не надо, все настройки по умолчанию. У самой FT232H подходят настройки, когда она без внешней eeprom, т.е. тоже ничего не надо трогать.
ну и вообше в чем подвох после прошивки перестает работать
Пока что выявлена зависимость от питания и от скорости подачи прошивки, от работающего кинескопа поблизости. Но микросхема всегда выходит из ступора, попробуйте сравнить с каким-либо другим программатором с микросхемой в этом состоянии. Менять CID можно из файла, можно с предыдущей странички (галочку поставить), описано раньше.
У меня лежат собранные платки на LSF0204 несколько лет, скоро проверю с fx2lp, потому что кто-то ввёл меня в заблуждение, и я считал, что не работает. На TXS0108E я пытался LPT согласовать, но сходу не получилось, отложил, микросхема начинала генерировать на высокой частоте.