Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
ElDave
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 30
1

Не приходит данные из устройства через USB (atmega88)

30.11.2017, 21:29. Просмотров 452. Ответов 29
Метки нет (Все метки)

Сделал устройство, подключаемое через USB. Протокол реализую полностью программно. Описываю устройство CDC класса. Драйвер используется стандартный на Win XP, подсовываю inf файл. Комп устройство распознает, проблем на этом этапе нет. Пытаюсь выдавать и принимать информацию. Выдает в устройство хорошо, все приходит, а вот принять данные из устройства не получается.
Использую программу работы с ком портом. Пробовал написать сам программу выдачи и приема с помощью Win Api, так там также точно, информация в устройство выдается, но из устройства не читается.
Устройство работает на LS.

Для приема информации В УСТРОЙСТВЕ использую конечную точку 1, все работает. Для выдачи ИЗ УСТРОЙСТВА принимаю пакет IN через конечную точку 2 и отправляю DATAIN с данными (ACK приходит от хоста). Данных нет на компе. В чем может быть дело? Куда копать?

Вот дескриптор.
12 -общая длина дескриптора(bLength): 0х12=18 байт
01 -тип дескриптора(bDescriptorType): дескриптор устройства
0002-номер спецификации USB в формате BCD(bcdUSB): 2.0
02 -код класса устройства(bDeviceClass):0х02- CDC устройство (виртуальный СОМ порт)
00 -код подкласса устройства(bDeviceSubClass):0 -зарезервирован
00 -код протокола устройства(bDeviceProtocol):0
08 -максимальный размер пакета данных для точки 0(bMaxPacketSize0): 8 байт
EB03 -ID производителя(idVendor): 0х03EB=1003(задан фондом USB)
1961 -ID продукта(idProduct): 0х6119 (Задан производителем)
0001 -Версия продукта в BCD формате(bcdDevice): 0х0001=1.0 (задан производителем)
00 - индекс строкового дескриптора производителя(iManufacturer):0
01 - индекс строкового дескриптора производителя(iProduct): 0
00 - индекс строк. дескр. серийного номера устройства(iSerialNumber): 0
01 - количество возможных конфигураций (bNumConfiguration): 1

CONFIGURATION_DESCRIPTOR0:
09 -общая длина дескриптора(bLength): 0х09=9 байт
02 -тип дескриптора(bDescriptorType): дескриптор конфигурации
4300 -размер полной конфигурации усройства (wTotalLength): 0х0043=67 байт
02 -число интерфейсов поддерживаемых этой конфигурацией(bNumInterfaces): 2
01 -номер конфигурации при запросе SET_CONFIGURATION(bConfigurationValue): 1
00 -индекс строкового дескриптора этой конфигурации(iConfiguration): 0
80 -битовое поле свойств(bmAttributes): D7=1 устройство питается от шины USB<; D6=1 устройство имеет независимое питание
32 -макс. ток потребления(bMaxPower): 0х32=50 (50*2мА=100мА)

INTERFACE_DESCRIPTOR0:
09 -общая длина дескриптора(bLength): 0х09=9 байт
04 -тип дескриптора(bDescriptorType):4 - дескриптор интерфейса
00 -номер интерфейса(bInterfaceNumber):0 -интерфейс0
00 -номер альтернативного интерфейса(bAlternateSetting): 0 -интерфейс0
01 -количество конечных точек интерфейса(bNumEndPoints): 1
02 -класс интерфейса(bInterfaceClass): 2 -CDC Control
02 -подкласс интерфейса(bInterfaceSubClass):2 -Abstract Control Model interface
00 -протокол интерфейса(bInterfaceProtocol): 0 -номер протокола интерфейса0
00 -индекс строкового дескриптора интерфеса(iInterface):0

FUNCTIONAL_DESCRIPTOR0:
05 -общая длина дескриптора(bLength): 0х05=5 байт
24 -тип дескриптора(bDescriptorType):0x24 - дескриптор интерфейса функции
00 -подтип дескриптора(bDescriptorSubtype):0 -описание заголовка функции
1001 -версия релиза функции в BCD формате(bcdCDC): -0x0110=1.10

