Страница 1 из 1
STM32Fxxx USB и external pullup на D+
Добавлено: Ср июн 12, 2013 17:42:00
balmer
Разбираюсь потихоньку с USB на STM32 - столкнулся с непониманием такого момента.
На демоплатах и примерах подключают external pullup для D+ линии через резистор 1.5 кОм и буферный транзистор.
Зачем нужен буферный транзистор? Почему бы не подключить к ноге микроконтроллера напрямую? Неужели пару маллиамер не потянет?
Собственно говоря все управление этим входом сводится к тому, что на резистор подается напряжение после полной инициализации устройства. Насколько это критично? Вон в схемках для ATmega8 с софтварным USB подключают этот резистор сразу к питанию и не парятся...
Re: STM32Fxxx USB и external pullup на D+
Добавлено: Ср июн 12, 2013 18:44:51
ut1wpr
balmer писал(а):Разбираюсь потихоньку с USB на STM32 - столкнулся с непониманием такого момента.
На демоплатах и примерах подключают external pullup для D+ линии через резистор 1.5 кОм и буферный транзистор.
Зачем нужен буферный транзистор? Почему бы не подключить к ноге микроконтроллера напрямую? Неужели пару маллиамер не потянет?
Собственно говоря все управление этим входом сводится к тому, что на резистор подается напряжение после полной инициализации устройства. Насколько это критично? Вон в схемках для ATmega8 с софтварным USB подключают этот резистор сразу к питанию и не парятся...
Не все и не всегда.
На моей китайской борде вот так:
Спойлер

