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

 
 
> STM32F4Discovery USB_HID, посылка данных в PC, непонятки
ilkz
сообщение Aug 26 2015, 09:16
Сообщение #1


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

Группа: Участник
Сообщений: 135
Регистрация: 9-09-11
Пользователь №: 67 084



Добрый день!

Понадобилось организовать обмен данными стмки с пк на основе USB_HID.
За основу взял темплейт от TM с его либами.

В целом, туда-сюда пакетики бегают, но есть несколько крайне непонятных для меня моментов:
1. Коллбек USBD_HID_DataOut. Насколько я понял, прием данных происходит именно в нем. Но откуда достать сами данные? Во всех примерах используют переменную USB_Rx_Buffer, которая объявляется в том же файле. Но она нигде не заполняется, а при попадании в коллбек данные в ней чудесным образом оказываются. Как так?

2. Непонятно поведение: если буфер объявить внутри коллбека, то вместо значений из буфера отсылается мусор. Если же объявление сделать глобальным, то отсылаются верные значения. Почему так?

3. В коллбек вписана отправка ответного пакета. Но иногда (в основном после включения) ответный пакет отсылается лишь с 3-го раза. Почему такое может возникать?

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ilkz
сообщение Aug 28 2015, 06:28
Сообщение #2


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

Группа: Участник
Сообщений: 135
Регистрация: 9-09-11
Пользователь №: 67 084



Думаю, это единственное логичное объяснение. Но мне не удалось найти где делается эта привязка. Но очень хочется разобраться.
Выкладываю проект, посмотрите по возможности незамыленным взглядом (сабж сидит в usbd_hid_core.c).
Прикрепленный файл  __1.rar ( 603.49 килобайт ) Кол-во скачиваний: 31


UPD: И еще, почему-то после первого приема данных буфер - пустой (это видно по мемори дампу). Начиная со второго приема - он заполняется валидными данными.
Он был не готов принимать после инициализации. Проблема решилась добавлением DCD_EP_PrepareRx(pdev, HID_OUT_EP, rxbuf, MAX_DATA_LENGTH); в USBD_HID_Init() в место после открытия ендпоинтов.

UPD2: Возможно, становится понятно поведение с "магическим" запонением приемного буфера. Насколько реален такой сценарий:
1. Объявлена переменная-буфер buf.
2. Т.к., во время инициализации не делается DCD_EP_PrepareRx(..., buf, ...), то буфер не трогается и он по дефолту равен нулю.
3. Возникает событие приема: буфер равен нулю (т.к. его никто не трогал).
4. Что-то делается в обработчике.
5. Последняя строчка - это как раз DCD_EP_PrepareRx(..., buf, ...), т.е. тут уже нормально передается ссылка на этот несчастный буфер.
6. Ну и на последующих приемах он уже получается прилинкован к приемнику, который заполняет его валидными данными.

Я прав или не?

Сообщение отредактировал ilkz - Aug 28 2015, 06:19
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ilkz   STM32F4Discovery USB_HID, посылка данных в PC   Aug 26 2015, 09:16
- - Kabdim   1. Очевидно её заполняет обработчик прерывний USB ...   Aug 26 2015, 10:55
|- - ilkz   Цитата(Kabdim @ Aug 26 2015, 13:55) 1. Оч...   Aug 26 2015, 11:39
- - Golikov A.   64 байта - граница пакета, должна быть снабжена пу...   Aug 26 2015, 16:39
|- - ilkz   Цитата(Golikov A. @ Aug 26 2015, 19:39) 6...   Aug 27 2015, 04:50
- - ilkz   Опа-ля, йа креведко розобралсо. Дело было вот в ч...   Aug 27 2015, 06:24
|- - Сергей Борщ   Цитата(ilkz @ Aug 27 2015, 09:06) 1. Если...   Aug 27 2015, 06:25
|- - ilkz   Цитата(Сергей Борщ @ Aug 27 2015, 09:25) ...   Aug 27 2015, 06:39
|- - Сергей Борщ   Цитата(ilkz @ Aug 27 2015, 09:39) Со втор...   Aug 27 2015, 08:13
- - ilkz   Сергей Борщ, ясно. Последний пока что вопрос: кто...   Aug 27 2015, 09:05
|- - Сергей Борщ   Цитата(ilkz @ Aug 27 2015, 12:05) Последн...   Aug 27 2015, 09:39
- - ilkz   Искал - пусто. Сергей Борщ, хотите прикол? Было (...   Aug 27 2015, 09:54
|- - Сергей Борщ   Цитата(ilkz @ Aug 27 2015, 12:54) КАААК? ...   Aug 27 2015, 11:53
|- - ilkz   Цитата(Сергей Борщ @ Aug 27 2015, 14:53) ...   Aug 27 2015, 13:18
|- - Сергей Борщ   Цитата(ilkz @ Aug 27 2015, 16:18) Весь ци...   Aug 27 2015, 17:25
- - Golikov A.   Там данные из USB не по ДМА заполняются? Вы где т...   Aug 28 2015, 03:15


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

 


RSS Текстовая версия Сейчас: 28th August 2025 - 04:04
Рейтинг@Mail.ru


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