FUNCTIONAL_DESCRIPTOR1:
05 -общая длина дескриптора(bLength): 0х05=5 байт
24 -тип дескриптора(bDescriptorType):0x24 - дескриптор интерфейса функции
01 -подтип дескриптора(bDescriptorSubtype):1 - вызов функции
01 -номер последовательного вызова: 1
00 -не ассоциирован с интерфейсом.

FUNCTIONAL_DESCRIPTOR2:
04 -общая длина дескриптора(bLength): 0х04=4 байт
24 -тип дескриптора(bDescriptorType):0x24 - дескриптор интерфейса функции
02 -подтип дескриптора(bDescriptorSubtype):2 -абстрактное управление функцией
02 -линия управления контролем: 2

FUNCTIONAL_DESCRIPTOR3:
05 -общая длина дескриптора(bLength): 0х05=5 байт
24 -тип дескриптора(bDescriptorType):0x24 - дескриптор интерфейса функции
06 -подтип дескриптора(bDescriptorSubtype):1 - совместная работа функции
00 -номер ведущего интерфейса: 0
01 -номер ведомого итерфейса:1

ENDPOINT_DESCRIPTOR0:
07 - общая длина дескриптора(bLength): 0х07=7 байт
05 -тип дескриптора(bDescriptorType):5 - дескриптор конечной точки
83 -адрес и направление(bmEndpointAddress): адрес=3 направление=IN
03 -тип передачи(bmAttributes): 03 -прерывание
4000 -макс. размер пакета(wMaxPacketSize): 0x0040=64 байта
0A -интервал опроса в мс(bInterval):0x0A=10ms

INTERFACE_DESCRIPTOR1:
09 -общая длина дескриптора(bLength): 0х09=9 байт
04 -тип дескриптора(bDescriptorType):4 - дескриптор интерфейса
01 -номер интерфейса(bInterfaceNumber):0 -интерфейс1
00 -номер альтернативного интерфейса(bAlternateSetting): 0 -интерфейс0
02 -количество конечных точек интерфейса(bNumEndPoints): 2
0A -класс интерфейса(bInterfaceClass): 2 -CDC Data
00 -подкласс интерфейса(bInterfaceSubClass):0
00 -протокол интерфейса(bInterfaceProtocol): 0
00 -индекс строкового дескриптора интерфеса(iInterface):0

ENDPOINT_DESCRIPTOR1:
07 - общая длина дескриптора(bLength): 0х07=7 байт
05 -тип дескриптора(bDescriptorType):5 - дескриптор конечной точки
01 -адрес и направление(bmEndpointAddress): адрес=1 направление=OUT
02 -тип передачи(bmAttributes): 02 -Bulk (передача данных)
4000 -макс. размер пакета(wMaxPacketSize): 0x0040=64 байта
00 -интервал опроса в мс(bInterval):0 -неопределено

ENDPOINT_DESCRIPTOR2:
07 - общая длина дескриптора(bLength): 0х07=7 байт
05 -тип дескриптора(bDescriptorType):5 - дескриптор конечной точки
82 -адрес и направление(bmEndpointAddress): адрес=2 направление=IN
02 -тип передачи(bmAttributes): 02 -Bulk (передача данных)
4000 -макс. размер пакета(wMaxPacketSize): 0x0040=64 байта
00 -интервал опроса в мс(bInterval):0 -неопределено
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2017, 21:29
Ответы с готовыми решениями:

Программирование USB устройства
Доброго времени суток. У меня такой вопрос. Имеется &quot;некое&quot; устройство...

v-usb Как с эмулировать 2 устройства на 1 МК
Подскажите пожалуйста кто в теме. Нужно эмулировать 2 устройства (клавиатура и...

Купил USBASP "Сбой запроса дескриптора USB-устройства"
Купил в Чип-НН два программатора - по обоим при подключении к компьютеру...

Переводить команды USB WIFI Адаптера через компьютер по USB-USB для устройства
name: как передавать сигнал от требующего установку драйверов USB WIFI Адаптера...

Данные от USB устройства в UI в реальном времени
Всем привет. У меня есть USB устройство и мне нужно отображать данные от...

29
ValeryS
Модератор
7265 / 5519 / 692
Регистрация: 14.02.2011
Сообщений: 18,703
30.11.2017, 21:36 2
Цитата Сообщение от ElDave Посмотреть сообщение
0002-номер спецификации USB в формате BCD(bcdUSB): 2.0
Цитата Сообщение от ElDave Посмотреть сообщение
08 -максимальный размер пакета данных для точки 0(bMaxPacketSize0): 8 байт
а ниче что для USB 2.0 размер пакета должен быть 64 бита
и как интересно программно можно реализовать 2.0?
0
ElDave
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 30
30.11.2017, 21:38  [ТС] 3
Цитата Сообщение от ValeryS Посмотреть сообщение
а ниче что для USB 2.0 размер пакета должен быть 64 бита
бита? это и есть 8 байт.
0
ValeryS
Модератор
7265 / 5519 / 692
Регистрация: 14.02.2011
Сообщений: 18,703
30.11.2017, 21:40 4
Цитата Сообщение от ElDave Посмотреть сообщение
бита?
пардон байта конечно
0
ElDave
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 30
30.11.2017, 21:42  [ТС] 5
Цитата Сообщение от ValeryS Посмотреть сообщение
и как интересно программно можно реализовать 2.0?
это значит, я не использую модули usb, которые сами формируют пакеты, а сам формирую каждую посылку.

Добавлено через 52 секунды
т.е. достаточно изменить количества байт или изменить usb на 1.1?
0
ValeryS
Модератор
7265 / 5519 / 692
Регистрация: 14.02.2011
Сообщений: 18,703
30.11.2017, 21:42 6
Цитата Сообщение от ElDave Посмотреть сообщение
которые сами формируют пакеты, а сам формирую каждую посылку.
на каком камне?
0
ElDave
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 30
30.11.2017, 21:45  [ТС] 7
atmega88
0
ValeryS
Модератор
7265 / 5519 / 692
Регистрация: 14.02.2011
Сообщений: 18,703
30.11.2017, 21:49 8
Цитата Сообщение от ElDave Посмотреть сообщение
atmega88
на атмеге реализуешь USB 2.0 c его скоростью 12 мб/сек?
0
ElDave
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 30
30.11.2017, 21:50  [ТС] 9
Цитата Сообщение от ValeryS Посмотреть сообщение
на атмеге реализуешь USB 2.0 c его скоростью 12 мб/сек?
я реализую ls
0
ValeryS
Модератор
7265 / 5519 / 692
Регистрация: 14.02.2011
Сообщений: 18,703
30.11.2017, 21:57 10
Цитата Сообщение от ElDave Посмотреть сообщение
я реализую ls
не видно
Цитата Сообщение от ElDave Посмотреть сообщение
0002-номер спецификации USB в формате BCD(bcdUSB): 2.0
сначала поправь дескриптор
версия 1.1 или даже может 1.0
ну а потом, если ничего не получится,выкладывай код
ибо гадать можно вечно
0
ElDave
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 30
01.12.2017, 19:08  [ТС] 11
Цитата Сообщение от ValeryS Посмотреть сообщение
сначала поправь дескриптор
версия 1.1 или даже может 1.0
ну а потом, если ничего не получится,выкладывай код
ибо гадать можно вечно
Спасибо. Я попробую.

Добавлено через 3 минуты
Но ведь в USB 2.0 тоже может реализоваться LS.

Добавлено через 20 часов 47 минут
Попробовал изменить спецификации USB с 2.0 на 1.1 и тоже нет результата.
ValeryS, вообще в моем дескрипторе 8 байта- это размер пакета для точки 0. Для этой точки в USB 2.0 размер всегда 8 байт.
Так что дело совсем не в спецификации USB. Тем более работает выдача в устройство.

Добавлено через 14 минут
Меня интересует вопрос: Хост всегда будет принимать информацию через точку IN данных? Алгоритм приема какой- просто писать свои данные к пакета IN, тем самым информация должна попасть в адрес приема виртуального com порта?
0
ElDave
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 30
05.12.2017, 15:34  [ТС] 12
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/////////////in пакет/////////////
inpac:
lds Priem2, mass+1
bst Priem2, 7
andi Priem2, 0x7f
cpi Priem2, 0
breq step33
cp Priem2, addrzap
brne m2
lds Priem2, mass+2
lsl Priem2
andi Priem2, 0x0e
bld Priem2, 0
 
cpi Priem2, 0
breq step33
cpi Priem2, 2
breq inpacwork
cpi Priem2, 3
breq inpacinter
clt
rjmp nak
.................................
inpacwork:
clt
                                  //////выдача проверочный данных///////////
lds bufer, pr_data
cpi bufer, 0xff
brne pacwork
clt bufer
sts pr_data, bufer
 
ldi bufer, 0x4b    //// data1
sts kommass, bufer
ldi bufer, 0x73
sts kommass+1, bufer
ldi bufer, 0x11
sts kommass+2, bufer
ldi bufer, 0x55
sts kommass+3, bufer
ldi bufer, 0x33
sts kommass+4, bufer
sts kommass+5, bufer
sts kommass+6, bufer
sts kommass+7, bufer
sts kommass+8, bufer
ldi bufer, 0x5a // младший байт crc16
sts kommass+9, bufer
ldi bufer, 0x6b // старший байт crc16
sts kommass+10, bufer
ldi numByte, 0xd
rcall USB_out
ret
 
pacwork:
inc bufer
sts pr_data, bufer
 
ldi bufer, 0x4b /// data1
sts kommass, bufer
clt bufer
sts kommass+1, bufer
sts kommass+2, bufer
ldi numByte, 0x5
rcall USB_out
ret
Вот кусок кода, это прием пакета in и выдача данных через 2 конечную точку.
Данные выдаются когда счетчик досчитает 255, а так идет все время пустой пакет.
Сразу говорю, процедура выдачи правильная, устройство инициализировано хостом, приходят ack от хоста.
Но вот моих данных нет в компьютере.

Добавлено через 13 минут
30 и 61 строчки:
Assembler
1
clr bufer
0
Voland_
1656 / 1002 / 96
Регистрация: 04.01.2010
Сообщений: 3,328
05.12.2017, 18:47 13
Цитата Сообщение от ElDave Посмотреть сообщение
информация должна попасть в адрес приема виртуального com порта?
я просто может не совсем в тему счас скажу, но если вы затачиваетесь под VCP то почему вы говорите о CDC, как стартовой точке имплементации?

Насколько мне помнится из USB2.0 - он всегда имел доп. PHY. По крайней мере на STM32 и TI. так что навреное, надо бы сначала сделать USB1.0, а потом "наращивать" потенциал. Я уже не говорю, про повышенные частоты (12 Мгц кварц), и использование выделенного INT0, как во всех примерах. (вы ж смотрели примеры, верно?)
0
ElDave
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 30
05.12.2017, 22:56  [ТС] 14
Цитата Сообщение от Voland_ Посмотреть сообщение
но если вы затачиваетесь под VCP то почему вы говорите о CD
потому что виртуальный com порт имеет код класса CDC устройства.
02 -код класса устройства(bDeviceClass):0х02- CDC устройство (виртуальный СОМ порт)
и я вам скажу больше - устройство мое подключается к компу именно как com порт.
Цитата Сообщение от Voland_ Посмотреть сообщение
Насколько мне помнится из USB2.0 - он всегда имел доп. PHY
задача как раз реализовать все программно, я понимаю, что может это для многих звучит, мягко говоря, странно, но вот так.
Задача именно реализовать все самому.

Возможно, что моя проблема в том, что я использую на низкой скорости более 2 конечных точек и тип передачи bulk?!
Но вот не понятно, какможет выдача работать, а прием не работать???
0
ElDave
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 30
12.02.2018, 21:04  [ТС] 15
Кому интересно, сделал я прием/передачу моего устройства. Понял, что делать CDC устройство на LS это неправильно, в итоге сделал HID устройство.
0
Voland_
1656 / 1002 / 96
Регистрация: 04.01.2010
Сообщений: 3,328
13.02.2018, 09:46 16
Цитата Сообщение от ElDave Посмотреть сообщение
сделал я прием/передачу моего устройства.
ннуу... это любая курьерская служба может .
Цитата Сообщение от ElDave Посмотреть сообщение
Понял, что делать CDC устройство на LS это неправильно
непонятно что вы имеете под "LS", но вообще CDC - Это "норма" ). То что у вас не получилось что-то там, еще не значит, что это не правильно.
Цитата Сообщение от ElDave Посмотреть сообщение
Кому интересно
интересно. Выложите страждущим код - может в нем будет что-то новее, чем другие примеры.
0
COKPOWEHEU
999 / 694 / 159
Регистрация: 09.09.2017
Сообщений: 3,003
13.02.2018, 10:47 17
Цитата Сообщение от Voland_ Посмотреть сообщение
непонятно что вы имеете под "LS", но вообще CDC - Это "норма" ). То что у вас не получилось что-то там, еще не значит, что это не правильно.
LS - low speed, устройства USB1.1 (а больше программный usb не потянет), максимальная скорость 1.5 Мб/с (считая всю служебную информацию)
CDC в этом режиме действительно не поддерживаются, так же как многие другие вкусные передачи
0
Voland_
1656 / 1002 / 96
Регистрация: 04.01.2010
Сообщений: 3,328
13.02.2018, 16:29 18
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
CDC в этом режиме действительно не поддерживаются
Кем/чем не поддерживаются?
0
ElDave
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 30
13.02.2018, 21:22  [ТС] 19
Цитата Сообщение от Voland_ Посмотреть сообщение
ннуу... это любая курьерская служба может
мне до курьерских служб далеко

Цитата Сообщение от Voland_ Посмотреть сообщение
интересно. Выложите страждущим код - может в нем будет что-то новее, чем другие примеры.
код без полного проекта нет смысла выкладывать, может потом опишу все, если руки дойдут и если это кому то понадобится

Цитата Сообщение от Voland_ Посмотреть сообщение
Кем/чем не поддерживаются?
для CDC класса устройств необходимо скорость FS(full speed) и выше. Устройства, работающие на LS могут обмениваться данными по типу передачи Interrupt и Control.
В нете есть проект, где CDC устройство делают на LS, ставят дополнительный драйвер, но у меня так ничего не получилось.
Да и HID оказался достаточно легким.
0
COKPOWEHEU
999 / 694 / 159
Регистрация: 09.09.2017
Сообщений: 3,003
14.02.2018, 09:12 20
Цитата Сообщение от Voland_ Посмотреть сообщение
Кем/чем не поддерживаются?
стандартом. CDC, а также изохронные и bulk передачи доступны с USB2.0
Цитата Сообщение от ElDave Посмотреть сообщение
В нете есть проект, где CDC устройство делают на LS, ставят дополнительный драйвер, но у меня так ничего не получилось.
Какое-то время usb-uart работал без посторонних драйверов в Linux, но потом, похоже, поправили драйвер usb и переходник работать перестал... а жаль. Впрочем, ft232 или контроллеры со встроенным usb2.0 никто не отменял
0
14.02.2018, 09:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2018, 09:12

Подключение устройства через USB
Всем доброго времени суток. Имеется задачка: к ПК подключается устройство по...

Не читаются устройства через USB
У меня Windows 7 x64, пару дней назад перестал открываться MP3-player при...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru