Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.70/191: Рейтинг темы: голосов - 191, средняя оценка - 4.70
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 98
1

Согласование уровней USB D+/- (V-USB) 3.3V

07.08.2013, 10:06. Просмотров 34909. Ответов 43
Метки нет (Все метки)

Всем доброго утра/дня/вечера!

Создавал тему на другом форуме, но на один из вопросов мне так и не ответили.
Я начинающий, разбираюсь потихоньку.
На Atmega8 собрал свой небольшой проект, всё хорошо, но хочу прикрутить к нему V-USB для передачи данных на комп. Пока используется UART и кабель на PL2303. Но есть свободные ноги, место и т.п., т.е. есть возможность от pl2303 избавиться и сразу гнать CDC по SoftUSB, откуда у меня питание всё берется.
Вроде все понятно, но во всех схемах и вариантах для согласования уровней Data+/Data- предлагается либо запускать контроллер на 3.3В, что для меги8 неподходит, т.к. ей нужно 5В по даташиту (версия без L, а с L не потянет по частоте, для V-USB нужно мин 12 МГц). Другой вариант согласовывать уровни, но везде предлагается только стабилитроны на D+, D-.
Просто у меня под рукой не было стабилитронов на 3.3-3.6В и возник вопрос можно ли согласовать другим способом.
Пока в другом месте не отвечали, прочитал и освоил эту статью: http://we.iosyitistromyss.ru/Shimatech/ ... oystv.html
И по ней придумал вот такой вариант:

<Изображение удалено>


Смысл светодиода D1 на схеме в том, чтобы обеспечить на затворе потенциал чуть ниже 3.3В, но в пределах открытия транзистора. У меня тут светодиод с Vf=2V стоит. Ну и заодно и индикация работы устройства. )
Ну а дальше вроде как по учебнику - со стороны компьютера (3.3V) линию опустили в 0, на затворе у нас остается 3В и транзистор открывается, тем самым опуская линию в 0 со стороны МК. Если со стороны МК линия уходит в 0, то "через диодный переход исток-подложка транзистора напряжение на истоке снижается до тех пор, пока напряжение на затворе не перейдет пороговый уровень, затем транзистор открывается и вход 3.3В устройства подтягивается к "0" открывшимся транзистором", как написано в статье про согласование уровней.

Вроде как в протеусе это дело работает. По параметрам 2N7000 тут должен подходить. Вот добавил в протеусе генератор импульсов 125 Гц, графики с части 3.3В и части 5В:

<Изображение удалено>

Ну и если добавить два генератора линии D+ и D- в противофазе (USB же вроде так данные передает), получаем с обоих сторон сходный цифровой сигнал:

<Изображение удалено>


Что скажете? Будет ли такое работать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.08.2013, 10:06
Ответы с готовыми решениями:

Согласование уровней
Доброго времени суток. Имеется плата webservera хотелприкрутить к нему DS18B20. webserver питается...

Согласование уровней, взаимодействие с 3.3 и 5В устройствами
Добрый день! У меня сейчас встала задачка: атмега должна работать и с 3.3В девайсом, и с 5В в...

Согласование уровней для UART
Здравствуйте. Собрал схему на Xmega, которую подцепил к FTDI232 и через USB в ПК. Xmega работает...

Нужно ли согласование уровней для UART
Хочу пообщаться с вот таким GPS-модулем http://www.ebay.com/itm/200911914297. По даташиту...

43
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
07.08.2013, 10:13 2
смотрите атмеги с "а" на конце. они спокойно работают на 3.3В, до 16 мгц.
0
MCSD: APP BUILDER
8786 / 1064 / 104
Регистрация: 17.06.2006
Сообщений: 12,604
07.08.2013, 10:23 3
кто вам сказал, что они спокойно работают? в даташитах есть табличка зависимости максимальной частоты от напряжения. сейчас атмеловцы просто убрали информацию о максимальной частоте из начала даташита
0
MCSD: APP BUILDER
8786 / 1064 / 104
Регистрация: 17.06.2006
Сообщений: 12,604
07.08.2013, 10:31 4
Цитата Сообщение от MStorm
Всем доброго утра/дня/вечера!

