|
STM32F407 контроль завершения отправки пакета USB |
|
|
|
 |
Ответов
(1 - 7)
|
Jan 1 2016, 08:29
|

Частый гость
 
Группа: Свой
Сообщений: 121
Регистрация: 30-07-08
Из: Тверь, Россия
Пользователь №: 39 321

|
Цитата(jcxz @ Jan 1 2016, 10:55)  надо отправлять правильно. вообще то я об этом и прошу совета Цитата(jcxz @ Jan 1 2016, 10:55)  Если необходим непрерывный поток данных с фикс. скоростью, то нужно использовать изохронную точку. Изохронная передача не гарантирует доставки. Да и нужная мне скорость значительно ниже максимальной пропускной способности USB, bulk с запасом должен справляться. Цитата(jcxz @ Jan 1 2016, 10:55)  И как понять "отправляете"? Отправлять device сам, по своей инициативе, никак не может. Только в ответ на запросы host-а. Я же указал функцию отправки. Подразумевается запись в точку IN откуда хост забирает пакет.
|
|
|
|
|
Jan 1 2016, 09:07
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(EmbedElektrik @ Jan 1 2016, 14:29)  Изохронная передача не гарантирует доставки. Да и нужная мне скорость значительно ниже максимальной пропускной способности USB, bulk с запасом должен справляться. И зачем Вам гарантированная доставка? У Вас вокруг такие помехи, что данные искажают??? Поймите элементарную вещь - гарантированная доставка в USB реализована за счёт повторов повреждённых пакетов, следовательно - в эндпоинтах которые её обеспечивают ни о каком реалтайм-потоке говорить нельзя. У Вас выбор - или реалтайм-поток или гарантированная доставка. И кроме того - bulk совершенно не гарантирует время доставки пакета, может 1мс, а может и 100мс (если а соседний разъём воткнули флеху и начали на неё писать файл). Используете bulk - забываете о любом реалтайме. А для реалтайм-потоков самой спецификацией USB и заложен изохронный режим. Читайте доки. Если Вы себя считаете умнее разработчиков USB - флаг Вам в руки в изобретении своего велосипеда с квадратными колёсами. Цитата(EmbedElektrik @ Jan 1 2016, 14:29)  Я же указал функцию отправки. Подразумевается запись в точку IN откуда хост забирает пакет. "Отправка" подразумевает запись в регистры буфера передатчика USB-периферии, а не в какой-то программный буфер, откуда ещё неизвестно когда и кем отправится и отправится-ли вообще.
|
|
|
|
|
Jan 1 2016, 11:03
|

Частый гость
 
Группа: Свой
Сообщений: 121
Регистрация: 30-07-08
Из: Тверь, Россия
Пользователь №: 39 321

|
Цитата(jcxz @ Jan 1 2016, 12:07)  И зачем Вам гарантированная доставка? У Вас вокруг такие помехи, что данные искажают??? ... Если Вы себя считаете умнее разработчиков USB - флаг Вам в руки в изобретении своего велосипеда с квадратными колёсами.
"Отправка" подразумевает запись в регистры буфера передатчика USB-периферии, а не в какой-то программный буфер, откуда ещё неизвестно когда и кем отправится и отправится-ли вообще. Да ё-моё, ну вопрос же конкретный звучал - можно ли контролировать завершение отправки или нет. Вот к чему эти Ваши догадки о нужности мне гарантированной доставки, помехах и флешках в соседних гнездах? Я Вас услышал, спасибо за Ваше мнение.
|
|
|
|
|
Jan 11 2016, 10:35
|

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

|
Можно контролировать, конечно. Только для этого надо читать не описание "библиотеки", а reference manual.
OTG_FS device endpoint-x interrupt register (OTG_FS_DIEPINTx)
Bit 7 TXFE: Transmit FIFO empty This interrupt is asserted when the TxFIFO for this endpoint is either half or completely empty. The half or completely empty status is determined by the TxFIFO Empty Level bit in the OTG_FS_GAHBCFG register (TXFELVL bit in OTG_FS_GAHBCFG).
Только вот DCD_EP_Tx() - это ниразу не "работаю напрямую". Это "передать первую часть буфера в FIFO, включить прерывание TX Empty, чтоб потом передать остаток". Там, скорее, надо копаться в кишках этого кода, вроде б, в счётчиках структуры USB_OTG_EP.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Jan 11 2016, 10:55
|

Частый гость
 
Группа: Свой
Сообщений: 121
Регистрация: 30-07-08
Из: Тверь, Россия
Пользователь №: 39 321

|
Цитата(esaulenka @ Jan 11 2016, 13:35)  Можно контролировать, конечно. Только для этого надо читать не описание "библиотеки", а reference manual. Ок, большое спасибо. Пока решил проблему выставив на компе высокий приоритет потоку приема. Но это, конечно, костыль, хоть и стабильно работающий. Теперь ясно куда копать. С НГ!
|
|
|
|
|
Jan 11 2016, 21:34
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(EmbedElektrik @ Jan 11 2016, 16:55)  Ок, большое спасибо. Пока решил проблему выставив на компе высокий приоритет потоку приема. Но это, конечно, костыль, хоть и стабильно работающий. Теперь ясно куда копать. С НГ! А где гарантия, что Ваши данные переданные USB-драйверу для передачи этим высокоприоритетным потоком, далее, внутри драйвера, не обрабатываются низкоприоритетным потоком?  Была у меня такая фигня с CyUSB под WinXP. Никакое повышение хоть до самого наивысшего приоритета потоку не помогало, когда в момент передачи на экране происходило сворачивание/разворачивание какого-либо окна. Разворачивание окна - это была самая убойная вещь - задержки происходили до неск. сот мсек. Под следующими версиями виндов эффект не проявлялся.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|