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

 
 
> STM32F4 USB CDC, Передаёт не более 32 байт за раз
hd44780
сообщение Mar 7 2013, 08:53
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Понимаю, что может быть избитая и изъезженная тема тема, но всё же.

Короче, взял пример COM-порта отсюда - http://we.easyelectronics.ru/STM32/primery...4-discovey.html
Порт опознаётся, устанавливается, всё ок. Данные принимает, передаёт.

Но. Не могу передать на комп более 32 байт. Комп просто ничего не принимает. Когда 32 байта и меньше всё в порядке. Это ж отстой полный, хуже чем даже USB HID Generic - 64 байта туда-сюда-обратно. И тот кстати не получается. Примеры - сплошные мыши и джойстики sad.gif ...

Это что, норма? И как этого избежать? Размер буферов в прошивке вроде 2 кила - макрос APP_RX_DATA_SIZE = 2048.

И ещё.
Не хочется, чтобы железка торчала в списке COM-портов. Взял финский пример отсюда - http://forum.easyelectronics.ru/viewtopic....=35&t=10245
Он пошёл без проблем, комп его увидел. Но где взять драйвер? Нашёл libusb, драйвер им сгенерил, но как с ним дальше работать не понял...

Может ли кто-нибудь помочь?

Спасибо.




--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rudy_b
сообщение Mar 2 2014, 18:46
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 888
Регистрация: 25-09-08
Из: Питер
Пользователь №: 40 458



Они, почему-то, используют EP1 для приема и передачи данных в режиме балк, а EP2 - для команд (BaudRate и т.п.) в режиме interrupt. А EP0 не используют совсем. Она используется только в режиме HS и странным образом.

#define CDC_IN_EP 0x81 /* EP1 for data IN */ //USB_OTG_EP_BULK
#define CDC_OUT_EP 0x01 /* EP1 for data OUT */ //USB_OTG_EP_BULK
#define CDC_CMD_EP 0x82 /* EP2 for CDC commands */ //USB_OTG_EP_INT

Цитата
На самом деле вам не надо разбирать всю библиотеку, можно сделать внешний модуль обертку который будет следить за данными, в нем сделать фифо, и пусть он все выдавливает наружу, и если вдруг случиться что данных больше 64 байт, то пусть давит их наружу, и проверяет последний пакет.

Тут, похоже, и это может не помочь. Возможно возникнут еще и проблемы с виндюковым usbser.sys - он ведь тоже VirtualComPort и не должен реагировать на отсутствие общего размера посылки, только на длину конкретного блока данных. И проблемы у него есть - редкие ошибки при трансляции пакетов с размером более 64 байт связаны именно с его глюками, я специально поигрался. А если пакет меньше 64 байт - ошибок нет вообще.

Цитата
И еще одна вещь которую вам надо знать про USB, это то что в винде реально боле менее поддержаны только CDC и HID, все остальное потребует от вас в реальности написания собственного драйвера.

Вот этого я и боюсь. HID тоже не рассчитан на передачу блоков данных и фиг знает, что нам накручено. А в аудио и вообще лезть не хочется. Ну а писать свой драйвер под виндюки жутко не хочется, мои мозги не в состоянии воспринять их идеологию, хотя под нормальную ОС раньше писал без проблем.

Похоже прийдется обойтись пакетами 63 байта. Правда скорость при этом получается порядка 200 кбит, но, надеюсь, мне этого хватит.
Go to the top of the page
 
+Quote Post
Axel
сообщение Mar 3 2014, 05:02
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(rudy_b @ Mar 2 2014, 22:46) *
Они, почему-то, используют EP1 для приема и передачи данных в режиме балк, а EP2 - для команд...


При балк обмене драйвер хоста должен знать размер принимаемого пакета, иначе он выйдет из приема по таймауту с потерей информации. Именно для передачи этого знания используется ЕР2, а через ЕР1 идут собственно данные. Если Вам просто нужно организовать обмен и не строго использовать Virtual Com или HID, то (ИМХО) самый простой путь - выдрать из либы минимум для балк обмена и определить фиксированную длину пакета. Со стороны хоста - libusb или winusb. Они достаточно хорошо описаны и несложны в использовании, правда (как и все остальные) не снимают геморроя при удаленной инсталляции, особенно под Windows8.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- hd44780   STM32F4 USB CDC   Mar 7 2013, 08:53
- - KnightIgor   Цитата(hd44780 @ Mar 7 2013, 09:53) И ещё...   Mar 7 2013, 11:25
- - hd44780   Ну пусть COM-порт уже, фиг с ним ... А чего тольк...   Mar 7 2013, 12:07
|- - Juk1976   Цитата(hd44780 @ Mar 7 2013, 15:07) Ну пу...   Mar 7 2013, 17:20
- - hd44780   Нашёл в интернете вот такое: Код #define RX_FIFO_...   Mar 8 2013, 14:54
- - Flexz   А пример из библиотеки ST вы брать не пробовали? у...   Mar 8 2013, 14:56
- - hd44780   FlexZ, это из архива STM32_USB-Host-Device_Lib_V2....   Mar 8 2013, 18:05
- - Flexz   Да, пример из этого архива. Пачки уходят вплоть до...   Mar 8 2013, 19:39
|- - hd44780   Спасибо. Цитата(Flexz @ Mar 8 2013, 21:39...   Mar 9 2013, 05:20
- - hd44780   Короче, мудохался-мудохался, добился 1024 байт за ...   Mar 9 2013, 18:29
- - Flexz   Может у вас проблема в другом месте? Кабель плохой...   Mar 10 2013, 13:08
- - hd44780   Кабель длиной где-то 30 см от телефона Nokia X2-02...   Mar 11 2013, 07:11
- - Flexz   Вот в этом месте у меня во всех проектах немного п...   Mar 11 2013, 09:45
- - hd44780   Сделал, но заметил следующую странность: У меня с...   Mar 11 2013, 13:50
- - hd44780   Победил я кажись эту хреновину . Западло (по кра...   Mar 11 2013, 19:15
- - Golikov A.   какой странный подход. По мне последние сообщение ...   Mar 12 2013, 16:39
- - hd44780   Согласен полностью. Но ковыряться в потрохах этог...   Mar 13 2013, 09:45
- - Golikov A.   увы...   Mar 13 2013, 15:04
- - rudy_b   И снова та же тема... Поднял CDC (VirtualComPort) ...   Mar 1 2014, 20:05
- - Golikov A.   последняя ошибка вроде ошибка драйвера винды если ...   Mar 2 2014, 05:23
- - rudy_b   Вторая ошибка действительно похожа на придурь винд...   Mar 2 2014, 10:46
|- - Axel   Цитата(rudy_b @ Mar 2 2014, 14:46) Мне пр...   Mar 2 2014, 11:58
- - Golikov A.   балк обменивается не по контрольной конечной точке...   Mar 2 2014, 13:11
- - rudy_b   А какой именно либы? Я использовал stm32_f105-07_f...   Mar 2 2014, 13:41
- - Golikov A.   не надо мешать все в одну кашу. балк, изохронный, ...   Mar 2 2014, 14:27
- - rudy_b   Угу, еще раз посмотрел внимательно. При приеме из ...   Mar 2 2014, 16:36
- - Golikov A.   очень странно что это балк, мне казалась что станд...   Mar 2 2014, 18:16
- - Golikov A.   Да нет никакой проблемы, все равно для уравнивания...   Mar 2 2014, 19:35
- - rudy_b   Так тогда мне проще сразу работать блоками по 63 б...   Mar 2 2014, 23:43
- - EmbedElektrik   Господа, а никто не поделится проектом под stm32f4...   Jun 17 2015, 12:02


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

 


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


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