Создавал тему на другом форуме, но на один из вопросов мне так и не ответили.
Я начинающий, разбираюсь потихоньку.
На Atmega8 собрал свой небольшой проект, всё хорошо, но хочу прикрутить к нему V-USB для передачи данных на комп. Пока используется UART и кабель на PL2303. Но есть свободные ноги, место и т.п., т.е. есть возможность от pl2303 избавиться и сразу гнать CDC по SoftUSB, откуда у меня питание всё берется.
Вроде все понятно, но во всех схемах и вариантах для согласования уровней Data+/Data- предлагается либо запускать контроллер на 3.3В, что для меги8 неподходит, т.к. ей нужно 5В по даташиту (версия без L, а с L не потянет по частоте, для V-USB нужно мин 12 МГц). Другой вариант согласовывать уровни, но везде предлагается только стабилитроны на D+, D-.
Просто у меня под рукой не было стабилитронов на 3.3-3.6В и возник вопрос можно ли согласовать другим способом.
Пока в другом месте не отвечали, прочитал и освоил эту статью: http://we.iosyitistromyss.ru/Shimatech/ ... oystv.html
И по ней придумал вот такой вариант:

<Изображение удалено>


Смысл светодиода D1 на схеме в том, чтобы обеспечить на затворе потенциал чуть ниже 3.3В, но в пределах открытия транзистора. У меня тут светодиод с Vf=2V стоит. Ну и заодно и индикация работы устройства. )
Ну а дальше вроде как по учебнику - со стороны компьютера (3.3V) линию опустили в 0, на затворе у нас остается 3В и транзистор открывается, тем самым опуская линию в 0 со стороны МК. Если со стороны МК линия уходит в 0, то "через диодный переход исток-подложка транзистора напряжение на истоке снижается до тех пор, пока напряжение на затворе не перейдет пороговый уровень, затем транзистор открывается и вход 3.3В устройства подтягивается к "0" открывшимся транзистором", как написано в статье про согласование уровней.

Вроде как в протеусе это дело работает. По параметрам 2N7000 тут должен подходить. Вот добавил в протеусе генератор импульсов 125 Гц, графики с части 3.3В и части 5В:

<Изображение удалено>

Ну и если добавить два генератора линии D+ и D- в противофазе (USB же вроде так данные передает), получаем с обоих сторон сходный цифровой сигнал:

<Изображение удалено>


Что скажете? Будет ли такое работать?
не надо так делать.
для того, чтобы это работало через диод транзистора, нужно, чтоб со стороны компа была подтяжка к vcc через резисторы. В I2c они предусмотрены автоматически. В компе - вряд ли, наверняка у контроллера там двухтактный выход и даже если есть подтяжка резистором, то фронты могут сильно искажаться.

Неужели так стабилитрон трудно найти?

что касается работы на 12мгц - то многие экземпляры МК работают на ней удовлетворительно при 3.3 (можно чуть прибавить - 3.5 сделать), хотя конечно, всё это впритык и нехорошо, но лучше так сделать, чем как вы хотите.
0
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 98
07.08.2013, 10:46 5
И тут начинается - купи стабилитроны, заведи атмегу на 3.3 В, купи другую атмегу ;(
У меня цель уже принципиально разобраться с вариантом замены и согласованием уровней без использования стабилитронов и без снижения Vcc МК.

для того, чтобы это работало через диод транзистора, нужно, чтоб со стороны компа была подтяжка к vcc через резисторы. В I2c они предусмотрены автоматически. В компе - вряд ли, наверняка у контроллера там двухтактный выход и даже если есть подтяжка резистором, то фронты могут сильно искажаться.
Ну а что если со стороны компа эти линии подтянуть от линии с ~3В, что после светодиода идет? Или тогда и потенциал на затворе тоже будет падать? Ну можно тогда отдельно взять с +5 В через парочку последовательных диодов типа 1N4148 получить около 3.6В и подтянуть этим линии D+ D- со стороны компа?
На счет фронтов - говорят, что даже через резистивный делитель работает V-USB, но мне кажется с полевиком будет более "корректнее".
Я вообще изначально такой вариант сделал:

<Изображение удалено>

Тут как бы есть подтяжки от линейного регулятора, но захотелось упростить схему.
0
MCSD: APP BUILDER
8786 / 1064 / 104
Регистрация: 17.06.2006
Сообщений: 12,604
07.08.2013, 11:07 6
нельзя ничего подтягивать со стороны компа - по этим подтяжкам контроллер хоста определяет тип подключенного устройства - он смотрит куда подтянута и какая линия, и определяет, что устройство вообще подключено и какое оно - LS,FS,HS - почитайте спецификацию USB.

как вариант, я бы предложил tl431 с диодами, но не знаю будет ли работать, хотя на мой взгляд, должно работать лучше, чем с отдельными стабилитронами
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
07.08.2013, 12:41 7
Цитата Сообщение от MStorm
Ну и если добавить два генератора линии D+ и D- в противофазе (USB же вроде так данные передает)
Неверно. D+ и D- не всегда находятся в противофазе. Почитайте спек USB.
0
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 50
07.08.2013, 13:49 8
v-usb - это только usb 1.1, т.е. подтягивать к плюсу надо только D-.
Я уже поднимал тему по стабильности V-usb со стабилитронами. На транзисторах у меня ни одна схема согласования не пошла и остановился на питании 3.3В, в результате устройство получилось достаточно стабильно работающее, но на 3-х вольтах (дешевый регулятор так выдал, вместо обещанных 3.3). Использовал Atmega8a, с кварцом 16MHz - прекрасно пашет, уже несколько месяцев.
0
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 98
07.08.2013, 14:39 9
Цитата Сообщение от Johmmy0007
нельзя ничего подтягивать со стороны компа - по этим подтяжкам контроллер хоста определяет тип подключенного устройства - он смотрит куда подтянута и какая линия, и определяет, что устройство вообще подключено и какое оно - LS,FS,HS - почитайте спецификацию USB.
Это я знаю. Но ведь это только на момент подключения ус-ва. После инициализации V-USB мы будем просаживать нужные линии в 0.

OtyxPM, да пусть, я и не говорил, что всегда. Я лишь для примера такой сигнал сделал. Транзиторы независимо переключаются каждый.

dtvymso, странно что с транзисторами не получилось. А если не секрет, какой вариант пробовали или ссылкой на "поднятую тему" не поделитесь?
EDIT2: Ссылку на тему нашел, смотрю... там же и предлагают вариант на NPN биполярниках... и вроде как вы писали что у вас на 9600 бод работало. А мне больше и не надо...

EDIT: Мне-то на самом деле не нужна какая-то особо быстрая и стабильная работа. Мне просто чуть-чуть текстовых данных изредка передавать на хост нужно. Это работает и через UART<->PL2303 как виртуальный ком-порт. Вот хочется только от кабеля на pl2303 избавиться, чтобы само ус-во по USB умело в CDC режиме поднимать порт и передавать данные.
0
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 50
07.08.2013, 15:12 10
По согласованию уровней, лучше не найти, чем http://we.iosyitistromyss.ru/Shimatech/ ... oystv.html

Использовал я схему согласования для UART. Для UART транзисторная схема подходит отлично, т.к. передача осуществляется по средством прижимания сигналов к земле. Для USB необходимо чтобы D- был прижат к плюсу всегда, т.к. определяет наличие устройства usb 1.1, а D+, наоборот - свободен. При согласовании с транзисторами, и D+ и D- оказываются прижаты к плюсу, что соответствует какому-то из высокоскоростных USB (только D+ прижимается, если FS USB 2.0, с другими пока не работал), т.е. устройство и не может заработать. А чтобы ручками прижимать D+ к земле, надо править библиотеку V-usb, что, мне кажется, уже давно бы сделали, если бы интерфейс позволял, ибо обычно передающая сторона начинает передачу данных, прижимая интерфейс к земле, а тут он у Вас все-время прижат, сделать высокий уровень тоже не выйдет, пока Вы его не отпустите. А именно Хост в USB всегда инициализирует передачу данных, т.е. это только его привилегия так делать. Хотя последнее - это только мои догадки, почитать детально физику USB у меня как-то руки не доходили. Есть опыт разбора с ps/2, но там гораздо проще, по крайне мере сделать на ардуино сразу эмулятор мыши и клавы PS/2 (разумеется по двум интерфейсам, 4 провода каждый: 1-й клава, 2-й мышь) у меня получилось (пример из сети, работает только с одним устройством и не на всех компах).
0
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 98
07.08.2013, 15:59 11
По согласованию уровней я читал, и писал в первом посте, что по этой статье и делал.
Дык ведь D+ и D- у нас прижаты к 1, т.к. вверх они прижаты со стороны МК. Кто нам мешает до начала передачи выдать в PD2 0 и тогда и со стороны USB эта линия будет прижата к нулю.
Ну или банально прижать PD2 (D+) со стороны МК не к +5В, а к земле. Тогда D+ со стороны хоста будет прижат к нулю... пока писал понял о чем вы говорили дальше - "сделать высокий уровень тоже не выйдет, пока Вы его не отпустите".
Что-то я не пойму как оно тогда должно работать. Прижать к 1 мы не можем - не тот режим выставится. Прижать к 0 мы его тоже не можем, т.к. не узнаем начало передачи.
Получается оно в воздухе должно висеть изначально что-ли? Может тогда получится оставить PD2 без подтяжки внешней, а после инициализации USB, когда мы ожидаем передачу данных подтянуть её дохленькой встроенной подтяжкой? Ну или там внешнюю управляемую через другую ногу сделать.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
07.08.2013, 16:14 12
Цитата Сообщение от MStorm
Дык ведь D+ и D- у нас прижаты к 1
... ...
Прижать к 1 мы не можем - не тот режим выставится.
... ...
Прижать к 0 мы его тоже не можем, т.к. не узнаем начало передачи.
... ...
после инициализации USB, когда мы ожидаем передачу данных подтянуть её дохленькой встроенной подтяжкой
... ...
Что-то мне кажется, Вы вообще не понимаете, как USB работает. Или я ошибаюсь? USB Specification читали? Или хотя бы "USB in a nutshitt" (это брошюра - сильно урезанный текст спеки, читать от корки до корки).
0
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 50
07.08.2013, 16:15 13
Детально надо читать физику USB: Какой сигнал где, кто жмет к земле и когда, кто и где выставляет 1 или 0.
Минимально известно, что для usb 1.1 необходимо прижать D- к питанию, а D+ как бэ оставить в воздухе. Если подтяжку от D- убрать (на какое время не знаю точно), то хост решит, что устройство отключено. Для простого примера, просто возьмите без всяких МК и прижмите к питанию резистором 1,5КОм только D- и у вас комп выдаст, что подключенное USB устройство не опознано, а как только уберете подтяжку, сообщение исчезнет, т.к. хост решит, что его отключили. Если сделает тоже самое, но с D+, а D- в воздухе, то хост решит, что подключено USB 2.0. Это минимальная часть интерфейса, дальше - глубже :)
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
07.08.2013, 16:20 14
Цитата Сообщение от dtvymso
Для USB необходимо чтобы D- был прижат к плюсу всегда, т.к. определяет наличие устройства usb 1.1, а D+, наоборот - свободен. При согласовании с транзисторами, и D+ и D- оказываются прижаты к плюсу, что соответствует какому-то из высокоскоростных USB (только D+ прижимается, если FS USB 2.0, с другими пока не работал)
... ...
На самом деле подтяжки в USB устроены так:
- pull-up на D- на стороне девайса - девайс говорит, что он Low-speed;
- pull-up на D+ на стороне девайса - девайс говорит, что он Full-speed или High-speed (уточняется в дальнейшем диалоге с хостом);
- оба пина без подтяжек на стороне девайса - он отключен от шины, и хост с ним не работает;
- pull-up на D- и D+ одновременно - такая комбинация не используется;
- pull-down на D- и D+ - это на стороне хоста.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
07.08.2013, 16:29 15
Цитата Сообщение от dtvymso
Если сделает тоже самое, но с D+, а D- в воздухе, то хост решит, что подключено USB 2.0.
На самом деле хост должен сказать, что "подключено высокоскоростное устройство" (или что-то вроде этой фразы), а про USB_2.0 или _1.1 он ничего не будет говорить.
Типичное заблуждение: многие думают, что 2.0==HighSpeed, а 1.1==LowSpeed. На самом деле версия спеки со скоростями не связана вообще. (Разве что во времена 1.1 ещё не было HighSpeed.)

