|
STM32F407 + USB, help! |
|
|
|
Dec 1 2012, 21:37
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Пытаюсь разобраться с USB. Взял пример USB HOST MSC из библиотеки. Он рассчитан на отладочную плату STM3240_41_G_EVAL, у меня ее нет. Зато есть другая отладочная плата, на ней стоит STM32F407 с кварцем, и все ноги выведены на пины. Есть пара светодиодов и кнопка. Поэтому я закоментировал в примере все связанное с LCD, SDIO, и переправил светодиоды и кнопку на другие пины. К А12 А12 подсоединил (~10см, если это важно) проводами USB-A разьем. (т.е используется USB_FS) Управление питанием не использую, +5в напрямую идет на разьем. мейн выглядит так: CODE 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. Я его не использовал, но ставил бряк на этом колбеке - вроде оно туда не попадает. Есть еще несколько вопросов, но сначала надо чтобыхоть что-то заработало
Сообщение отредактировал IgorKossak - Dec 1 2012, 22:06
Причина редактирования: [codebox] для длинного кода!!!
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 15)
|
Dec 2 2012, 14:46
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797

|
Если еще нужно, в аттаче рабочий пример, запускал на ф4дискавери с платой расширения. Кнопка на C7, после двух нажатий на флешку пишется файлик. Частота кварца у вас какая?
|
|
|
|
|
Dec 2 2012, 15:27
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(Flexz @ Dec 2 2012, 16:46)  Если еще нужно, в аттаче рабочий пример, запускал на ф4дискавери с платой расширения. Кнопка на C7, после двух нажатий на флешку пишется файлик. Частота кварца у вас какая? Большое спасибо, я попробую. Кварц сейчас 8мгц стоит, но в общем, могу любой туда впаять, или сетап подправить. На это у меня мозгов зхватит (в отличие от ЮСБ, пока). Вы пробовали сразу с HS или с FS тоже? Я сделал отдельную платку с USB3300, но чтобы не иметь слишком много неизвестных - хотел сначала попробовать MSC Host на USB FS, потом на USB HS в режиме FS (т.е. все без внешних устройств) а потом уже USB HS_PHY. Если я в FS, достаточно ли просто два провода D-/D+ от проца к ЮСБ разьему, и +5/0 на разьем? Или надо обязательно делать питание с управлением, на какой-нибудь LM3526 ? Поскольку с ЮСБ в контроллерах первый раз сталкиваюсь, не возражаете если потом еще немного подонимаю новичковыми вопросами?
|
|
|
|
|
Dec 2 2012, 18:03
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797

|
Вообще я с HS работаю сейчас. Но тот пример собран именно под FS, специально проверил перед тем как залить. Сейчас попробовал сделать питание постоянно включенным - работает, так что управление, видимо, необязательно делать. PS спрашивайте, конечно, мне оно тоже интересно - отвечая на казалось бы простые вопросы нередко сам много нового узнаешь
|
|
|
|
|
Dec 3 2012, 00:00
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Ну я и тупой!!Й На дискавери заработало, я оказывается д- и д+ наоборот припаял. Теперь интересно заработает ли на моей платке (неужели я когда проверял, на ней тоже пеерпутал?!). Но это уже завтра. Если все будет ОК, буду подключать PHY для HS, а пока буду задавать вопосы по теории.
Может кто вкратце расскажет или подскажет где почитать - про эти колбеки, которые генерирую стек USB, и процедуру USBH_Process(&USB_OTG_Core, &USB_Host); Т.е. как всем этим пользоваться и как строить свою программу (пока без ОС).
Сейчас main состоит из бесконечного цикла вокруг этой процедуры. При определения USB-устройства, проходят все колбеки подключения, конца энумерации, индексов и прочей информации о подключенном девайсе. Далее вызывается User Input, если он возврящает RESP_OK то происходит вызов USBH_USR_MSC_Application, который будет вызываться все время, пока будет возвращать не ноль. Механизм вроде как понятнет, но его практическое применение - пока нет.
|
|
|
|
|
Dec 3 2012, 06:37
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797

|
Ну USBH_USR_MSC_Application, вероятно, по их задумке должен реализовывать автомат управления. А USBH_Process, в свою очередь долден вызываться из своего таска ОС. Но это все теория, пока не пробовал, т.к. сам только с неделю хост ковыряю. Кстати, для подключения к дискавери юзал вот такой переходник, удобная штука.
|
|
|
|
|
Dec 3 2012, 12:57
|

Участник

Группа: Участник
Сообщений: 42
Регистрация: 18-08-09
Из: Сибири
Пользователь №: 51 936

|
Цитата(Allregia @ Dec 2 2012, 19:27)  Если я в FS, достаточно ли просто два провода D-/D+ от проца к ЮСБ разьему, и +5/0 на разьем? Или надо обязательно делать питание с управлением, на какой-нибудь LM3526 ? Если устройство используется только в качестве хоста, то так можно сделать (и если не требуется зачем-нибудь дёргать питанием USB девайса), если контроллер должен быть Dual-Role-Device, то тогда надо питание подключать через ключ, чтобы в режиме девайса на USB разъёме были только +5 от одного источника. Кстати, может кто-нибудь подскажет глубинный смысл функции задержки BSP_Delay ? У меня ограничение в скорости удалось сильно подвинуть, уменьшив эту задержку в юзеровском конечном автомате (я упустил из виду эту функцию, капитально тормозившую мне всё). Но при очень маленьких значениях задержки, или её отсутствии, контроллер виснет (при записи во флеш).
|
|
|
|
|
Dec 4 2012, 16:43
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(kan35 @ Dec 4 2012, 17:22)  Разберитесь конечно, хотя я могу вас заверить, я проверял пример 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. Модераторы, исправьте плиз описку в названии темы.
|
|
|
|
|
Dec 5 2012, 14:39
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Мужики (и дамы. если присутствуют), все чудесатее и чудесатее - по совету уважаемого Flexz'а решил посмотреть "Флешка с D+ подтяжку снимает?" Да, снимает. Но (!) - как только я прицепил к D- осциллограф (щуп"правильный" - Tek TPP0200: 1:10, 200МГц 10МОм 12 пФ) все заработало! Касание к D+ эффекта не дает. Т.е. уже очевидно - проблемы в железе. Вот, видно процесс. В HS должны быть такие маленькие уровни? Помниться, там вроде токовый сигнал?
Эскизы прикрепленных изображений
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|