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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> STM32f4 виртуальный COM порт подключение/отключение USB
Alex_Golubev
сообщение Dec 9 2017, 12:25
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 137
Регистрация: 18-03-17
Пользователь №: 95 877



Привет.
Как понять программно что шнурок USB отключен от device и сейчас не нужно передавать данные Host? Используется Cube. Стандартные функции приема передачи данных.
Go to the top of the page
 
+Quote Post
uriy
сообщение Dec 9 2017, 13:59
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 355
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Мало что понятно.
У вас на STM32F4 сделан CDC Host. К нему соединяется сторонний девайс. Вам надо понять подключено к вашему хосту устройство или нет?
Go to the top of the page
 
+Quote Post
Alex_Golubev
сообщение Dec 9 2017, 14:22
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 137
Регистрация: 18-03-17
Пользователь №: 95 877



Нет сделан CDC device (виртуальный COM порт). Надо понять отключен device от Host (ПК) или нет.

Сообщение отредактировал Alex_Golubev - Dec 9 2017, 14:24
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 9 2017, 14:34
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 719
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Alex_Golubev @ Dec 9 2017, 20:22) *
Нет сделан CDC device (виртуальный COM порт). Надо понять отключен device от Host (ПК) или нет.

Мониторить VBUS?


--------------------
Go to the top of the page
 
+Quote Post
Alex_Golubev
сообщение Dec 9 2017, 14:40
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 137
Регистрация: 18-03-17
Пользователь №: 95 877



Можно смотреть и Vbus.
Что вы думаете о такой конструкции ?

if(hUsbDeviceFS.dev_state==USBD_STATE_CONFIGURED) {
CDC_Transmit_FS(testDataToSend, strlen((char*)testDataToSend) );
}
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 9 2017, 14:46
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 719
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Alex_Golubev @ Dec 9 2017, 20:40) *
Что вы думаете о такой конструкции ?

Ничего не думаю. Чисто по протоколу, по моему, не возможно отследить отключение устройства. То что встроено в STM32 (USB или OTG) основано на мониторинге VBUS.
Ну и, на мой взгляд, это самый надежный вариант.


--------------------
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 9 2017, 16:02
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 099
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(prottoss @ Dec 9 2017, 16:46) *
Ничего не думаю. Чисто по протоколу, по моему, не возможно отследить отключение устройства.

Ну почему невозможно. Можно например отслеживать наличие SOF-ов. Пропали - значит нет хоста.
Но правильнее всё-таки - VBUS.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 9 2017, 16:06
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 719
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(jcxz @ Dec 9 2017, 22:02) *
Но правильнее всё-таки - VBUS.
Это выгоднее с точки зрения экономии ресурсов. Повесить прерывание...


--------------------
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 9 2017, 17:29
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 188
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Какой смысл что-то слать, если на той стороне порт не открыт и данные забирать некому? После прихода в CDC запроса setup request с типа SET_CONTROL_LINE_STATE с параметром 3 порт открыт, можно слать привествие. После прихота этого же запроса с другим значением параметра или после установки конфигурации 0 - порт закрыт. Во всяком случае у меня это красиво работает и под линухом и под виндовсом: пользователь запускает терминалку и получает приветствие. Как это сделать в кубе - разбирайтесь сами, когда я скомпилил пример из куба и получил 25 К кода только от голого виртуального последовательного порта - написал свой стек.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Alex_Golubev
сообщение Dec 10 2017, 06:24
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 137
Регистрация: 18-03-17
Пользователь №: 95 877



Цитата
После прихода в 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));
}

Сообщение отредактировал Alex_Golubev - Dec 10 2017, 06:24
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 10 2017, 07:41
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 719
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Alex_Golubev @ Dec 10 2017, 12:24) *
Вот я также думаю, но можно подстраховаться 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 должна быть заведена в МК.


--------------------
Go to the top of the page
 
+Quote Post
Alex_Golubev
сообщение Dec 10 2017, 13:22
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 137
Регистрация: 18-03-17
Пользователь №: 95 877



prottoss все работает я конечно еще протестирую, но сегодня у меня все работало.
Я хочу еще спросить а как правильно программно делать disconnect от usb в режиме cdc?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 10 2017, 14:15
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 719
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Alex_Golubev @ Dec 10 2017, 19:22) *
prottoss все работает я конечно еще протестирую, но сегодня у меня все работало.
Я хочу еще спросить а как правильно программно делать disconnect от usb в режиме cdc?

Да вроде ни каких примудростей нет:
1. Запретить прерывания от USB-модуля в МК.
2. Отключить pull-up резистор от шины.


--------------------
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Dec 11 2017, 08:01
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 955
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(Сергей Борщ @ Dec 9 2017, 20:29) *
Какой смысл что-то слать, если на той стороне порт не открыт и данные забирать некому?

Сергей, полностью поддерживаю! Почему-то все остальные поняли вопрос буквально...

Цитата(Сергей Борщ @ Dec 9 2017, 20:29) *
После прихода в CDC запроса setup request с типа SET_CONTROL_LINE_STATE с параметром 3 порт открыт, можно слать привествие. После прихота этого же запроса с другим значением параметра или после установки конфигурации 0 - порт закрыт.

Параметр 3 - это при наличии DTR со стороны хоста.
И если большинство "обычных" софтин поднимают его, то нежно любимый мной Bray Terminal оставляет его на усмотрение пользователя. И по умолчанию он там выключен...

Подскажите, установка конфигурации 0 - это закрытие виртуального порта, или отсоединение устройства?
Если первое, то флажок "connected" можно ставить по любому SET_CONTROL_LINE_STATE.
Давно собираюсь переделать свою реализацию...


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
0men
сообщение Dec 11 2017, 11:08
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 7-05-05
Пользователь №: 4 819



if (hUsbDevice_0 == 0) то шнурок отключен
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th February 2018 - 03:53
Рейтинг@Mail.ru


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