Allregia 9 1 декабря, 2012 Опубликовано 1 декабря, 2012 (изменено) · Жалоба Пытаюсь разобраться с USB. Взял пример USB HOST MSC из библиотеки. Он рассчитан на отладочную плату STM3240_41_G_EVAL, у меня ее нет. Зато есть другая отладочная плата, на ней стоит STM32F407 с кварцем, и все ноги выведены на пины. Есть пара светодиодов и кнопка. Поэтому я закоментировал в примере все связанное с LCD, SDIO, и переправил светодиоды и кнопку на другие пины. К А12 А12 подсоединил (~10см, если это важно) проводами USB-A разьем. (т.е используется USB_FS) Управление питанием не использую, +5в напрямую идет на разьем. мейн выглядит так: int main(void) { __IO uint32_t i = 0; /* Init Host Library */ USBH_Init(&USB_OTG_Core, #ifdef USE_USB_OTG_FS USB_OTG_FS_CORE_ID, #else USB_OTG_HS_CORE_ID, #endif &USB_Host, &USBH_MSC_cb, &USR_cb); while (1) { /* Host Task handler */ USBH_Process(&USB_OTG_Core, &USB_Host); // добавил: ------------------------------ if(HCD_IsDeviceConnected(&USB_OTG_Core)) STM_EVAL_LEDOn(LED2); else STM_EVAL_LEDOff(LED2); //------------------------------------------- if (i++ == 0x10000) { STM_EVAL_LEDToggle(LED1); //STM_EVAL_LEDToggle(LED2); //STM_EVAL_LEDToggle(LED3); //убрал //STM_EVAL_LEDToggle(LED4); //убрал i = 0; } } } т.е почти как в оригинале, только убрал мигание 2-4 лэдов, и вставил проверку с выводом в лед2. В итоге - лэд1 мигает, лэд2 - никак. Этот пример вообще рабочий? Может кто посмотрит? Или кинет свой рабочий пример? Вижу один пин настраивается еще ввод какого-то оверкаррент, с прерыванием EXTI, и callback. Я его не использовал, но ставил бряк на этом колбеке - вроде оно туда не попадает. Есть еще несколько вопросов, но сначала надо чтобыхоть что-то заработало f4usbtest.rar Изменено 1 декабря, 2012 пользователем IgorKossak [codebox] для длинного кода!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 2 декабря, 2012 Опубликовано 2 декабря, 2012 · Жалоба Если еще нужно, в аттаче рабочий пример, запускал на ф4дискавери с платой расширения. Кнопка на C7, после двух нажатий на флешку пишется файлик. Частота кварца у вас какая? USB_HS_Examples.7z Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 2 декабря, 2012 Опубликовано 2 декабря, 2012 · Жалоба Если еще нужно, в аттаче рабочий пример, запускал на ф4дискавери с платой расширения. Кнопка на C7, после двух нажатий на флешку пишется файлик. Частота кварца у вас какая? Большое спасибо, я попробую. Кварц сейчас 8мгц стоит, но в общем, могу любой туда впаять, или сетап подправить. На это у меня мозгов зхватит (в отличие от ЮСБ, пока). Вы пробовали сразу с HS или с FS тоже? Я сделал отдельную платку с USB3300, но чтобы не иметь слишком много неизвестных - хотел сначала попробовать MSC Host на USB FS, потом на USB HS в режиме FS (т.е. все без внешних устройств) а потом уже USB HS_PHY. Если я в FS, достаточно ли просто два провода D-/D+ от проца к ЮСБ разьему, и +5/0 на разьем? Или надо обязательно делать питание с управлением, на какой-нибудь LM3526 ? Поскольку с ЮСБ в контроллерах первый раз сталкиваюсь, не возражаете если потом еще немного подонимаю новичковыми вопросами? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 2 декабря, 2012 Опубликовано 2 декабря, 2012 · Жалоба Вообще я с HS работаю сейчас. Но тот пример собран именно под FS, специально проверил перед тем как залить. Сейчас попробовал сделать питание постоянно включенным - работает, так что управление, видимо, необязательно делать. PS спрашивайте, конечно, мне оно тоже интересно - отвечая на казалось бы простые вопросы нередко сам много нового узнаешь :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 2 декабря, 2012 Опубликовано 2 декабря, 2012 · Жалоба Где-то у меня видимо какая-то "системная ошибка", потому что и с Вашим кодом не получилось ни на моей платке, ни на дискавери. (написал Вам в личку). Коллбеки DeviceAttched/DeviceDisconnected/DeviceSpeed отрабатываются, обламывается на энумерации. Где именно пока не установил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 3 декабря, 2012 Опубликовано 3 декабря, 2012 · Жалоба Ну я и тупой!!Й На дискавери заработало, я оказывается д- и д+ наоборот припаял. Теперь интересно заработает ли на моей платке (неужели я когда проверял, на ней тоже пеерпутал?!). Но это уже завтра. Если все будет ОК, буду подключать PHY для HS, а пока буду задавать вопосы по теории. Может кто вкратце расскажет или подскажет где почитать - про эти колбеки, которые генерирую стек USB, и процедуру USBH_Process(&USB_OTG_Core, &USB_Host); Т.е. как всем этим пользоваться и как строить свою программу (пока без ОС). Сейчас main состоит из бесконечного цикла вокруг этой процедуры. При определения USB-устройства, проходят все колбеки подключения, конца энумерации, индексов и прочей информации о подключенном девайсе. Далее вызывается User Input, если он возврящает RESP_OK то происходит вызов USBH_USR_MSC_Application, который будет вызываться все время, пока будет возвращать не ноль. Механизм вроде как понятнет, но его практическое применение - пока нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 3 декабря, 2012 Опубликовано 3 декабря, 2012 · Жалоба Ну USBH_USR_MSC_Application, вероятно, по их задумке должен реализовывать автомат управления. А USBH_Process, в свою очередь долден вызываться из своего таска ОС. Но это все теория, пока не пробовал, т.к. сам только с неделю хост ковыряю. Кстати, для подключения к дискавери юзал вот такой переходник, удобная штука. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dubb 0 3 декабря, 2012 Опубликовано 3 декабря, 2012 · Жалоба Если я в FS, достаточно ли просто два провода D-/D+ от проца к ЮСБ разьему, и +5/0 на разьем? Или надо обязательно делать питание с управлением, на какой-нибудь LM3526 ? Если устройство используется только в качестве хоста, то так можно сделать (и если не требуется зачем-нибудь дёргать питанием USB девайса), если контроллер должен быть Dual-Role-Device, то тогда надо питание подключать через ключ, чтобы в режиме девайса на USB разъёме были только +5 от одного источника. Кстати, может кто-нибудь подскажет глубинный смысл функции задержки BSP_Delay ? У меня ограничение в скорости удалось сильно подвинуть, уменьшив эту задержку в юзеровском конечном автомате (я упустил из виду эту функцию, капитально тормозившую мне всё). Но при очень маленьких значениях задержки, или её отсутствии, контроллер виснет (при записи во флеш). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 3 декабря, 2012 Опубликовано 3 декабря, 2012 · Жалоба Итак, OTG1_FS заработал на дискавери и на моей плате. Теперь пробую OTG2_FS (т.е. HS интерфейс в режиме FS). Для этого перепаял D-/D+ с PA11/PA12 на PB14/PB15, болге ничего не трогал. В программе поменял в глобальных дефайнах USE_USB_OTG_FS на USE_USB_OTG_HS, USE_EMBEDDED_PHY Перекомпилировал, запустил - фигвам. Не регагирует никак, даже при вставлении флешки не колбекает на USBH_USR_DeviceAttached(). Что на моей платке, что на дискавери, все одинаково. Прежде чем припаивать ULPI_PHY хотелось бы разобраться с этим. Что я делаю "не так" ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 4 декабря, 2012 Опубликовано 4 декабря, 2012 (изменено) · Жалоба Разберитесь конечно, хотя я могу вас заверить, я проверял пример HS на ULPI_PHY на -EVAL борде - рабочий Изменено 4 декабря, 2012 пользователем kan35 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 4 декабря, 2012 Опубликовано 4 декабря, 2012 · Жалоба Разберитесь конечно, хотя я могу вас заверить, я проверял пример HS на ULPI_PHY на -EVAL борде - рабочий Честно говоря. так и не разобрался, соблазнившись припаять ULPI. Но увы - чуда не произошло, и ULPI не пошел, хотя и сдвнулся с места. На вставление флешки сразу среагировало, я обрадовался что все ОК, но не тут-то было - файл не записался. Сейчас проверяю последовательно брейкпойнтами. Энумерация проходит, PID/VID/Manufacturer считываются правильно, проходит через USR_INPUT -> HOST_CLASS_REQUEST -> HOST_CLASS и вот дальше где-то улетает в HOST_ERROR_STATE. P.S. У меня платка с ULPI своя, но что там быть-то может, схема из 3-х деталей! Единственно что - 12к резистор не нашел 1%, поставил обычный. Это может быть важно? К моей плате прицеплена плоским кабелем, сантиметров 5 цельным, потом еще сантиметров 5 распушенным. P.P.S. Модераторы, исправьте плиз описку в названии темы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 4 декабря, 2012 Опубликовано 4 декабря, 2012 · Жалоба Может улетает при переключении с FS на HS? Флешка с D+ подтяжку снимает? У нас на своей плате ULPI заработало сходу, физика USB3300. Вот встроенный драйвер FS на втором контроллере USB не пробовал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 4 декабря, 2012 Опубликовано 4 декабря, 2012 · Жалоба Да, похоже что улетает именно когда с FS на HS переходит. Подтяжку не смотрел. У меня тоже USB3300. Может у меня с разводкой чего? ТАм вообще такие драконовские требования к разводке в HS - и ширина дорожек, и расстояние, да еще пишут что разница в длине обоиз проводов чуть ли не макимум 2-3мм допускается! У меня все это выдаржать не получилось, но и расстояние до разема мизерное, пару сантиметров. И что с резистором 12К? Это баес чего? Он точно 1%-й нужен? В даташите написано 1%, в схеме эвалуйшн борде - уже ничгео не написано, просто "12к 1/10W" (у меня стоит 5%-й- 0.063вт, 0603). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 5 декабря, 2012 Опубликовано 5 декабря, 2012 · Жалоба Мужики (и дамы. если присутствуют), все чудесатее и чудесатее - по совету уважаемого Flexz'а решил посмотреть "Флешка с D+ подтяжку снимает?" Да, снимает. Но (!) - как только я прицепил к D- осциллограф (щуп"правильный" - Tek TPP0200: 1:10, 200МГц 10МОм 12 пФ) все заработало! Касание к D+ эффекта не дает. Т.е. уже очевидно - проблемы в железе. Вот, видно процесс. В HS должны быть такие маленькие уровни? Помниться, там вроде токовый сигнал? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 5 декабря, 2012 Опубликовано 5 декабря, 2012 · Жалоба Осциллограф с полосой мегагерц на 100-200? Тогда уровни "правильные", хотя сигнал шумновато как-то выглядит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться