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

AT90USB1286, виртуальный COM-порт

prottoss спасибо большое! Помогло!

Со стороны МК (USB Device) проблема решилась, но попался один РС (USB Host), который глючит по аналогичной причине, вплоть до потери устройства. Пришлось выкручиваться добавляя лишний байт, чтоб размер данных был не кратен размеру Endpoint.

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


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

Два вопроса про питание AT90USB647 от порта

 

1. USB-коммуникация прекращает работать при понижении Vbus ниже 4.4 вольта. Это норма или патология?

Подробно моя проблема в следующем: устройство (АЦП с CDC-USB выходом) питается от Vbus и потребляет ток 200 мА, в то время как USB-порт столько ему не дает (по умолчанию должен давать 100 мА). В результате ограничения по току, напряжение падает до 4-х вольт, а на этом напряжении устройство не определяется компьютером, из-за чего не может попросить больше тока.

Это у всех так или я где-то напортачила? Схема соединения примитивная - все напряжения одним пучком Vbus+Uvcc+Avcc+Dvcc (Figure 21-3). Внутренний регулятор у меня включен.

По даташиту непонятно, должно ли работать при напряжении ниже 4.4 вольта. С одной стороны питание МК допустимо снижать до 3.4 вольта, а с другой стороны ничего не говорится про Ubus, который в то время отсоединен из пучка. Опять же сказано, что передающие линии D- и D+ имеют потенциал 1.4 вольта (если не в режиме хоста), а если так, то должно хватать.

И вообще, как мне быть, если у меня устройству нужно 200 мА, а начальное напряжение USB-порта при таком токе дает только 4 вольта?

 

2. Почему-то не хочет USB-порт добавлять ток, даже когда я его об этом вежливо прошу.

Устанавливаю:

#define CONF_ATTRIBUTES USB_CONFIG_BUSPOWERED

#define MAX_POWER 200 // 400 mA

USB_CONFIG_BUSPOWERED пробовала и 0x80 (как в апликэйшен), и 0x00 (как в книге Агурова), а толку чуть - какой был хилый ток, таким и остался. На разных компьютерах пробовала - результат неутешительный - сколько давал порт тока, столько и дает при любых MAX_POWER.

В чем тут может быть дело?

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

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


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

Два вопроса про питание AT90USB647 от порта

 

2. Почему-то не хочет USB-порт добавлять ток, даже когда я его об этом вежливо прошу.

...

В чем тут может быть дело?

Говорят, что бывают такие умные материнские платы, которые действительно контролируют ток, потребялемый устройством от USB. На практике мне такое не встречалось. Типичная ситуация такова: операционка следит, чтобы суммарное потребление всех устройств на шине USB не превысило 0.5А. Если подключаемое устройство превышает эту грань, то оно не будет зарегистрировано операционнкой.

Так что все, что вы прописываете относительно потребления своего устройста, учитывается только на уровне "бухгалтерии', а не в виде реальных ограничений на ток на уровне железа.

На практике полно случаев "слабых" USB - портов или (у меня такой случай был) "слегка подгоревших", которые даже при 100мА садятся до 4-4.5V.

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

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


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

Говорят, что бывают такие умные материнские платы, которые действительно контролируют ток, потребляемый устройством от USB. На практике мне такое не встречалось. Типичная ситуация такова: операционка следит, чтобы суммарное потребление всех устройств на шине USB не превысило 0.5А. На практике полно случаев "слабых" USB - портов или (у меня такой случай был) "слегка подгоревших", которые даже при 100мА садятся до 4-4.5V.

 

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

USB-порты компьютеров, которые я испытывала, никак нельзя назвать слабыми, так как на них может работать внешний диск, потребляющий 0.8 А (из двух портов USB). Если бы порты и в самом деле были слабыми, то внешний диск бы не работал. Кроме того, модем (ZyXEL OMNI ADSL USB) тоже потребляет прилично - у него в конфигурации прописано 500 мА. А мое устройство потребляет куда меньше - 195 мА при напряжении 5.0 в.

Короче говоря, на чужие USB-устройства порты ток дают, а на мое нет. И вина в том, скорее всего ложится на драйвер. Я пробовала брать типовую прошивку, которую рекомендует Atmel, - "AT90USB128/64 CDC Device Virtual Com Port project". Исправляла в ней ток 100 мА на 500 мА (MAX_POWER = 0xFA) и получала тот же самый результат. И это не удивительно, т.к. все лабают с этого проекта, как и я.

В разных местах по этому поводу посылают читать "Refer to USB Feature Specification: Interface Power Management for details", но этого труда нигде достать не удается, хотя ссылок на него тьма тьмущая. В общем-то дело сводится к тому, что устройства USB 2.0 должны просить для себя электричество как-то иначе, чем это обычно делают устройства на USB 1.1.

When USB 2.0 was released, the document USB Feature Specification: Interface Power Management was under development. This document describes a protocol for managing power at the interface level instead of just the device level, to enable more precise and effective power conservation.

The 2.0 specification added an interface_power descriptor that enables power management at the interface level in addition to the device level. The document describing this descriptor's structure and use is USB Feature Specification: Interface Power Management.

И где мне искать описание этого загадочного "interface_power descriptor"а, если он даже в книге Агурова не упоминается?

 

P.S. С первым вопросом про питание я кажется сама разобралась - ниже 4.4 вольт зависал сам МК, т.к., согласно даташиту, питание при кварце 16 мГц должно быть не ниже 4.5 вольт. А на кварце 8 мГц тот же МК может работать даже начиная с 2.7 вольта. Придется теперь на вдвое медленный кварц переезжать. :(

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

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


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

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

Возможно, не буду спорить. У моей материнки возраст меньше 3-х лет. Я умудрился спалить (по питанию) порт USB, который стоял на плате. Вытащил материнку из компа и к своему удивлению увидел обуглившийся проводник, подходивший к разъему USB. Припаивание проводочка поверх обуглившегося решило проблему - порт снова заработал и стал выдавать питание наружу. Читал про платы расширения USB, на которых стояли самовосстанвливающиеся предохранители. Про материнки, измеряющие и ограничивающие ток, не читал и не видел.

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

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


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

Про материнки, измеряющие и ограничивающие ток, не читал и не видел.

 

Таких материнок, которые чтобы ограничить ток измеряют, действительно нет :). Там принцип очень простой - на проходе ставят примитивный усилитель тока - транзистор, в цепи базы которого пускают калиброваный ток. Величина, получаемая умножением базового тока на коэффициент усиления по току для этого танзистора, и есть приблизительно ток отсечки. При достижении такого тока транзистор впадает в насыщение и больше чем эту величину пропустить тока через себя не может.

Конечно, это весьма грубый способ регулирования, т.к. внутреннее сопротивление самого транзистора при разных токах трудно учесть, а стало бы и падение напряжения на нем. Но, согласно описанию, дозирование тока производится ступенчато - шагами по 100 мА. А, значит, что там всего 5 ступенек, для которых подобрать резисторы для подходящего тока утечки можно экспериментально. Впрочем, похоже на то, что подбором фирмачи не занимаются, т.к. у меня, например, ограничение по току наступает не при 100 мА, а при 153 мА. Причем, на разных материнках по-разному. Но принцип регулирования тут у всех одинаковый.

Об этом я сама узнала случайно, когда у моего знакомого сгорел USB порт на старом ноутбуке из-за того, что он работал с внешним USB-диском, подключая только один USB-разъем. Ремонтровать пришлось у умельца, который все это рассказал. Я же за что купила, за то и продаю :).

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

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


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

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

....

Но, согласно описанию, дозирование тока производится ступенчато - шагами по 100 мА.

.....

Ремонтровать пришлось у умельца, который все это рассказал. Я же за что купила, за то и продаю :).

Сомневаюсь, что такая схема является общепринятой или стандартной. Хорошо бы взглянуть на описание, на которое Вы ссылаетесь. Всё-таки я остаюсь на своих позициях, пока не увижу бумагу, где написано обратное ;)

Еще пара аргументов в пользу того, что ситуация именно такая, как я её представляю.

1) Если ваше устройство не работает (кварц не завелся), и операционка в принципе не в состоянии узнать, сколько вы хотите потреблять тока, то почему она в вашем случае ограничивает ток на уровне около 150ма? Вариант, что это величина ограничения по умолчанию, не проходит, иначе бы диски с питанием 0.8 А от двух USB не работали бы в принципе, ведь система не знает, с какого второго порта вы берете только питание. Вывод - ваш порт либо по жизни хилый либо подгорелый по питанию.

2) Несколько лет назад известная фирма Силабс начала выпускать свои преобразователи USB-Сом ср210х, к которым была приложена программа, с помощью которой можно было менять ток, запрашиваемый устройством. Эта информация хранилась в байте еепром в чипе преобразователя.

Содержимое байта (0..255) умножалось на 2 и передавалось операционке в качестве потребляемого тока. Некоторые разработчики сгоряча прописывали в этом байте максимально возможное число - 0xFF. Это число записывалось во внутреннюю еепром и соответствовало току 2* 255 - 510мА.

После этой операции чип можно было выбрасывать в урну, т.к. НИЧЕГО С НИМ НЕЛЬЗЯ БЫЛО СДЕЛАТЬ.

