Форум программистов, компьютерный форум, киберфорум
Наши страницы

Микроконтроллеры Atmega AVR

Войти
Регистрация
Восстановить пароль
 
 
ElDave
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 30
#1

Не приходит данные из устройства через USB (atmega88) - Atmega AVR микроконтроллер

30.11.2017, 21:29. Просмотров 340. Ответов 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 (atmega88) (Atmega AVR микроконтроллер):

Программирование USB устройства - Микроконтроллер
Доброго времени суток. У меня такой вопрос. Имеется &quot;некое&quot; устройство работающее через LPT-порт. Пришло время переделать его под USB. Как...

v-usb Как с эмулировать 2 устройства на 1 МК - Atmega AVR микроконтроллер
Подскажите пожалуйста кто в теме. Нужно эмулировать 2 устройства (клавиатура и мышь). Как отдельно эмулировать разобрался, а как сделать...

Купил USBASP "Сбой запроса дескриптора USB-устройства" - Atmega AVR микроконтроллер
Купил в Чип-НН два программатора - по обоим при подключении к компьютеру (пробовал на двух) выдает данную ошибку. Единственное, что смог в...

STM32 USB bulk. Ошибки при втором запросе, но пакет приходит - ARM, Cortex, STM32 микроконтроллер
Делаю девайс на stm32f103 и USB. Принцип примерно тот же, что и здесь http://we.iosyitistromyss.ru/khomym/stm ... oekta.html . Поиск...

Выбрать класс устройства USB - ARM, Cortex, STM32 микроконтроллер
Всем привет, осваиваем usb на lpc4337 (usb1), запустили пример из предоставляемых NXP, который называется CDC, в divice manager устройство...

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

29
ValeryS
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,443
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
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,443
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
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,443
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
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,443
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
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,443
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_
1458 / 968 / 92
Регистрация: 04.01.2010
Сообщений: 3,153
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
12.02.2018, 21:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2018, 21:04
Привет! Вот еще темы с ответами:

Данные от USB устройства в UI в реальном времени - C# WPF
Всем привет. У меня есть USB устройство и мне нужно отображать данные от него в окне. Работает, но медленно. У меня есть некое...

.NET 4.x Подключение устройства через USB - C#
Всем доброго времени суток. Имеется задачка: к ПК подключается устройство по USB, сказали что комп будет видеть это устройство как...

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

Фото с камеры андроид устройства на ПК через USB - Delphi
Необходимо получить фото с камеры(Android - устройство) и перекинуть его на PC через кабель. Нашёл пример отсюда &quot;PhotoWall&quot;...


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

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

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