Защита от обратной полярности USB - МОП-транзистор

Я думаю об относительно дешевой и простой защите от обратного подключения / обратной полярности USB. На данный момент я думаю о P-канальном MOSFET со стоком, направленным в сторону USB-разъема. Слышал, что TVS-диоды могут кроме защиты от электростатического разряда еще и предотвращать переполюсовку, но точно их подобрать не смог бы. Выводы D+ и D- подключены через резисторы к микроконтроллеру STM.

Поскольку это полевой МОП-транзистор типа P, низкий уровень затвора приведет к тому, что транзистор будет проводить от стока к истоку. Я предсказываю, что, когда штекер USB подключен в обратном направлении, затвор MOSFET будет высоким, и MOSFET отключится, предотвращая повреждение приемной цепи.

Но это только мои скромные теоретические рассуждения, и я хотел бы спросить, не допустил ли я здесь логической ошибки или что-то не в порядке с практической точки зрения.

введите описание изображения здесь

Это будет работать нормально. На практике защита от обратной полярности обеспечивается самим разъемом (т.е. его нельзя воткнуть неправильно). Если вы используете свое устройство только с коммерческими продуктами (то есть не с деталями для любителей), то я бы не стал беспокоиться о защите от обратной полярности. Никогда не видел его в дикой природе, даже с дешевыми кабелями.
Согласитесь - если кто-то не сделает свой собственный USB-кабель, вы можете быть уверены, что VCC будет VCC, а GND - это GND. Предохранитель на 2 А, возможно, также несколько избыточен, поскольку ток портов USB ограничен примерно этим значением (или намного меньше).

Ответы (1)

Похоже, что полевой транзистор защищает от обратной полярности, но он не нужен, так как невозможно получить неправильную полярность от USB-кабеля.

Я также хотел бы отметить, что привязка вывода D+ через резистор напрямую к 3,3 В не позволит MCU контролировать, когда он готов к перечислению, поэтому в зависимости от того, что делает программа MCU, она может не выполнить перечисление, если это не так. немедленно готов с периферийным устройством USB при загрузке.

Другое дело, что, заземляя контакт ID, вы сигнализируете, что это устройство является мастером OTG, а не USB-устройством, так что это не сработает.

Кроме того, экран разъема напрямую подключен к земле, что тоже может быть не тем, что вам нужно.

Не поверите, но у меня был опыт с заводскими перепутанными проводами внутри usb кабеля :) Пытаюсь немного почитать про ID и подключение шилда, но пока не разбираюсь в вопросе подключения D+. Это значение напряжения 3,3В или просто D+ нужно оставить без этого подключения?
Проблема в постоянном подключении к 3.3В. Даже если MCU находится в состоянии сброса или загрузки или еще не готов к перечислению, резистор сигнализирует ПК, что устройство готово к перечислению. ПК может определить, что энумерация не удалась, и прекратить связь с устройством. Также есть вероятность, что подтягивающий резистор является внутренним для MCU, поэтому он может не понадобиться.
Хм, я использую STM32F103C8 (в техническом описании сказано: «Для обеспечения совместимости с полноскоростными электрическими спецификациями USB 2.0 контакт USBDP (D +) должен быть подтянут с помощью резистора 1,5 кОм до диапазона напряжения от 3,0 до 3,6 В»). Я думаю, вы имеете в виду этот вариант с управлением через биполярный транзистор, управляемый микроконтроллером на конце базы. Честно говоря, не видел, например, в Bluepill было такое решение (там тоже был только постоянно подключенный резистор). Если управление подтягиванием таким образом - лучший способ, не могли бы вы порекомендовать мне, где почитать о том, как его правильно запрограммировать?
На STM32F103 (и, возможно, STM32F303 тоже), если у вас есть постоянное подтягивание на D+, способ имитации отключения состоит в том, чтобы переключить PA12 в режим вывода и вывести 0; чтобы снова подключить USB, переключите PA12 в режим входа. Ваш стек USB может предложить способ предоставления ваших собственных функций или макросов для этой цели — например, для ChibiOS вы можете заменить usb_lld_connect_bus()и usb_lld_disconnect_bus()в board.h.