На плате проекта тоже так же. Мне не нужен индикаторный светодиод, как это делают в случае с ключом.
Надо обратить внимание на функцию:
Спойлер
Код: Выделить всё
/*******************************************************************************
* Function Name : USB_Cable_Config
* Description : Software Connection/Disconnection of USB Cable
* Input : None.
* Return : Status
*******************************************************************************/
void USB_Cable_Config (FunctionalState NewState)
{
if (NewState != DISABLE)
{
GPIO_SetBits(USB_DISCONNECT, USB_DISCONNECT_PIN);
}
else
{
GPIO_ResetBits(USB_DISCONNECT, USB_DISCONNECT_PIN);
}
}
Нужно, чтобы было правильно. Не перепутать, когда включать, а когда выключать.
Re: STM32Fxxx USB и external pullup на D+
Добавлено: Чт июн 13, 2013 10:44:00
balmer
ut1wpr писал(а):
На моей китайской борде вот так:
Ок, спасибо, выкинем лишние детальки.
Re: STM32Fxxx USB и external pullup на D+
Добавлено: Чт июн 13, 2013 13:04:04
Satyr
balmer писал(а):Разбираюсь потихоньку с USB на STM32 - столкнулся с непониманием такого момента.
На демоплатах и примерах подключают external pullup для D+ линии через резистор 1.5 кОм и буферный транзистор.
Зачем нужен буферный транзистор? Почему бы не подключить к ноге микроконтроллера напрямую? Неужели пару маллиамер не потянет?
Потому что внутреннее сопротивление там на фоне 1.5кОм величина в много раз бОльшая, чем допуск на ток по линии.
И что за девайс ? с источником питания или от УСБ ?
Если с УСБ, вешай сразу через 1.5кОм на +3.3, на кой поддержка дисконнекта в таком девайсе ?
Re: STM32Fxxx USB и external pullup на D+
Добавлено: Чт июн 13, 2013 15:00:14
balmer
Satyr писал(а):
Потому что внутреннее сопротивление там на фоне 1.5кОм величина в много раз бОльшая, чем допуск на ток по линии.
И что за девайс ? с источником питания или от УСБ ?
Если с УСБ, вешай сразу через 1.5кОм на +3.3, на кой поддержка дисконнекта в таком девайсе ?
Нет, хочу сделать для обучения термометр-гигрометр. С батарейным питанием. Так, что при подключении USB он либо будет спать, либо работать на низкой частоте.
Re: STM32Fxxx USB и external pullup на D+
Добавлено: Чт июн 13, 2013 15:04:45
Satyr
Видимо всетаки спать и на низкой частоте когда отключен ? -)))
Так как раз ОК и будет.
С отключаем пулапом надо наоборот, когда надо чтоб девайс был воткнут, но не глубоко спал и не мог отвечать по УСБ.
Re: STM32Fxxx USB и external pullup на D+
Добавлено: Пт июн 28, 2013 14:05:10
balmer
Сделал таки схемку где pullup резистор подключается сразу к питанию. Основной недостаток такого решения - неудобство отладки. Каждый раз после перезаливки микропрограммы надо отключать от USB и включать устройство. Так что в следующий раз таки не поленюсь, и выделю на это одну сигнальную линию. Либо воспользуюсь STM32Lxxx линейкой девайсов, там pullup встроен внутрь.
Re: STM32Fxxx USB и external pullup на D+
Добавлено: Пт июн 28, 2013 18:23:53
dosikus
Угу , аналогично . Так же в новой версии прототипа решил это предусмотреть.
Re: STM32Fxxx USB и external pullup на D+
Добавлено: Сб июл 06, 2013 14:48:43
misyachniy
Разбираюсь потихоньку с USB на STM32 - столкнулся с непониманием такого момента.
На демоплатах и примерах подключают external pullup для D+ линии через резистор 1.5 кОм и буферный транзистор
В USB хост линии D+ и D- притянуты к земле.
При присоединении резистора 1.5 кОм к шине +/- хост хост детектирует подключение и по конкретному выводу определяе LS или FS/HS устройство подключено.
В Atmel SAM7 серии сопротивление подтяжек низкое, по моему ниже 5К. таким образом сразу же после подключения устройства происходит детектирование устройства и ОС начинает перенумерацию устройств. Транзистор дает возможность микроконтроллеру запустить кварц, настроить PLL и сделать другие нужные действия, а затем произвести подключение к хосту.
Я лично всегда использую подключение резистора напрямую к выводу микроконтроллера.
Для отладки вставляю отключение от D+ и паузу около 2 секунд.
Re: STM32Fxxx USB и external pullup на D+
Добавлено: Сб июл 27, 2013 17:52:25
Neekeetos
balmer писал(а):Зачем нужен буферный транзистор? Почему бы не подключить к ноге микроконтроллера напрямую? Неужели пару маллиамер не потянет?
На многих стмках внешний пулап вообще не нужен, там есть встроеный в контроллер пулап, которым можно управлять. Советую проверить есть ли в юзер мануале на проц в разделе юсб упоминание пулапов.
Re: STM32Fxxx USB и external pullup на D+
Добавлено: Сб июл 27, 2013 18:51:16
Neekeetos
Сейчас проверил для 32f101(/2/3/5/7), в регистре OTG_FS_DCTL бит SDIS отвечает за пулап, если включен вход usb_vbus то он подключается автоматически при появлении питания на юсб, тоесть дополнительного пулапа не нужно. В 32L1хх и 32f2/f4 аналогично, достаточно проинициализировать юсб и пулап включается.
Re: STM32Fxxx USB и external pullup на D+
Добавлено: Вс июл 28, 2013 10:27:31
balmer
Neekeetos писал(а):Сейчас проверил для 32f101(/2/3/5/7), в регистре OTG_FS_DCTL бит SDIS отвечает за пулап
Действительно, есть. Пойду выпаивать резистор и проверять.
Ложная тревога, перечитал тщательно документацию.
В семействе STM32F10x есть Connectivity Line (F105, F107) - внутри нее USB OTG_FS, там есть PullUp резистор.
И есть все остальное, у которых просто USB FS, без PullUp резистора. У меня F103.
В STM32L серии также встроен PullUp.
PS: Аватарка ужасная, мешает читать сообщения.
Re: STM32Fxxx USB и external pullup на D+
Добавлено: Вс июл 28, 2013 15:46:27
Neekeetos
Вообще я не знаю что у стм за документация, но я пару раз в реф мануале не мог даже поиском по тексту найти упоминание о пулапах на юсб, нашел только лишь потому что точно знал что он там есть
balmer писал(а):PS: Аватарка ужасная, мешает читать сообщения.
Поменял.