Это просто к сведению.
0
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 50
07.08.2013, 16:47 16
OtyxPM, Спасибо, подробно не хотел искать.
Мне думается тут идет простая схема, если подтяжки нет, то и хост и устройство в режиме чтения видят 0, но могут выставить любой режим самостоятельно, если надо. Возможно у хоста, по умолчанию, есть где-то МегаОмная подтяжка к земле по обоим интерфейсам, чтобы рандома не было. Если есть подтяжка к питанию, то в режиме чтения обе стороны видят 1, но могут при необходимости прижать к 0. Изменять это состояние может при этом только кто-то один, и если кто-то один изменил это состояние, то второй должен только слушать, пока первый не отпустит линию (определяется неким таймаутом).
А схема с транзистором нам всегда делает стартовый режим только прижатый к питанию, что определяется как:
- pull-up на D- и D+ одновременно - такая комбинация не используется;
Кстати, может эту комбинацию для 3.0 использовали?

P.s. для usb 2.0 есть FullSpeed и HighSpeed, о чем девайс и хост договариваются уже после подключения. Версия же протокола определяется подтяжками, что я и имел ввиду. В холостую прижать только один из D+ или D- реально будет работать и хост будет давать ошибку "Неопознанное устройство", а если посмотреть версию протокола, то он ее определит по подтяжке, хотя реально никакого устройства и не было :) Собственно, на это натыкаешься при первых попытках работать с УСБ, когда периферию, еще не инициализировал правильно, а подтяжку подтключил жестко к питанию.
0
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 98
07.08.2013, 16:55 17
Цитата Сообщение от OtyxPM
Что-то мне кажется, Вы вообще не понимаете, как USB работает. Или я ошибаюсь? USB Specification читали? Или хотя бы "USB in a nutshitt" (это брошюра - сильно урезанный текст спеки, читать от корки до корки).
Угадали ) Точнее так, читал как-раз таки USB in a nutshitt, но видимо этого не хватило. Как раз после прошлого моего поста скачал спеку USB 1.1, сейчас сижу её читаю. Всё правильно дальше вы сказали. Со стороны хоста всегда линии поднянуты через 15 КОм к земле. Со стороны Low Speed девайся надо D- подтягивать к +3.6В через 1.5 КОм. Это по спецификации.
Пока сижу читаю дальше, разбираюсь...
0
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 98
07.08.2013, 17:03 18
dtvymso, на хосте по спеке обе линии данных прижаты к земле через 15КОм. При передачи данных лог1 там устанавливается через 1.5Ком.
Версию протокола хост определяет не под подтяжке, как правильно сказал OtyxPM подтяжка в USB 1.1 определяет только режим передачи данных - LowSpeed или FullSpeed (не путать с HighSpeed). HighSpeed мы вообще не трогаем в рамках спеки 1.1 - его там нет. Оба режима передачи - и LowSpeed и FullSpeed есть в спеке 1.1.

