STM32Fxxx USB и external pullup на D+

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

Разбираюсь потихоньку с USB на STM32 - столкнулся с непониманием такого момента.
На демоплатах и примерах подключают external pullup для D+ линии через резистор 1.5 кОм и буферный транзистор.

Зачем нужен буферный транзистор? Почему бы не подключить к ноге микроконтроллера напрямую? Неужели пару маллиамер не потянет?

Собственно говоря все управление этим входом сводится к тому, что на резистор подается напряжение после полной инициализации устройства. Насколько это критично? Вон в схемках для ATmega8 с софтварным USB подключают этот резистор сразу к питанию и не парятся...
Реклама
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение 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);
  }
}
Нужно, чтобы было правильно. Не перепутать, когда включать, а когда выключать.
С уважением,
Виктор.
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

ut1wpr писал(а): На моей китайской борде вот так:
Ок, спасибо, выкинем лишние детальки.
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

balmer писал(а):Разбираюсь потихоньку с USB на STM32 - столкнулся с непониманием такого момента.
На демоплатах и примерах подключают external pullup для D+ линии через резистор 1.5 кОм и буферный транзистор.
Зачем нужен буферный транзистор? Почему бы не подключить к ноге микроконтроллера напрямую? Неужели пару маллиамер не потянет?
Потому что внутреннее сопротивление там на фоне 1.5кОм величина в много раз бОльшая, чем допуск на ток по линии.
И что за девайс ? с источником питания или от УСБ ?
Если с УСБ, вешай сразу через 1.5кОм на +3.3, на кой поддержка дисконнекта в таком девайсе ?
Реклама
Эиком - электронные компоненты и радиодетали
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

Satyr писал(а): Потому что внутреннее сопротивление там на фоне 1.5кОм величина в много раз бОльшая, чем допуск на ток по линии.
И что за девайс ? с источником питания или от УСБ ?
Если с УСБ, вешай сразу через 1.5кОм на +3.3, на кой поддержка дисконнекта в таком девайсе ?
Нет, хочу сделать для обучения термометр-гигрометр. С батарейным питанием. Так, что при подключении USB он либо будет спать, либо работать на низкой частоте.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

Видимо всетаки спать и на низкой частоте когда отключен ? -)))
Так как раз ОК и будет.
С отключаем пулапом надо наоборот, когда надо чтоб девайс был воткнут, но не глубоко спал и не мог отвечать по УСБ.
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

Сделал таки схемку где pullup резистор подключается сразу к питанию. Основной недостаток такого решения - неудобство отладки. Каждый раз после перезаливки микропрограммы надо отключать от USB и включать устройство. Так что в следующий раз таки не поленюсь, и выделю на это одну сигнальную линию. Либо воспользуюсь STM32Lxxx линейкой девайсов, там pullup встроен внутрь.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Угу , аналогично . Так же в новой версии прототипа решил это предусмотреть.
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт июл 02, 2013 09:17:49

Сообщение misyachniy »

Разбираюсь потихоньку с USB на STM32 - столкнулся с непониманием такого момента.
На демоплатах и примерах подключают external pullup для D+ линии через резистор 1.5 кОм и буферный транзистор
В USB хост линии D+ и D- притянуты к земле.
При присоединении резистора 1.5 кОм к шине +/- хост хост детектирует подключение и по конкретному выводу определяе LS или FS/HS устройство подключено.

В Atmel SAM7 серии сопротивление подтяжек низкое, по моему ниже 5К. таким образом сразу же после подключения устройства происходит детектирование устройства и ОС начинает перенумерацию устройств. Транзистор дает возможность микроконтроллеру запустить кварц, настроить PLL и сделать другие нужные действия, а затем произвести подключение к хосту.

Я лично всегда использую подключение резистора напрямую к выводу микроконтроллера.
Для отладки вставляю отключение от D+ и паузу около 2 секунд.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

balmer писал(а):Зачем нужен буферный транзистор? Почему бы не подключить к ноге микроконтроллера напрямую? Неужели пару маллиамер не потянет?
На многих стмках внешний пулап вообще не нужен, там есть встроеный в контроллер пулап, которым можно управлять. Советую проверить есть ли в юзер мануале на проц в разделе юсб упоминание пулапов.
Информация по RLC mini находится >тут<
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

Сейчас проверил для 32f101(/2/3/5/7), в регистре OTG_FS_DCTL бит SDIS отвечает за пулап, если включен вход usb_vbus то он подключается автоматически при появлении питания на юсб, тоесть дополнительного пулапа не нужно. В 32L1хх и 32f2/f4 аналогично, достаточно проинициализировать юсб и пулап включается.
Информация по RLC mini находится >тут<
Контактная информация:
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение 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: Аватарка ужасная, мешает читать сообщения.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

Вообще я не знаю что у стм за документация, но я пару раз в реф мануале не мог даже поиском по тексту найти упоминание о пулапах на юсб, нашел только лишь потому что точно знал что он там есть :))
balmer писал(а):PS: Аватарка ужасная, мешает читать сообщения.
Поменял.
Информация по RLC mini находится >тут<
Контактная информация:
Ответить

Вернуться в «ARM»