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

 
 
> STM32F407 + USB, help!
Allregia
сообщение Dec 1 2012, 21:37
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 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] для длинного кода!!!

Прикрепленные файлы
Прикрепленный файл  f4usbtest.rar ( 1.39 мегабайт ) Кол-во скачиваний: 30
 
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 15)
Flexz
сообщение Dec 2 2012, 14:46
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Если еще нужно, в аттаче рабочий пример, запускал на ф4дискавери с платой расширения. Кнопка на C7, после двух нажатий на флешку пишется файлик.
Частота кварца у вас какая?
Прикрепленные файлы
Прикрепленный файл  USB_HS_Examples.7z ( 898.29 килобайт ) Кол-во скачиваний: 87
 
Go to the top of the page
 
+Quote Post
Allregia
сообщение Dec 2 2012, 15:27
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 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 ?


Поскольку с ЮСБ в контроллерах первый раз сталкиваюсь, не возражаете если потом еще немного подонимаю новичковыми вопросами?
Go to the top of the page
 
+Quote Post
Flexz
сообщение Dec 2 2012, 18:03
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Вообще я с HS работаю сейчас. Но тот пример собран именно под FS, специально проверил перед тем как залить.
Сейчас попробовал сделать питание постоянно включенным - работает, так что управление, видимо, необязательно делать.
PS спрашивайте, конечно, мне оно тоже интересно - отвечая на казалось бы простые вопросы нередко сам много нового узнаешь sm.gif
Go to the top of the page
 
+Quote Post
Allregia
сообщение Dec 2 2012, 20:57
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



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

(написал Вам в личку).

Коллбеки DeviceAttched/DeviceDisconnected/DeviceSpeed отрабатываются, обламывается на энумерации. Где именно пока не установил.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Dec 3 2012, 00:00
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 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, который будет вызываться все время, пока будет возвращать не ноль.
Механизм вроде как понятнет, но его практическое применение - пока нет.




Go to the top of the page
 
+Quote Post
Flexz
сообщение Dec 3 2012, 06:37
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Ну USBH_USR_MSC_Application, вероятно, по их задумке должен реализовывать автомат управления. А USBH_Process, в свою очередь долден вызываться из своего таска ОС. Но это все теория, пока не пробовал, т.к. сам только с неделю хост ковыряю.
Кстати, для подключения к дискавери юзал вот такой переходник, удобная штука.
Go to the top of the page
 
+Quote Post
dubb
сообщение Dec 3 2012, 12:57
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 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 ? У меня ограничение в скорости удалось сильно подвинуть, уменьшив эту задержку в юзеровском конечном автомате (я упустил из виду эту функцию, капитально тормозившую мне всё). Но при очень маленьких значениях задержки, или её отсутствии, контроллер виснет (при записи во флеш).
Go to the top of the page
 
+Quote Post
Allregia
сообщение Dec 3 2012, 14:06
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Итак, 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 хотелось бы разобраться с этим. Что я делаю "не так" ?
Go to the top of the page
 
+Quote Post
kan35
сообщение Dec 4 2012, 15:22
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Разберитесь конечно, хотя я могу вас заверить, я проверял пример HS на ULPI_PHY на -EVAL борде - рабочий

Сообщение отредактировал kan35 - Dec 4 2012, 15:22
Go to the top of the page
 
+Quote Post
Allregia
сообщение Dec 4 2012, 16:43
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 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. Модераторы, исправьте плиз описку в названии темы.
Go to the top of the page
 
+Quote Post
Flexz
сообщение Dec 4 2012, 17:23
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Может улетает при переключении с FS на HS? Флешка с D+ подтяжку снимает?
У нас на своей плате ULPI заработало сходу, физика USB3300. Вот встроенный драйвер FS на втором контроллере USB не пробовал.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Dec 4 2012, 17:55
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Да, похоже что улетает именно когда с FS на HS переходит.
Подтяжку не смотрел.
У меня тоже USB3300.

Может у меня с разводкой чего? ТАм вообще такие драконовские требования к разводке в HS - и ширина дорожек, и расстояние, да еще пишут что разница в длине обоиз проводов чуть ли не макимум 2-3мм допускается! У меня все это выдаржать не получилось, но и расстояние до разема мизерное, пару сантиметров.
И что с резистором 12К? Это баес чего? Он точно 1%-й нужен? В даташите написано 1%, в схеме эвалуйшн борде - уже ничгео не написано, просто "12к 1/10W" (у меня стоит 5%-й- 0.063вт, 0603).
Go to the top of the page
 
+Quote Post
Allregia
сообщение Dec 5 2012, 14:39
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Мужики (и дамы. если присутствуют), все чудесатее и чудесатее - по совету уважаемого Flexz'а решил посмотреть "Флешка с D+ подтяжку снимает?"

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

Вот, видно процесс. В HS должны быть такие маленькие уровни? Помниться, там вроде токовый сигнал?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Flexz
сообщение Dec 5 2012, 17:19
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Осциллограф с полосой мегагерц на 100-200? Тогда уровни "правильные", хотя сигнал шумновато как-то выглядит.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Dec 5 2012, 18:20
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Да, 200мгц осциллграф.

Ну а что делать?
И еще я заметил такую зрень - если в Кейле запускаешь дебаггер (^F5), жмешь пуск (F5) - даже с осциллографом не всегда запускается. Если не нажимая красную кнопку (стоп) нажать на сброс (в Кейле а не физически), т.е. перезапустить программу - 100% успеха.
Ежели нажать стоп и потом старт - то не всегда.

Программа Ваша 1к1, единственное что я добавил - сброс USB3300 в начале.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:30
Рейтинг@Mail.ru


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