EDIT: Дальше соб-но для меня вопрос как дальше обстоят дела, когда начинается передача данных. До этого пока не дочитал.
0
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 50
07.08.2013, 17:17 19
как горшок не обзови, он горшком останется.
USB 1.1 - Это всегда LowSpeed, что и есть подтяжка к D-
USB 2.0 - Это или FullSpeed или HighSpeed, что есть подтяжка к D+
Поскольку других комбинаций и нет, то с какой стороны не подходи, общий смысл от того не изменится.
HighSpeed рассматривает только в рамках USB 2.0, так что, определяет подтяжка версию протокола 1.1 или 2.0, или определяет LowSpeed или FullSpeed - это по любому одно и тоже. При таких возможных комбинациях, разумно отталкиваться именно уже от версии прокола.
3.0 вносит свои коррективы, но с этим мало кто успел познакомиться.

UPD. FullSpeed в рамках 1.1 не встречал в жизни.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
07.08.2013, 17:22 20
Цитата Сообщение от MStorm
Дальше соб-но для меня вопрос как дальше обстоят дела, когда начинается передача данных. До этого пока не дочитал.
Для этого почитайте про процесс энумерации (enumeration). Собственно, это уже передача данных. Первый обмен данными между хостом и девайсом. Если энумерация пройдёт успешно, тогда и другие данные начнут передаваться.

Насколько я помню, в "USB in a nutshitt" про enumeration нет. Ищите в другом месте, в интернете много статей про это даже на русском.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2013, 17:22

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

HID Class на V-USB (статья USB для AVR. Часть 2.)
Здравствуйте. Решил перейти от библиотеки Libusb на HIDlibrary и как раз нашел эту статью. Но...

Простой программатор под переходник USB-COM, USB-LPT
В продаже есть кабели (переходники) USB to RS232, USB to PORALLEL? Какой простой программатор...

USB для AVR. Часть 2. HID Class на V-USB
Прочитал статью &quot;USB для AVR. Часть 2. HID Ctoss на V-USB&quot;, решил собрать все по примеру и все...

Создание USB host для USB кейлоггера
В общем, я тут уже писал и мне &quot;мягко&quot; намекнули что мне нужен USB host для создания usb...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.