Перейти к содержанию
    

Пытаюсь разобраться с 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

Изменено пользователем IgorKossak
[codebox] для длинного кода!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если еще нужно, в аттаче рабочий пример, запускал на ф4дискавери с платой расширения. Кнопка на C7, после двух нажатий на флешку пишется файлик.

Частота кварца у вас какая?

USB_HS_Examples.7z

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если еще нужно, в аттаче рабочий пример, запускал на ф4дискавери с платой расширения. Кнопка на C7, после двух нажатий на флешку пишется файлик.

Частота кварца у вас какая?

 

Большое спасибо, я попробую.

Кварц сейчас 8мгц стоит, но в общем, могу любой туда впаять, или сетап подправить. На это у меня мозгов зхватит (в отличие от ЮСБ, пока).

Вы пробовали сразу с HS или с FS тоже?

Я сделал отдельную платку с USB3300, но чтобы не иметь слишком много неизвестных - хотел сначала попробовать MSC Host на USB FS, потом на USB HS в режиме FS (т.е. все без внешних устройств) а потом уже USB HS_PHY.

 

Если я в FS, достаточно ли просто два провода D-/D+ от проца к ЮСБ разьему, и +5/0 на разьем? Или надо обязательно делать питание с управлением, на какой-нибудь LM3526 ?

 

 

Поскольку с ЮСБ в контроллерах первый раз сталкиваюсь, не возражаете если потом еще немного подонимаю новичковыми вопросами?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще я с HS работаю сейчас. Но тот пример собран именно под FS, специально проверил перед тем как залить.

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

PS спрашивайте, конечно, мне оно тоже интересно - отвечая на казалось бы простые вопросы нередко сам много нового узнаешь :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Коллбеки DeviceAttched/DeviceDisconnected/DeviceSpeed отрабатываются, обламывается на энумерации. Где именно пока не установил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну я и тупой!!Й На дискавери заработало, я оказывается д- и д+ наоборот припаял. Теперь интересно заработает ли на моей платке (неужели я когда проверял, на ней тоже пеерпутал?!). Но это уже завтра.

Если все будет ОК, буду подключать PHY для HS, а пока буду задавать вопосы по теории.

 

Может кто вкратце расскажет или подскажет где почитать - про эти колбеки, которые генерирую стек USB, и процедуру USBH_Process(&USB_OTG_Core, &USB_Host);

Т.е. как всем этим пользоваться и как строить свою программу (пока без ОС).

 

Сейчас main состоит из бесконечного цикла вокруг этой процедуры.

При определения USB-устройства, проходят все колбеки подключения, конца энумерации, индексов и прочей информации о подключенном девайсе.

Далее вызывается User Input, если он возврящает RESP_OK то происходит вызов USBH_USR_MSC_Application, который будет вызываться все время, пока будет возвращать не ноль.

Механизм вроде как понятнет, но его практическое применение - пока нет.

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну USBH_USR_MSC_Application, вероятно, по их задумке должен реализовывать автомат управления. А USBH_Process, в свою очередь долден вызываться из своего таска ОС. Но это все теория, пока не пробовал, т.к. сам только с неделю хост ковыряю.

Кстати, для подключения к дискавери юзал вот такой переходник, удобная штука.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если я в FS, достаточно ли просто два провода D-/D+ от проца к ЮСБ разьему, и +5/0 на разьем? Или надо обязательно делать питание с управлением, на какой-нибудь LM3526 ?

Если устройство используется только в качестве хоста, то так можно сделать (и если не требуется зачем-нибудь дёргать питанием USB девайса), если контроллер должен быть Dual-Role-Device, то тогда надо питание подключать через ключ, чтобы в режиме девайса на USB разъёме были только +5 от одного источника.

 

Кстати, может кто-нибудь подскажет глубинный смысл функции задержки BSP_Delay ? У меня ограничение в скорости удалось сильно подвинуть, уменьшив эту задержку в юзеровском конечном автомате (я упустил из виду эту функцию, капитально тормозившую мне всё). Но при очень маленьких значениях задержки, или её отсутствии, контроллер виснет (при записи во флеш).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Итак, 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 хотелось бы разобраться с этим. Что я делаю "не так" ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем kan35

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может улетает при переключении с FS на HS? Флешка с D+ подтяжку снимает?

У нас на своей плате ULPI заработало сходу, физика USB3300. Вот встроенный драйвер FS на втором контроллере USB не пробовал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Подтяжку не смотрел.

У меня тоже USB3300.

 

Может у меня с разводкой чего? ТАм вообще такие драконовские требования к разводке в HS - и ширина дорожек, и расстояние, да еще пишут что разница в длине обоиз проводов чуть ли не макимум 2-3мм допускается! У меня все это выдаржать не получилось, но и расстояние до разема мизерное, пару сантиметров.

И что с резистором 12К? Это баес чего? Он точно 1%-й нужен? В даташите написано 1%, в схеме эвалуйшн борде - уже ничгео не написано, просто "12к 1/10W" (у меня стоит 5%-й- 0.063вт, 0603).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Да, снимает.

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

Касание к D+ эффекта не дает.

Т.е. уже очевидно - проблемы в железе.

 

Вот, видно процесс. В HS должны быть такие маленькие уровни? Помниться, там вроде токовый сигнал?

post-28763-1354718349_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Осциллограф с полосой мегагерц на 100-200? Тогда уровни "правильные", хотя сигнал шумновато как-то выглядит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...