STM32 и USB (практика)
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: STM32 и USB (практика)
По поводу IN.
Приходит от хоста запрос чего-то. Пускай какого-то дескриптора. Вы ложите копируете соответствующие данные в буфер и устанавливаете VALID. Если данные "уйдут", выставится соответствующий флаг об успешной отправки. Кроме того, если хосту понравятся данные, он отправит ZLP устройству, а не устройство хосту. И как мне кажется, это очень логично.
Вот Вам еще раз ссылка, на лог всех данных идущих от хоста. viewtopic.php?p=2698073#p2698073
Приходит от хоста запрос чего-то. Пускай какого-то дескриптора. Вы ложите копируете соответствующие данные в буфер и устанавливаете VALID. Если данные "уйдут", выставится соответствующий флаг об успешной отправки. Кроме того, если хосту понравятся данные, он отправит ZLP устройству, а не устройство хосту. И как мне кажется, это очень логично.
Вот Вам еще раз ссылка, на лог всех данных идущих от хоста. viewtopic.php?p=2698073#p2698073
Re: STM32 и USB (практика)
Про хост понятно, но тут речь вот о чем:
То есть не ОН нам, а МЫ ему. Нужно ли это делать?
Данные уходят (флаг выставляется), но ZLP не приходит. И дело тут вряд ли в дескрипторе, так как я пробовал не один вариант и все сверял с Агуровым - сходилось...
Radist_M писал(а):отправить пакет нулевой длинны, чтоб комп понял, что мы приняли пакет.
То есть не ОН нам, а МЫ ему. Нужно ли это делать?
Z_h_e писал(а):Если данные "уйдут", выставится соответствующий флаг об успешной отправки
Z_h_e писал(а):Кроме того, если хосту понравятся данные, он отправит ZLP устройству
Данные уходят (флаг выставляется), но ZLP не приходит. И дело тут вряд ли в дескрипторе, так как я пробовал не один вариант и все сверял с Агуровым - сходилось...

- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: STM32 и USB (практика)
Я выложил свой исходник. Что мешает поглядеть в каких случаях я отправляю zlp.
Re: STM32 и USB (практика)
ZLP не нужен... Я сдвинулся с мертвой точки и НАКОНЕЦ-ТО получил SET ADDRESS
Добавил функцию сброса флагов:
И самая главная ошибка- было:
нужно было:
Отлаживал по шагам и случайно заметил, что при таком значении маски в некоторых случаях будет изменяться бит, который должен сохранить свое значение.
В итоге получились две функции отработки STAT битов:
Да, топорно, но зато очень наглядно и РАБОТАЕТ!!!
Добавил функцию сброса флагов:
Спойлер
Код: Выделить всё
void CTR_RXTXClear (uint8_t EPNum, uint16_t RXBitClear, uint16_t TXBitClear) //
{
// RXTX BitClear
// 0 - RX 0 - no change
// 1 - TX 1 - bit is clear
uint16_t buff;
buff=((uint16_t*)0x40005C00)[EPNum]; //0x40005C00 базовый адрес регистров юсб
buff^=((uint16_t) (RXBitClear << 15) | (uint16_t) (TXBitClear << 7));
buff&=0x0F0F;
((uint16_t*)0x40005C00)[EPNum]=buff;
}
И самая главная ошибка- было:
Спойлер
Код: Выделить всё
void SetRXTX (uint8_t EPNum, uint8_t EPStatus, uint8_t RXTX) //номер регистра EPnR, S - Disabled,Stall,NAK,Valid, f - TX отправить RX прием
{
/*
EPNum EPStatus RXTX
0 to 7 0 - Disable 0 - RX
1 - Stall 1 - TX
2 - NAK
3 - VALID
*/
uint16_t buff;
uint8_t stat;
buff = ((uint16_t*)0x40005C00)[EPNum]; //0x40005C00 базовый адрес регистров юсб
test6 = *((uint16_t*)0x40005C00);
if (RXTX == 1)////////////////////////////////RXTX = 1 = TX
{
stat = (buff>>4) & 3;
switch (stat)
{
case 0: //DISABLE
switch (EPStatus)
{
case 0:
break;
case 1:
buff^=0x0010; buff&=0x8FBF; break; //TX
case 2:
buff^=0x0020; buff&=0x8FBF; break; //TX
case 3:
buff^=0x0030; buff&=0x8FBF; break; //TX
}
break;
...........................................................
нужно было:
Спойлер
Код: Выделить всё
void SetRXTX (uint8_t EPNum, uint8_t EPStatus, uint8_t RXTX) //номер регистра EPnR, S - Disabled,Stall,NAK,Valid, f - TX отправить RX прием
{
/*
EPNum EPStatus RXTX
0 to 7 0 - Disable 0 - RX
1 - Stall 1 - TX
2 - NAK
3 - VALID
*/
uint16_t buff;
uint8_t stat;
buff = ((uint16_t*)0x40005C00)[EPNum]; //0x40005C00 базовый адрес регистров юсб
test6 = *((uint16_t*)0x40005C00);
if (RXTX == 1)////////////////////////////////RXTX = 1 = TX
{
stat = (buff>>4) & 3;
switch (stat)
{
case 0: //DISABLE
switch (EPStatus)
{
case 0:
break;
case 1:
buff^=0x0010; buff&=0x8F9F; break; //TX
case 2:
buff^=0x0020; buff&=0x8FAF; break; //TX
case 3:
buff^=0x0030; buff&=0x8FBF; break; //TX
}
break;
.....................................................................
Отлаживал по шагам и случайно заметил, что при таком значении маски в некоторых случаях будет изменяться бит, который должен сохранить свое значение.
В итоге получились две функции отработки STAT битов:
Спойлер
Код: Выделить всё
void SetTX (uint8_t EPNum, uint8_t EPStatus) //номер регистра EPnR, S - Disabled,Stall,NAK,Valid, f - TX отправить RX прием
{
/*
EPNum EPStatus
0 to 7 0 - Disable
1 - Stall
2 - NAK
3 - VALID
*/
uint16_t buff;
uint8_t stat;
buff = ((uint16_t*)0x40005C00)[EPNum]; //0x40005C00 базовый адрес регистров юсб
stat = (buff>>4) & 3;
switch (stat)
{
case 0: //DISABLE
switch (EPStatus)
{
case 0:
break;
case 1:
buff^=0x0010; buff&=0x8F9F; break; //TX
case 2:
buff^=0x0020; buff&=0x8FAF; break; //TX
case 3:
buff^=0x0030; buff&=0x8FBF; break; //TX
}
break;
case 1: //STALL
switch (EPStatus)
{
case 0:
buff^=0x0010; buff&=0x8F9F; break; //TX
case 1:
break;
case 2:
buff^=0x0030; buff&=0x8FBF; break; //TX
case 3:
buff^=0x0020; buff&=0x8FAF; break; //TX
}
break;
case 2: //NAK
switch (EPStatus)
{
case 0:
buff^=0x0020; buff&=0x8FAF; break; //TX
case 1:
buff^=0x0030; buff&=0x8FBF; break; //TX
case 2:
break;
case 3:
buff^=0x0010; buff&=0x8F9F; break; //TX
}
break;
case 3: //VALID
switch (EPStatus)
{
case 0:
buff^=0x0030; buff&=0x8FBF; break; //TX
case 1:
buff^=0x0020; buff&=0x8FAF; break; //TX
case 2:
buff^=0x0010; buff&=0x8F9F; break; //TX
case 3:
break;
}
break;
default: break;
}
((uint16_t*)0x40005C00)[EPNum]=buff;
}
void SetRX (uint8_t EPNum, uint8_t EPStatus) //номер регистра EPnR, S - Disabled,Stall,NAK,Valid, f - TX отправить RX прием
{
/*
EPNum EPStatus
0 to 7 0 - Disable
1 - Stall
2 - NAK
3 - VALID
*/
uint16_t buff;
uint8_t stat;
buff = ((uint16_t*)0x40005C00)[EPNum]; //0x40005C00 базовый адрес регистров юсб
stat = (buff>>12) & 3;
switch (stat)
{
case 0: //DISABLE
switch (EPStatus)
{
case 0:
break;
case 1:
buff^=0x1000; buff&=0x9F8F; break; //RX
case 2:
buff^=0x2000; buff&=0xAF8F; break; //RX
case 3:
buff^=0x3000; buff&=0xBF8F; break; //RX
}
break;
case 1: //STALL
switch (EPStatus)
{
case 0:
buff^=0x1000; buff&=0x9F8F; break; //RX
case 1:
break;
case 2:
buff^=0x3000; buff&=0xBF8F; break; //RX
case 3:
buff^=0x2000; buff&=0xAF8F; break; //RX
}
break;
case 2: //NAK
switch (EPStatus)
{
case 0:
buff^=0x2000; buff&=0xAF8F; break; //RX
case 1:
buff^=0x3000; buff&=0xBF8F; break; //RX
case 2:
break;
case 3:
buff^=0x1000; buff&=0x9F8F; break; //RX
}
break;
case 3: //VALID
switch (EPStatus)
{
case 0:
buff^=0x3000; buff&=0xBF8F; break; //RX
case 1:
buff^=0x2000; buff&=0xAF8F; break; //RX
case 2:
buff^=0x1000; buff&=0x9F8F; break; //RX
case 3:
break;
}
break;
}
((uint16_t*)0x40005C00)[EPNum]=buff;
}
Да, топорно, но зато очень наглядно и РАБОТАЕТ!!!
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: STM32 и USB (практика)
Я конечно рад за Вас, что продвинулись дальше, очень скучно топтаться на месте. Однако подобные функции я выкладывал много постов назад и почему то они Вас не заинтересовали.
По поводу Вашей функции void CTR_RXTXClear (uint8_t EPNum, uint16_t RXBitClear, uint16_t TXBitClear). Оба флага будут сброшены при любых значениях 2 и 3 ого параметров функции.
По поводу Вашей функции void CTR_RXTXClear (uint8_t EPNum, uint16_t RXBitClear, uint16_t TXBitClear). Оба флага будут сброшены при любых значениях 2 и 3 ого параметров функции.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: STM32 и USB (практика)
Вот еще, сразу не заметил. ((uint16_t*)0x40005C00)[EPNum]; Так Вы прочитаете/запишите правильно только нулевой регистр. Или считывайте 32 бита или используйте двойной индекс.
Re: STM32 и USB (практика)
Z_h_e писал(а):Однако подобные функции я выкладывал много постов назад и почему то они Вас не заинтересовали
Не то чтобы не устроили, просто у Вас только в два состояния устанавливаются, а я хотел сделать все - чтоб наверняка, но не до конца все правильно рассчитал...
Z_h_e писал(а):Вот еще, сразу не заметил. ((uint16_t*)0x40005C00)[EPNum]; Так Вы прочитаете/запишите правильно только нулевой регистр
Спасибо за замечание. Учту
Пока продвинулся до запроса дескриптора конфигурации и напоролся на грабли. Взял дескриптор со страницы: http://badembed.ru/stm32l-usb-cdc-virtualnyj-com-port-nachalo/ Там 67 элементов, а буфер расчитан на 64. Как тогда быть?

Re: STM32 и USB (практика)
Разобрался... Сначала нужно 9 байт, а потом понемногу досылать остальное (по мере затребования хостом).
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: STM32 и USB (практика)
Думаю Вы неправы. У меня тоже был длинный дескриптор и вроде как у меня удалось отправить его по частям. Затем он у меня уменьшился и необходимость в этом отпала. Когда дескриптор был еще длинным )), мое USB не работало еще полностью и это было давно, я напишу как я делал, но есть сомнения, что я правильно помню.isx писал(а): Сначала нужно 9 байт, а потом понемногу досылать остальное (по мере затребования хостом).
- хост запрашивает первые 9 байт дескриптора конфиг
+ устройство отправляет их.
- хост отправляет ZLP
- хост запрашивает то ли полный длинный дескриптор (например 67) то ли 64
+ устройство отпраляет первые 64 байта
- хост запрашивает остальные 3 байта
+ устройство отпраляет остаток.
- хост отпраляет ZLP
Re: STM32 и USB (практика)
Z_h_e писал(а):void CTR_RXTXClear (uint8_t EPNum, uint16_t RXBitClear, uint16_t TXBitClear). Оба флага будут сброшены при любых значениях 2 и 3 ого параметров функции.
Исправил buff&=0x0F0F; на buff&=0x8F8F;.
Z_h_e писал(а): ((uint16_t*)0x40005C00)[EPNum]; Так Вы прочитаете/запишите правильно только нулевой регистр.
Исправил на ((uint16_t*)0x40005C00)[EPNum*2]
Re: STM32 и USB (практика)
Z_h_e писал(а):- хост запрашивает первые 9 байт дескриптора конфиг
+ устройство отправляет их.
- хост отправляет ZLP
- хост запрашивает то ли полный длинный дескриптор (например 67) то ли 64
+ устройство отпраляет первые 64 байта
- хост запрашивает остальные 3 байта
+ устройство отпраляет остаток.
- хост отпраляет ZLP
Все почти так и происходит.
- хост запрашивает первые 9 байт дескриптора конфиг
+ устройство отправляет их.
- хост отправляет ZLP
- хост запрашивает то ли полный длинный дескриптор (например 67) то ли 64
(приходит 0680 0200 0000 0043)
+ устройство отпраляет первые 64 байта
и дальше ничего не происходит. В буфере приема так и остается 0680 0200 0000 0043.
Но, если отправлять не 64 байта, а отправить также 9 байт, то идут запросы строк, потом снова запрос 12-ти байт дескриптора, потом такой запрос:
0680 0200 0000 0109
и все. Если отправть 9 байт дескриптра конфигурации, то ничего не меняется...
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: STM32 и USB (практика)
Я ж говорю, я точно не помню как отправлял. Возможно нет запроса от хоста на вторую часть. Наверное тогда надо после успешной отправки 64 байт, не ждать запроса, а положить в буфер еще 3 байта и сразу выставить VALID.
-
Immortal_Buka
- Родился
- Сообщения: 9
- Зарегистрирован: Ср май 06, 2015 14:21:38
Re: STM32 и USB (практика)
в f429 для контрольной передачи:
1 - получаем, например, запрос гет-дескриптор
2 - отправляем этот дескриптор хосту
3 - получаем от хоста нулевой пакет.
Проблема с 3им пунктом.
Делаю вот так:
Но в прерывание USB_OTG_DOEPINT_XFRC так и не попадаю.
Как правильно? =(
1 - получаем, например, запрос гет-дескриптор
2 - отправляем этот дескриптор хосту
3 - получаем от хоста нулевой пакет.
Проблема с 3им пунктом.
Делаю вот так:
Код: Выделить всё
USB_OTG_HS_OUTEP(0)->DOEPTSIZ = (1 << 19)|64|USB_OTG_DOEPTSIZ_STUPCNT;
USB_OTG_HS_OUTEP(0)->DOEPDMA = (uint32_t)&rx_buf[0];
USB_OTG_HS_OUTEP(0)->DOEPCTL |= USB_OTG_DOEPCTL_CNAK|USB_OTG_DOEPCTL_EPENA;
Но в прерывание USB_OTG_DOEPINT_XFRC так и не попадаю.
Как правильно? =(
Re: STM32 и USB (практика)
Решил проблему топорно:
Вроде работает, но не всегда. Приходится несколько раз передергивать шнур и ресетить МК в отладчике, пока запрос дескриптора (см. шестой элемент массива в приложении) успешно отработается. Пока не могу понять, почему так происходит
....
Теперь зависаю после запроса 9-ти байт конфигурации (последний элемент массива). После отправки 9-ти байт приходит ZLP и все - больше никаких запросов.
Куда можно дальше копать
?
P.S. Значения в массив записываются по каждому срабатыванию прерывания по успешному приему данных (CTR_TX).
Код: Выделить всё
case 0x0043:
SendBuff (Virtual_Com_Port_ConfigDescriptor,64,0);
SetTX(0, 3); // to Valid TX
while ((USB_EP0R & USB_EP_CTR_TX)==0)
{;}
for (i = 64; i < 68; i+=2) // i = 18
{
TXBuff = Virtual_Com_Port_ConfigDescriptor[i] + (Virtual_Com_Port_ConfigDescriptor[i+1] << 8);
*(__IO uint16_t*)(0x40006080 + (i-64)*2) = TXBuff;
}
*(__IO uint16_t*)(0x40006004) = (uint16_t) 3;
SetTX(0, 3); // to Valid TX
break;Вроде работает, но не всегда. Приходится несколько раз передергивать шнур и ресетить МК в отладчике, пока запрос дескриптора (см. шестой элемент массива в приложении) успешно отработается. Пока не могу понять, почему так происходит
....Теперь зависаю после запроса 9-ти байт конфигурации (последний элемент массива). После отправки 9-ти байт приходит ZLP и все - больше никаких запросов.
Куда можно дальше копать
? P.S. Значения в массив записываются по каждому срабатыванию прерывания по успешному приему данных (CTR_TX).
- Вложения
-
- Скрин прерываний по приему данных.png
- (18.15 КБ) 557 скачиваний
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: STM32 и USB (практика)
Может пока стоит попробовать сделать дескриптор покороче? У меня на этой стадии никаких проблем не было, однако когда я дошел до нее, у меня дескриптор не был уже длинным. Так то после запроса 9 байт, следующий запрос должен был быть запрос дескриптора конфигурации уже с точной длиной.
-
Immortal_Buka
- Родился
- Сообщения: 9
- Зарегистрирован: Ср май 06, 2015 14:21:38
Re: STM32 и USB (практика)
Делаю вот так:Код: Выделить всё
USB_OTG_HS_OUTEP(0)->DOEPTSIZ = (1 << 19)|64|USB_OTG_DOEPTSIZ_STUPCNT;
USB_OTG_HS_OUTEP(0)->DOEPDMA = (uint32_t)&rx_buf[0];
USB_OTG_HS_OUTEP(0)->DOEPCTL |= USB_OTG_DOEPCTL_CNAK|USB_OTG_DOEPCTL_EPENA;
Но в прерывание USB_OTG_DOEPINT_XFRC так и не попадаю
Сам себя поправил, в ините забыл проинициализировать регистр USB_OTG_HS_DEVICE->DTHRCTL
Re: STM32 и USB (практика)
Вообщем, навертел, накрутил, но до конца не дошло ) .
Теперь энумерация устройства проходит нормально (см. до 21-го элемента массива включительно). Потом устройстве появляется в диспетчере устройств как виртуальный ком порт. Advanced Terminal его видит и при попытке подключиться к порту вылетает ещё куча запросов. Описать дальше я не могу нормально, так как сам толком не понимаю что происходит. Прикладываю код с обработкой прерываний и скрин со всеми прерываниями по CTR_RX с запросами.
Теперь энумерация устройства проходит нормально (см. до 21-го элемента массива включительно). Потом устройстве появляется в диспетчере устройств как виртуальный ком порт. Advanced Terminal его видит и при попытке подключиться к порту вылетает ещё куча запросов. Описать дальше я не могу нормально, так как сам толком не понимаю что происходит. Прикладываю код с обработкой прерываний и скрин со всеми прерываниями по CTR_RX с запросами.
Спойлер
Код: Выделить всё
if (USB_EP0R & USB_EP_CTR_RX)
{
uint16_t TXBuff = 0;
CTR_RXTXClear (0, 1, 0);
EnterFuncCountRX++;
if (EnterFuncCountRX == NumOfRepeatRX)
{
test4 = 0;
}
switch (*(__IO uint16_t*)(0x40006100)) ///////////////////////// 32
{
case 0x0680:
switch (*(__IO uint16_t*)(0x40006104))
{
case 0x0100:
SendBuff (Virtual_Com_Port_DeviceDescriptor, (*(__IO uint8_t*)(0x4000610C)),0);
SetTX(0, 3); // to Valid TX
break;
case 0x0200:
testCount++;
switch (*(__IO uint16_t*)(0x4000610C))
{
case 0x0009:
SendBuff (Virtual_Com_Port_ConfigDescriptor,9,0);
SetTX(0, 3); // to Valid TX
break;
case 0x00FF:
SendBuff (Virtual_Com_Port_ConfigDescriptor,9,0);
SetTX(0, 3); // to Valid TX
break;
case 0x0043: /////////////////////////////////////////////////// DESC_SIZE 0x43
SendBuff (Virtual_Com_Port_ConfigDescriptor,64,0);
SetTX(0, 3); // to Valid TX
while ((USB_EP0R & USB_EP_CTR_TX)==0)
{;}
for (i = 64; i < 68; i+=2) // i = 18
{
*(__IO uint16_t*)(0x40006084) = 0;
TXBuff = Virtual_Com_Port_ConfigDescriptor[i] + (Virtual_Com_Port_ConfigDescriptor[i+1] << 8);
*(__IO uint16_t*)(0x40006080 + (i-64)*2) = TXBuff;
}
*(__IO uint16_t*)(0x40006004) = 3;
SetTX(0, 3); // to Valid TX
SetRX(0, 3);
break;
case 0x0109:
SendBuff (Virtual_Com_Port_ConfigDescriptor,64,0);
SetTX(0, 3); // to Valid TX
while ((USB_EP0R & USB_EP_CTR_TX)==0)
{;}
for (i = 64; i < 68; i+=2) // i = 18
{
TXBuff = Virtual_Com_Port_ConfigDescriptor[i] + (Virtual_Com_Port_ConfigDescriptor[i+1] << 8);
*(__IO uint16_t*)(0x40006080 + (i-64)*2) = TXBuff;
}
*(__IO uint16_t*)(0x40006004) = 3;
SetTX(0, 3); // to Valid TX
SetRX(0, 3);
break;
}
break;
case 0x03EE:
SetTX(0, 1); // to Valid TX
break;
case 0x0303:
SendBuff (Virtual_Com_Port_StringSerial,12,0);
SetTX(0, 3); // to Valid TX
break;
case 0x0300:
SendBuff (Virtual_Com_Port_StringLangID,4,0);
SetTX(0, 3); // to Valid TX
break;
case 0x0302:
SendBuff (Virtual_Com_Port_StringProduct,12,0);
SetTX(0, 3); // to Valid TX
break;
}
break;
case 0x0500:
AdressBuff = *(__IO uint16_t*)(0x40006104);
SendZLP(0);
while ((USB_EP0R & USB_EP_CTR_TX)==0)
{;}
USB_DADDR = AdressBuff + 0x80;
CTR_RXTXClear (0, 0, 1);
break;
case 0x0900:
SendZLP(0);
break;
case 0x21A1:
SendBuff (Virtual_Com_Port_GET_LINE_CODING,7,0);
SetTX(0, 3);
break;
case 0x2221:
SendZLP(0);
break;
case 0x2122:
SendBuff (Virtual_Com_Port_GET_LINE_CODING,7,0);
SetTX(0, 3);
break;
case 0x2021:
SendBuff (Virtual_Com_Port_GET_LINE_CODING,7,0);
SetTX(0, 3);
break;
case 0x0681:
//*(__IO uint16_t*)(0x40006004) = (uint16_t) 0; // ZLP
//SetTX(0, 3);
break;
default:
test4 = *(__IO uint16_t*)(0x40006101);
test4 = 0;
break;
}
return;
}
- Вложения
-
- Моя Энумерация.png
- (36.2 КБ) 609 скачиваний
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: STM32 и USB (практика)
Попробовал разобрать значение поля bmRequestType=0x22.
7 - 0 хост что-то отправляет устройству (т.е. ничего не запрашивает)
6:5 - 01 специфический запрос для данного класса
4:0 - 00010 другой получатель
Кто такой другой получатель мне не понятно, а вот специфический это значит что надо смотреть запросы для класса CDC. Вот тут попробуйте порыть http://www.usb.org. Где-то в инете увидел, что надо смотреть в разделе 5, но не знаю какого документа, хотя самому интересно, но сейчас времени нет.
7 - 0 хост что-то отправляет устройству (т.е. ничего не запрашивает)
6:5 - 01 специфический запрос для данного класса
4:0 - 00010 другой получатель
Кто такой другой получатель мне не понятно, а вот специфический это значит что надо смотреть запросы для класса CDC. Вот тут попробуйте порыть http://www.usb.org. Где-то в инете увидел, что надо смотреть в разделе 5, но не знаю какого документа, хотя самому интересно, но сейчас времени нет.
Re: STM32 и USB (практика)
Вот тут в конце статьи расписано не плохо http://www.softelectro.ru/usb.html , но у меня как-то не так проходит процесс.
Плюс прошелся сниффером по своей прошивке и по прошивке с Microtechnics.ru (тоже CDC и нормально подключается к программе терминалу). Думал, что мне это что-то прояснит, но ошибся. Может более опытные смогут что-то там разглядеть
.
Процесс моей энумерации:
The USB device has just been connected to the system.
000001: Get Descriptor Request (DOWN), 2016-08-25 19:20:37,4500336 +0,0000719 (1. Device: STMicroelectronics Virtual COM Port (COM13))
Descriptor Type: Device
Descriptor Index: 0x0
Transfer Buffer Size: 0x12 bytes
000002: Control Transfer (UP), 2016-08-25 19:20:37,4502671 +0,0002335. (1. Device: STMicroelectronics Virtual COM Port (COM13)) Status: 0x00000000
Pipe Handle: Control Pipe
12 01 00 02 02 00 00 40 83 04 40 57 00 02 01 02
03 01 .......@ѓ.@W....
..
Setup Packet
80 06 00 01 00 00 12 00 Ђ.......
Recipient: Device
Request Type: Standard
Direction: Device->Host
Request: 0x6 (GET_DESCRIPTOR)
Value: 0x100
Index: 0x0
Length: 0x12
000003: Get Descriptor Request (DOWN), 2016-08-25 19:20:37,4502729 +0,0000058 (1. Device: STMicroelectronics Virtual COM Port (COM13))
Descriptor Type: Configuration
Descriptor Index: 0x0
Transfer Buffer Size: 0x109 bytes
000004: Control Transfer (UP), 2016-08-25 19:20:37,4505108 +0,0002379. (1. Device: STMicroelectronics Virtual COM Port (COM13)) Status: 0x00000000
Pipe Handle: Control Pipe
09 02 43 00 02 01 00 C0 64 09 04 00 00 01 02 02
00 01 05 24 00 10 01 05 24 01 00 01 04 24 02 02
05 24 06 00 01 07 05 81 03 40 00 FF 09 04 01 00
02 0A 00 00 04 07 05 02 02 40 00 00 07 05 83 02
40 00 00 ..C....Аd.......
...$....$....$..
.$.....Ѓ.@.я....
.........@....ѓ.
@..
Setup Packet
80 06 00 02 00 00 09 01 Ђ.......
Recipient: Device
Request Type: Standard
Direction: Device->Host
Request: 0x6 (GET_DESCRIPTOR)
Value: 0x200
Index: 0x0
Length: 0x109
000005: Select Configuration (DOWN), 2016-08-25 19:20:37,4505156 +0,0000048 (1. Device: STMicroelectronics Virtual COM Port (COM13))
Configuration Index: 1
000006: Select Configuration (UP), 2016-08-25 19:20:37,4506974 +0,0000004. (1. Device: STMicroelectronics Virtual COM Port (COM13)) Status: 0x00000000
Configuration Index: 1
Configuration Handle: 0x3327b90
000007: Class-Specific Request (DOWN), 2016-08-25 19:20:37,4507124 +0,0000150 (1. Device: STMicroelectronics Virtual COM Port (COM13))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x21
Value: 0x0
Get 0x7 bytes from the device
000008: Control Transfer (UP), 2016-08-25 19:20:37,4508854 +0,0001730. (1. Device: STMicroelectronics Virtual COM Port (COM13)) Status: 0x00000000
Pipe Handle: Control Pipe
00 C2 01 00 00 00 08 .В.....
Setup Packet
A1 21 00 00 00 00 07 00 Ў!......
Recipient: Interface
Request Type: Class
Direction: Device->Host
Request: 0x21 (Unknown)
Value: 0x0
Index: 0x0
Length: 0x7
000009: Class-Specific Request (DOWN), 2016-08-25 19:20:37,4509364 +0,0000510 (1. Device: STMicroelectronics Virtual COM Port (COM13))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x22
Value: 0x0
Send 0x0 bytes to the device
000010: Control Transfer (UP), 2016-08-25 19:20:37,4511358 +0,0001994. (1. Device: STMicroelectronics Virtual COM Port (COM13)) Status: 0x00000000
Pipe Handle: Control Pipe
Setup Packet
21 22 00 00 00 00 00 00 !"......
Recipient: Interface
Request Type: Class
Direction: Host->Device
Request: 0x22 (Unknown)
Value: 0x0
Index: 0x0
Length: 0x0
000013: Bulk or Interrupt Transfer (UP), 2016-08-25 19:20:37,4512626 +0,0001045. (1. Device: STMicroelectronics Virtual COM Port (COM13)) Status: 0xc0000004
Pipe Handle: 0x35d2798 (Endpoint Address: 0x83)
Get 0x0 bytes from the device
000014: Bulk or Interrupt Transfer (UP), 2016-08-25 19:20:37,5474432 +0,0961806. (1. Device: STMicroelectronics Virtual COM Port (COM13)) Status: 0xc0000004
Pipe Handle: 0x57d3608 (Endpoint Address: 0x81)
Get 0x0 bytes from the device
При этом, Device Monitor Studio выделяет 13 и 14-е шаги красным цветом.
Процесс энумерации при использовании рабочей прошивки:
The USB device has just been connected to the system.
000001: Get Descriptor Request (DOWN), 2016-08-25 19:07:39,5186023 +0,0000807 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Descriptor Type: Device
Descriptor Index: 0x0
Transfer Buffer Size: 0x12 bytes
000002: Control Transfer (UP), 2016-08-25 19:07:39,5188247 +0,0002224. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
12 01 00 02 02 00 00 40 83 04 40 57 00 02 01 02
03 01 .......@ѓ.@W....
..
Setup Packet
80 06 00 01 00 00 12 00 Ђ.......
Recipient: Device
Request Type: Standard
Direction: Device->Host
Request: 0x6 (GET_DESCRIPTOR)
Value: 0x100
Index: 0x0
Length: 0x12
000003: Get Descriptor Request (DOWN), 2016-08-25 19:07:39,5188306 +0,0000059 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Descriptor Type: Configuration
Descriptor Index: 0x0
Transfer Buffer Size: 0x109 bytes
000004: Control Transfer (UP), 2016-08-25 19:07:39,5190714 +0,0002408. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
09 02 43 00 02 01 00 C0 32 09 04 00 00 01 02 02
01 00 05 24 00 10 01 05 24 01 00 01 04 24 02 02
05 24 06 00 01 07 05 82 03 08 00 FF 09 04 01 00
02 0A 00 00 00 07 05 03 02 40 00 00 07 05 81 02
40 00 00 ..C....А2.......
...$....$....$..
.$.....‚...я....
.........@....Ѓ.
@..
Setup Packet
80 06 00 02 00 00 09 01 Ђ.......
Recipient: Device
Request Type: Standard
Direction: Device->Host
Request: 0x6 (GET_DESCRIPTOR)
Value: 0x200
Index: 0x0
Length: 0x109
000005: Select Configuration (DOWN), 2016-08-25 19:07:39,5190762 +0,0000048 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Configuration Index: 1
000006: Select Configuration (UP), 2016-08-25 19:07:39,5192558 +0,0000004. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Configuration Index: 1
Configuration Handle: 0x3618630
000007: Class-Specific Request (DOWN), 2016-08-25 19:07:39,5192694 +0,0000136 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x21
Value: 0x0
Get 0x7 bytes from the device
000008: Control Transfer (UP), 2016-08-25 19:07:39,5194453 +0,0001759. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
00 C2 01 00 00 00 08 .В.....
Setup Packet
A1 21 00 00 00 00 07 00 Ў!......
Recipient: Interface
Request Type: Class
Direction: Device->Host
Request: 0x21 (Unknown)
Value: 0x0
Index: 0x0
Length: 0x7
000009: Class-Specific Request (DOWN), 2016-08-25 19:07:39,5195043 +0,0000590 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x22
Value: 0x0
Send 0x0 bytes to the device
000010: Control Transfer (UP), 2016-08-25 19:07:39,5196956 +0,0001913. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
Setup Packet
21 22 00 00 00 00 00 00 !"......
Recipient: Interface
Request Type: Class
Direction: Host->Device
Request: 0x22 (Unknown)
Value: 0x0
Index: 0x0
Length: 0x0
000013: Class-Specific Request (DOWN), 2016-08-25 19:07:41,4999857 +1,9802684 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x21
Value: 0x0
Get 0x7 bytes from the device
000014: Control Transfer (UP), 2016-08-25 19:07:41,5001689 +0,0001832. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
00 C2 01 00 00 00 08 .В.....
Setup Packet
A1 21 00 00 00 00 07 00 Ў!......
Recipient: Interface
Request Type: Class
Direction: Device->Host
Request: 0x21 (Unknown)
Value: 0x0
Index: 0x0
Length: 0x7
000015: Class-Specific Request (DOWN), 2016-08-25 19:07:41,5001847 +0,0000158 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x21
Value: 0x0
Get 0x7 bytes from the device
000016: Control Transfer (UP), 2016-08-25 19:07:41,5004090 +0,0002243. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
00 C2 01 00 00 00 08 .В.....
Setup Packet
A1 21 00 00 00 00 07 00 Ў!......
Recipient: Interface
Request Type: Class
Direction: Device->Host
Request: 0x21 (Unknown)
Value: 0x0
Index: 0x0
Length: 0x7
000017: Class-Specific Request (DOWN), 2016-08-25 19:07:41,5005454 +0,0001364 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x22
Value: 0x1
Send 0x0 bytes to the device
000018: Control Transfer (UP), 2016-08-25 19:07:41,5006528 +0,0001074. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
Setup Packet
21 22 01 00 00 00 00 00 !"......
Recipient: Interface
Request Type: Class
Direction: Host->Device
Request: 0x22 (Unknown)
Value: 0x1
Index: 0x0
Length: 0x0
000019: Class-Specific Request (DOWN), 2016-08-25 19:07:41,5007972 +0,0001444 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x21
Value: 0x0
Get 0x7 bytes from the device
000020: Control Transfer (UP), 2016-08-25 19:07:41,5009031 +0,0001059. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
00 C2 01 00 00 00 08 .В.....
Setup Packet
A1 21 00 00 00 00 07 00 Ў!......
Recipient: Interface
Request Type: Class
Direction: Device->Host
Request: 0x21 (Unknown)
Value: 0x0
Index: 0x0
Length: 0x7
..... и т.д.
Плюс прошелся сниффером по своей прошивке и по прошивке с Microtechnics.ru (тоже CDC и нормально подключается к программе терминалу). Думал, что мне это что-то прояснит, но ошибся. Может более опытные смогут что-то там разглядеть
Процесс моей энумерации:
Спойлер
000000: PnP Event: Device Connected (UP), 2016-08-25 19:20:37,4499617 (1. Device: STMicroelectronics Virtual COM Port (COM13))The USB device has just been connected to the system.
000001: Get Descriptor Request (DOWN), 2016-08-25 19:20:37,4500336 +0,0000719 (1. Device: STMicroelectronics Virtual COM Port (COM13))
Descriptor Type: Device
Descriptor Index: 0x0
Transfer Buffer Size: 0x12 bytes
000002: Control Transfer (UP), 2016-08-25 19:20:37,4502671 +0,0002335. (1. Device: STMicroelectronics Virtual COM Port (COM13)) Status: 0x00000000
Pipe Handle: Control Pipe
12 01 00 02 02 00 00 40 83 04 40 57 00 02 01 02
03 01 .......@ѓ.@W....
..
Setup Packet
80 06 00 01 00 00 12 00 Ђ.......
Recipient: Device
Request Type: Standard
Direction: Device->Host
Request: 0x6 (GET_DESCRIPTOR)
Value: 0x100
Index: 0x0
Length: 0x12
000003: Get Descriptor Request (DOWN), 2016-08-25 19:20:37,4502729 +0,0000058 (1. Device: STMicroelectronics Virtual COM Port (COM13))
Descriptor Type: Configuration
Descriptor Index: 0x0
Transfer Buffer Size: 0x109 bytes
000004: Control Transfer (UP), 2016-08-25 19:20:37,4505108 +0,0002379. (1. Device: STMicroelectronics Virtual COM Port (COM13)) Status: 0x00000000
Pipe Handle: Control Pipe
09 02 43 00 02 01 00 C0 64 09 04 00 00 01 02 02
00 01 05 24 00 10 01 05 24 01 00 01 04 24 02 02
05 24 06 00 01 07 05 81 03 40 00 FF 09 04 01 00
02 0A 00 00 04 07 05 02 02 40 00 00 07 05 83 02
40 00 00 ..C....Аd.......
...$....$....$..
.$.....Ѓ.@.я....
.........@....ѓ.
@..
Setup Packet
80 06 00 02 00 00 09 01 Ђ.......
Recipient: Device
Request Type: Standard
Direction: Device->Host
Request: 0x6 (GET_DESCRIPTOR)
Value: 0x200
Index: 0x0
Length: 0x109
000005: Select Configuration (DOWN), 2016-08-25 19:20:37,4505156 +0,0000048 (1. Device: STMicroelectronics Virtual COM Port (COM13))
Configuration Index: 1
000006: Select Configuration (UP), 2016-08-25 19:20:37,4506974 +0,0000004. (1. Device: STMicroelectronics Virtual COM Port (COM13)) Status: 0x00000000
Configuration Index: 1
Configuration Handle: 0x3327b90
000007: Class-Specific Request (DOWN), 2016-08-25 19:20:37,4507124 +0,0000150 (1. Device: STMicroelectronics Virtual COM Port (COM13))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x21
Value: 0x0
Get 0x7 bytes from the device
000008: Control Transfer (UP), 2016-08-25 19:20:37,4508854 +0,0001730. (1. Device: STMicroelectronics Virtual COM Port (COM13)) Status: 0x00000000
Pipe Handle: Control Pipe
00 C2 01 00 00 00 08 .В.....
Setup Packet
A1 21 00 00 00 00 07 00 Ў!......
Recipient: Interface
Request Type: Class
Direction: Device->Host
Request: 0x21 (Unknown)
Value: 0x0
Index: 0x0
Length: 0x7
000009: Class-Specific Request (DOWN), 2016-08-25 19:20:37,4509364 +0,0000510 (1. Device: STMicroelectronics Virtual COM Port (COM13))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x22
Value: 0x0
Send 0x0 bytes to the device
000010: Control Transfer (UP), 2016-08-25 19:20:37,4511358 +0,0001994. (1. Device: STMicroelectronics Virtual COM Port (COM13)) Status: 0x00000000
Pipe Handle: Control Pipe
Setup Packet
21 22 00 00 00 00 00 00 !"......
Recipient: Interface
Request Type: Class
Direction: Host->Device
Request: 0x22 (Unknown)
Value: 0x0
Index: 0x0
Length: 0x0
000013: Bulk or Interrupt Transfer (UP), 2016-08-25 19:20:37,4512626 +0,0001045. (1. Device: STMicroelectronics Virtual COM Port (COM13)) Status: 0xc0000004
Pipe Handle: 0x35d2798 (Endpoint Address: 0x83)
Get 0x0 bytes from the device
000014: Bulk or Interrupt Transfer (UP), 2016-08-25 19:20:37,5474432 +0,0961806. (1. Device: STMicroelectronics Virtual COM Port (COM13)) Status: 0xc0000004
Pipe Handle: 0x57d3608 (Endpoint Address: 0x81)
Get 0x0 bytes from the device
При этом, Device Monitor Studio выделяет 13 и 14-е шаги красным цветом.
Процесс энумерации при использовании рабочей прошивки:
Спойлер
000000: PnP Event: Device Connected (UP), 2016-08-25 19:07:39,5185216 (1. Device: STMicroelectronics Virtual COM Port (COM7))The USB device has just been connected to the system.
000001: Get Descriptor Request (DOWN), 2016-08-25 19:07:39,5186023 +0,0000807 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Descriptor Type: Device
Descriptor Index: 0x0
Transfer Buffer Size: 0x12 bytes
000002: Control Transfer (UP), 2016-08-25 19:07:39,5188247 +0,0002224. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
12 01 00 02 02 00 00 40 83 04 40 57 00 02 01 02
03 01 .......@ѓ.@W....
..
Setup Packet
80 06 00 01 00 00 12 00 Ђ.......
Recipient: Device
Request Type: Standard
Direction: Device->Host
Request: 0x6 (GET_DESCRIPTOR)
Value: 0x100
Index: 0x0
Length: 0x12
000003: Get Descriptor Request (DOWN), 2016-08-25 19:07:39,5188306 +0,0000059 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Descriptor Type: Configuration
Descriptor Index: 0x0
Transfer Buffer Size: 0x109 bytes
000004: Control Transfer (UP), 2016-08-25 19:07:39,5190714 +0,0002408. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
09 02 43 00 02 01 00 C0 32 09 04 00 00 01 02 02
01 00 05 24 00 10 01 05 24 01 00 01 04 24 02 02
05 24 06 00 01 07 05 82 03 08 00 FF 09 04 01 00
02 0A 00 00 00 07 05 03 02 40 00 00 07 05 81 02
40 00 00 ..C....А2.......
...$....$....$..
.$.....‚...я....
.........@....Ѓ.
@..
Setup Packet
80 06 00 02 00 00 09 01 Ђ.......
Recipient: Device
Request Type: Standard
Direction: Device->Host
Request: 0x6 (GET_DESCRIPTOR)
Value: 0x200
Index: 0x0
Length: 0x109
000005: Select Configuration (DOWN), 2016-08-25 19:07:39,5190762 +0,0000048 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Configuration Index: 1
000006: Select Configuration (UP), 2016-08-25 19:07:39,5192558 +0,0000004. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Configuration Index: 1
Configuration Handle: 0x3618630
000007: Class-Specific Request (DOWN), 2016-08-25 19:07:39,5192694 +0,0000136 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x21
Value: 0x0
Get 0x7 bytes from the device
000008: Control Transfer (UP), 2016-08-25 19:07:39,5194453 +0,0001759. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
00 C2 01 00 00 00 08 .В.....
Setup Packet
A1 21 00 00 00 00 07 00 Ў!......
Recipient: Interface
Request Type: Class
Direction: Device->Host
Request: 0x21 (Unknown)
Value: 0x0
Index: 0x0
Length: 0x7
000009: Class-Specific Request (DOWN), 2016-08-25 19:07:39,5195043 +0,0000590 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x22
Value: 0x0
Send 0x0 bytes to the device
000010: Control Transfer (UP), 2016-08-25 19:07:39,5196956 +0,0001913. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
Setup Packet
21 22 00 00 00 00 00 00 !"......
Recipient: Interface
Request Type: Class
Direction: Host->Device
Request: 0x22 (Unknown)
Value: 0x0
Index: 0x0
Length: 0x0
000013: Class-Specific Request (DOWN), 2016-08-25 19:07:41,4999857 +1,9802684 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x21
Value: 0x0
Get 0x7 bytes from the device
000014: Control Transfer (UP), 2016-08-25 19:07:41,5001689 +0,0001832. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
00 C2 01 00 00 00 08 .В.....
Setup Packet
A1 21 00 00 00 00 07 00 Ў!......
Recipient: Interface
Request Type: Class
Direction: Device->Host
Request: 0x21 (Unknown)
Value: 0x0
Index: 0x0
Length: 0x7
000015: Class-Specific Request (DOWN), 2016-08-25 19:07:41,5001847 +0,0000158 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x21
Value: 0x0
Get 0x7 bytes from the device
000016: Control Transfer (UP), 2016-08-25 19:07:41,5004090 +0,0002243. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
00 C2 01 00 00 00 08 .В.....
Setup Packet
A1 21 00 00 00 00 07 00 Ў!......
Recipient: Interface
Request Type: Class
Direction: Device->Host
Request: 0x21 (Unknown)
Value: 0x0
Index: 0x0
Length: 0x7
000017: Class-Specific Request (DOWN), 2016-08-25 19:07:41,5005454 +0,0001364 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x22
Value: 0x1
Send 0x0 bytes to the device
000018: Control Transfer (UP), 2016-08-25 19:07:41,5006528 +0,0001074. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
Setup Packet
21 22 01 00 00 00 00 00 !"......
Recipient: Interface
Request Type: Class
Direction: Host->Device
Request: 0x22 (Unknown)
Value: 0x1
Index: 0x0
Length: 0x0
000019: Class-Specific Request (DOWN), 2016-08-25 19:07:41,5007972 +0,0001444 (1. Device: STMicroelectronics Virtual COM Port (COM7))
Destination: Interface, Index 0
Reserved Bits: 0
Request: 0x21
Value: 0x0
Get 0x7 bytes from the device
000020: Control Transfer (UP), 2016-08-25 19:07:41,5009031 +0,0001059. (1. Device: STMicroelectronics Virtual COM Port (COM7)) Status: 0x00000000
Pipe Handle: Control Pipe
00 C2 01 00 00 00 08 .В.....
Setup Packet
A1 21 00 00 00 00 07 00 Ў!......
Recipient: Interface
Request Type: Class
Direction: Device->Host
Request: 0x21 (Unknown)
Value: 0x0
Index: 0x0
Length: 0x7
..... и т.д.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: STM32 и USB (практика)
Ничего не читал, поправлюсь. Не понял сразу что bmRequestType=0x21, соответсвенно не другое устройство, а интерфейс.