Чтобы перепрошить чип, надо было, чтобы его увидела система, а система (на уровне софта, а не харда!) отказывалась работать с устройством, которое требовало питание польше 500мА ! Помню, на силабовском форуме было бурное обсуждение, и наверное, сейчас программа прошивки уже поправлена ;) Думаю, этот пример говорит тоже в пользу версии о софтверном смысле параметра потребления, не имеющим прямого отношения к харду, который может ограничивать ток лишь на уровне 0.5А, да и то не всегда, как было в случае с моей материнкой.

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


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

to Xenia

 

уточните вы пытаетесь подключать свое устройство только к ноутбукам или нет?

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


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

Сомневаюсь, что такая схема является общепринятой или стандартной. Хорошо бы взглянуть на описание, на которое Вы ссылаетесь. Всё-таки я остаюсь на своих позициях, пока не увижу бумагу, где написано обратное

 

Я вроде бы по-русски написала, что сослалась на слова умельца, который чинил сгоревший USB-порт. А для таких придир, как вы, я специально оговорила "за что купила, за то и продаю". Где вы прочли в моем посте, что я на описание ссылаюсь?

Если вы сомневаетесь, что там в качестве дискриминатора транзистор стоит, то что вам кажется менее сомнительным? Что там резистор что ли впаяли? Если бы это было так, то при достижении порогового значения наблюдалась бы не отсечка, а линейное уменьшение выдаваемого компьютером напряжения с ростом потребляемого тока на всем диапазоне. Однако такой эффект незамечен. До 100 мА порт исправно выдает свои 5 вольт (у меня 5.05 в) и лишь после преодоления порога ток начинает уменьшаться. Мой ноутбук при нагрузке на мое устройство (эквивалентное сопротивление 25 ом) понижает ток до 153-160 мА. Весьма возможно, что при коротком замыкании ток еще на сколько-то подрастет, но дискриминатор сгореть ноутбуку не даст.

Если же вы коряво выразились, и под словом схема имели ввиду не электрическую схему обеспечения напряжением, а логическую схему его блоковой раздачи, то здесь сослаться на описание я могу:

Павел Агуров, Интерфейс USB : практика использования и программирования, СПб, БХВ-Петербург, 2006. На странице 60 читаем:

Устройство указывает потребляемую мощность в дескрипторе конфигурации, который передается хосту при нумерации устройств на шине (см. разд. 10.2.2). Причем потребляемый от шины ток указывается с дискретностью 2 мА. Например, если устройство потребляет ток от USB-шины 100 мА, то в дескрипторе должна фигурировать цифра 50 (50 х 2 = 100 мА). Потребление тока устройством не должно превышать значения, указанного в процессе нумерации.

Потребляемая мощность, согласно спецификации USB, измеряется в блоках (unit). Один блок составляет 100 мА. Таким образом, устройства с малым потреблением используют 1 блок, а с большим потреблением - до 5 блоков.

 

Еще пара аргументов в пользу того, что ситуация именно такая, как я её представляю.

1) Если ваше устройство не работает (кварц не завелся), и операционка в принципе не в состоянии узнать, сколько вы хотите потреблять тока, то почему она в вашем случае ограничивает ток на уровне около 150ма?

 

Речь шла о случае, когда устройство "завелось", т.е. не только нормально определилось, но и выдает правильный текст на виртуальный COM-порт. Например, у моего ноутбука тока на это хватает (4.5 в, 153-160 мА), а у десктопа не хватает (4.0 в, 140 мА). Меня насторожил тот факт, что напряжение и токопотребление остаются одинаковыми, как в случае, когда устройство определилось (был инсталлирован драйвер), так и в том случае, когда оно не определилось (подключение без драйвера). Такое положение не нормально и свидетельствует о том, что просьба устройства о дополнительном электроснабжении была компьютером проигнорирована.

Кроме того, в моем устройстве предусмотрено подключение внешнего напряжения питания, благодаря чему я могу завести свое устройство даже на слаботочном USB-порте, а затем, отключив внешнюю подпитку, замерить, что дает порт.

 

Вывод - ваш порт либо по жизни хилый либо подгорелый по питанию.

 

У меня в ноутбуке не один USB-прт, а четыре. А на десктопе и подавно 6 портов. И все они ведут себя одинаково. Что ж, по-вашему они всего горелые? Если так, то отчего же те самые внешние USB-диски у меня на этих портах работают?

 

2) Несколько лет назад известная фирма Силабс начала выпускать свои преобразователи USB-Сом ср210х, к которым была приложена программа, с помощью которой можно было менять ток, запрашиваемый устройством. Эта информация хранилась в байте еепром в чипе преобразователя.

