Alex_Golubev 0 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба Привет. Как понять программно что шнурок USB отключен от device и сейчас не нужно передавать данные Host? Используется Cube. Стандартные функции приема передачи данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба Мало что понятно. У вас на STM32F4 сделан CDC Host. К нему соединяется сторонний девайс. Вам надо понять подключено к вашему хосту устройство или нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 9 декабря, 2017 Опубликовано 9 декабря, 2017 (изменено) · Жалоба Нет сделан CDC device (виртуальный COM порт). Надо понять отключен device от Host (ПК) или нет. Изменено 9 декабря, 2017 пользователем Alex_Golubev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба Нет сделан CDC device (виртуальный COM порт). Надо понять отключен device от Host (ПК) или нет. Мониторить VBUS? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба Можно смотреть и Vbus. Что вы думаете о такой конструкции ? if(hUsbDeviceFS.dev_state==USBD_STATE_CONFIGURED) { CDC_Transmit_FS(testDataToSend, strlen((char*)testDataToSend) ); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба Что вы думаете о такой конструкции ? Ничего не думаю. Чисто по протоколу, по моему, не возможно отследить отключение устройства. То что встроено в STM32 (USB или OTG) основано на мониторинге VBUS. Ну и, на мой взгляд, это самый надежный вариант. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба Ничего не думаю. Чисто по протоколу, по моему, не возможно отследить отключение устройства. Ну почему невозможно. Можно например отслеживать наличие SOF-ов. Пропали - значит нет хоста. Но правильнее всё-таки - VBUS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба Но правильнее всё-таки - VBUS.Это выгоднее с точки зрения экономии ресурсов. Повесить прерывание... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба Какой смысл что-то слать, если на той стороне порт не открыт и данные забирать некому? После прихода в CDC запроса setup request с типа SET_CONTROL_LINE_STATE с параметром 3 порт открыт, можно слать привествие. После прихота этого же запроса с другим значением параметра или после установки конфигурации 0 - порт закрыт. Во всяком случае у меня это красиво работает и под линухом и под виндовсом: пользователь запускает терминалку и получает приветствие. Как это сделать в кубе - разбирайтесь сами, когда я скомпилил пример из куба и получил 25 К кода только от голого виртуального последовательного порта - написал свой стек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 10 декабря, 2017 Опубликовано 10 декабря, 2017 (изменено) · Жалоба После прихода в CDC запроса setup request с типа SET_CONTROL_LINE_STATE с параметром 3 порт открыт, можно слать привествие. После прихота этого же запроса с другим значением параметра или после установки конфигурации 0 - порт закрыт Вот я также думаю, но можно подстраховаться Vbus еще. В Cube есть: /* Device Status */ #define USBD_STATE_DEFAULT 1 #define USBD_STATE_ADDRESSED 2 #define USBD_STATE_CONFIGURED 3 #define USBD_STATE_SUSPENDED 4 Написал вот так: if( (hUsbDeviceHS.dev_state==USBD_STATE_CONFIGURED) ){ CDC_Transmit_HS(p ,strlen (text)); } Изменено 10 декабря, 2017 пользователем Alex_Golubev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 10 декабря, 2017 Опубликовано 10 декабря, 2017 · Жалоба Вот я также думаю, но можно подстраховаться Vbus еще. В Cube есть: /* Device Status */ #define USBD_STATE_DEFAULT 1 #define USBD_STATE_ADDRESSED 2 #define USBD_STATE_CONFIGURED 3 #define USBD_STATE_SUSPENDED 4 Написал вот так: if( (hUsbDeviceHS.dev_state==USBD_STATE_CONFIGURED) ){ CDC_Transmit_HS(p ,strlen (text)); } Устройство будет сконфигурировано хостом, и тут, бац, выдернули шнур. Устройтство осталось сконфигурировано, потому как от хоста не получало пакета SET_CONFIGURATION = 0. Что дальше? Выдернуть могут на любом состоянии. Но узаете о том, что не подключены только через VBUS. В STM32F4 есть регистры/биты, которые могут сигнализировать об отключении (некогда копаться в даташите чтобы указать точно). Но, естественно сама линия VBUS должна быть заведена в МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 10 декабря, 2017 Опубликовано 10 декабря, 2017 · Жалоба prottoss все работает я конечно еще протестирую, но сегодня у меня все работало. Я хочу еще спросить а как правильно программно делать disconnect от usb в режиме cdc? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 10 декабря, 2017 Опубликовано 10 декабря, 2017 · Жалоба prottoss все работает я конечно еще протестирую, но сегодня у меня все работало. Я хочу еще спросить а как правильно программно делать disconnect от usb в режиме cdc? Да вроде ни каких примудростей нет: 1. Запретить прерывания от USB-модуля в МК. 2. Отключить pull-up резистор от шины. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 11 декабря, 2017 Опубликовано 11 декабря, 2017 · Жалоба Какой смысл что-то слать, если на той стороне порт не открыт и данные забирать некому? Сергей, полностью поддерживаю! Почему-то все остальные поняли вопрос буквально... После прихода в CDC запроса setup request с типа SET_CONTROL_LINE_STATE с параметром 3 порт открыт, можно слать привествие. После прихота этого же запроса с другим значением параметра или после установки конфигурации 0 - порт закрыт. Параметр 3 - это при наличии DTR со стороны хоста. И если большинство "обычных" софтин поднимают его, то нежно любимый мной Bray Terminal оставляет его на усмотрение пользователя. И по умолчанию он там выключен... Подскажите, установка конфигурации 0 - это закрытие виртуального порта, или отсоединение устройства? Если первое, то флажок "connected" можно ставить по любому SET_CONTROL_LINE_STATE. Давно собираюсь переделать свою реализацию... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0men 2 11 декабря, 2017 Опубликовано 11 декабря, 2017 · Жалоба if (hUsbDevice_0 == 0) то шнурок отключен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться