реклама на сайте
подробности

 
 
> USB CDC Suspend, для CDC это нормальная работа, или авария?
controller_m30
сообщение Oct 23 2016, 17:38
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309



Здравствуйте.
Делаю переходник USB-UART CDC. После энумерации он тут же уходит в suspend. Если на ПК ещё нет драйвера, то уйдёт в suspend сразу после его установки. А до этого будет ждать, и высылать дополнительные дескрипторы по запросам ПК.
Если же подключать устройство при уже установленном драйвере, то уходит в suspend немедленно после энумерации.
При этом пишет в диспетчере устройств что есть Virtual COM Port, но запуск невозможен [код 10].

Вопрос такой. Этот самый suspend - это в моей программе какая-то ошибка энумерации, или для CDC устройств так и должно быть?

Как вывести устройство из suspend я тоже не понимаю (если это вообще обратимое состояние, конечно). В программе, при появлении события suspend всё перевожу в состояние микропотребления (но модуль USB остаётся включен), "усыпляю" процессор, разрешаю прерывания, и жду события resume, которого всё нет.
Я правда точно не знаю, сколько при этом потребляет устройство от шины USB - но в других приложениях, при тех-же действиях, устройство "кушало" примерно 50-70uA. Т.е. требованию, о потреблении менее 0.5мА вроде как должно соответствовать...

Агурова читал, программные семплы разных производителей для CDC смотрел (для STM32, AVR, MSP430), но так и не понял главного - suspend это норма, или какая-то исключительная ситуация???
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
controller_m30
сообщение Oct 26 2016, 12:02
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309



Сниффер сделал, ошибку нашёл. Спасибо всем за участие и идеи sm.gif
Движок энумерации делался для MSD, а поскольку MSD не использует всех возможностей шины, то для экономии места в нём были сделаны некоторые упрощения, за ненадобностью. Когда я подставил в движок дескрипторы CDC, то он в тех местах где "упрощено" - стал слать пустые пакеты, типа просто подтверждать приём. За что от Хоста получил Suspend biggrin.gif
В общем буду переписывать движок, чтоб был совсем уж универсальный.

Что нового узнал при снятии логов.
1. Suspend в процессе энумерации и работы сам по себе не возникает. Т.е. всё-таки, это ситуация неправильная. Проверил на PL2303, CP2102, FT232R и AVR-CDC (на ATMega48). Даже к бездействующему устройству непрерывно шлются Sync-пакеты. Только и разницы, что для Low Speed это каждые 8ms, а для Full Speed каждую 1ms.

2. Программа Saleae Logic научилась расшифровывать USB Low Speed и Full Speed, что радует rolleyes.gif

3. PL2303, CP2102 и FT232R, хоть и USB-COM переходники, но дескрипторы у них не стандартные для CDC (нет функциональных дескрипторов, о которых пишет Агуров, и которые в спецификации CDC), и потому без специально написанного под них драйвера работать напрямую с Windows они не могут.
Зато на Android-смартфоне, все вышеназванные переходники (включая AVR-CDC на Mega48) работают без дополнительных драйверов. Такой вот парадокс laughing.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 14:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01354 секунд с 7
ELECTRONIX ©2004-2016