Содержимое байта (0..255) умножалось на 2 и передавалось операционке в качестве потребляемого тока. Некоторые разработчики сгоряча прописывали в этом байте максимально возможное число - 0xFF. Это число записывалось во внутреннюю еепром и соответствовало току 2* 255 - 510мА.

После этой операции чип можно было выбрасывать в урну, т.к. НИЧЕГО С НИМ НЕЛЬЗЯ БЫЛО СДЕЛАТЬ.

Чтобы перепрошить чип, надо было, чтобы его увидела система, а система (на уровне софта, а не харда!) отказывалась работать с устройством, которое требовало питание польше 500мА !

 

Это вы к чему? Какое отношение к теме имеют проблемы перепрошивки еепром у Силабса? У меня на AT90USB647 с прошивкой все нормально. Кроме того, я запрашиваю ток 400 мА (MAX_POWER=200). И этот запрос нормально виден на трассировщике USB канала.

 

уточните вы пытаетесь подключать свое устройство только к ноутбукам или нет?

 

Ответ на этот вопрос содержится в ответе для SKov.

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


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

Я вроде бы по-русски написала,

...

А для таких придир, как вы,

.....

Если же вы коряво выразились,

...

Это вы к чему?

...

Я просто хотел вам помочь.

Теперь уже не хочется.

Извините.

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


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

извините, что вмешиваюсь... мне казалось, что USB-хост выделяет по умолчанию 100 мА, и лишь по запросу больше. т.е. мне кажется, что девайс сначала должен держать всю свою периферию выключенной, чтобы не брать ток более 100 мА, потом запросить у системы свои реально необходимые 400 мА... а потом, по идее, уточнив, принят ли его запрос, подключать свою периферию...

 

или я путаю?

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


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

мне казалось, что USB-хост выделяет по умолчанию 100 мА, и лишь по запросу больше. т.е. мне кажется, что девайс сначала должен держать всю свою периферию выключенной, чтобы не брать ток более 100 мА, потом запросить у системы свои реально необходимые 400 мА... а потом, по идее, уточнив, принят ли его запрос, подключать свою периферию...

или я путаю?

 

Вы ничего не путаете, именно так всё и есть. Только к моему большому сожалению, я мало что могу сделать, чтобы мое устройство вписалось в 100 мА. Погрузить в спячку микроконтроллер я не могу - в таком состоянии он неспособен будет общаться по USB. Оба АЦП (ADS1255) на борту питаются через через гальваноразвязки DC/DC (у каждого своя) - именно на них приходится наибольший расход тока, т.к. их КПД низок при данном токе (20% загрузки). Погружала оба АЦП в спячку, но это дало прибавку напряжения только на 0.05 в. Чтобы отключать DC/DC преобразователи на входе нужно было позаботиться заранее, при проектировании устройства. И это бы, несомненно, усложнило и удорожило конструкцию. А главное, что тогда я не могла знать, что у меня будет такой затык с USB-питанием, т.к. никогда раньше я программированием этой части не занималась. Да и про ограничение в 100 мА узнала только тогда, когда с этим непосредственно столкнулась.

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

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


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

С первым вопросом про питание я кажется сама разобралась - ниже 4.4 вольт зависал сам МК, т.к., согласно даташиту, питание при кварце 16 мГц должно быть не ниже 4.5 вольт. А на кварце 8 мГц тот же МК может работать даже начиная с 2.7 вольта. Придется теперь на вдвое медленный кварц переезжать.

Вообще то для того чтобы не "переезжать", в устройствах ставят повышающий преобразователь и 7805, во всех USB сканерах так сделано, да и в некоторых переходниках для винчестеров.

P.S. Хотя для вас это, видимо , не подойдет раз плата уже готова.

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


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

Xenia, а еще можно DC\DC подключить через мелкие полевички (например IRLML6401), чтоб питание им подавать после иницилизации, когда операционка разрешит. Всего то 1-2 вывода процессора оно займет.

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


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

Заменила кварц 16 МГц на 8 МГц и ... ничего не изменилось. Снова всё та же история - как только напряжение становится ниже 4.4 вольта - МК виснет (обычно он у меня мигает раз в секунду светодиодиком).

Может быть у меня какой-нибудь не тот BODLEVEL в фузах прошит? И из-за этого МК на низком напряжении работать не хочет?

Подскажите пожалуйста, какие фузы для него надо устанавливать! Только все фузы разом, а не только те, которые понимаете. У меня внешний кварцевый резонатор на 8 МГц, и надо чтобы и МК работал на той же частоте. Хотелось бы, чтобы годилось питание в 4 вольта, а лучше - как можно более низкое.

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

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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