Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F103. USB 2.0 full-speed?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Danis
Привет, спецы!

Решил освоить USB на STM32. Для начала взял пример из библиотеки STM32_USB-FS-Device_Lib_V3.2.1, а именно Custom_HID. Контроллер здесь работает в режиме устройства. Передел проект так чтобы контроллер посылал непрерывно буфер 256 byte в ПК, настолько быстро насколько это возможно, других ресурсоемких задач нет. Для ПК создал драйвер и начал замерять скорость обмена. Посчитал, что за секунду передается 341333 byte, что примерно 2.7 Mbit.

В pdf на STM32 написано:

USB main features
● USB specification version 2.0 full-speed compliant

а это как я понимаю 12 Мбит/с,

хотя точно не уверен, в Википедии написано Full-speed, 0,5—12 Мбит/с (аудио-, видеоустройства)

Так как полученная скорость, маленькая или норма для этого проца?
kovigor
Цитата(Danis @ Dec 14 2010, 15:57) *
Так как полученная скорость, маленькая или норма для этого проца?


HID - не лучший выбор, если нужна скорость. Можете попробовать поиграться с интервалом между прерываниями в дескрипторе INT - конечной точки. Почти наверняка там стоит 10 мС. Поставьте поменьше. Ну и попробуйте максимально увеличить размер пакета для INT - конечной точки.
P.S. Пишу Mass-Storage для AT91SAM9XE512 (тоже Full-Speed). Сделал на нем "флэшку" и замеряю скорость. На запись - ~608-616 КБайт в секунду. На чтение - ~396 - 400 КБайт в секунду. Беру фабричную флэшку. Чтение заметно шустрее, чем у меня. Зато запись - те же ~608-616 КБайт в секунду. Это много или мало ? Думаю, в случае с записью - почти хорошо. А вот чтение придется птимизировать ...
XGoblinX
Цитата(Danis @ Dec 14 2010, 12:57) *
341333 byte, что примерно 2.7 Mbit.

Так как полученная скорость, маленькая или норма для этого проца?

Для hid самое то скорость. Хотя бы балк взял для оценки...
Fry__
Цитата(Danis @ Dec 14 2010, 15:57) *
Привет, спецы!

Решил освоить USB на STM32. Для начала взял пример из библиотеки STM32_USB-FS-Device_Lib_V3.2.1, а именно Custom_HID. Контроллер здесь работает в режиме устройства. Передел проект так чтобы контроллер посылал непрерывно буфер 256 byte в ПК, настолько быстро насколько это возможно, других ресурсоемких задач нет. Для ПК создал драйвер и начал замерять скорость обмена. Посчитал, что за секунду передается 341333 byte, что примерно 2.7 Mbit.

В pdf на STM32 написано:

USB main features
● USB specification version 2.0 full-speed compliant

а это как я понимаю 12 Мбит/с,

хотя точно не уверен, в Википедии написано Full-speed, 0,5—12 Мбит/с (аудио-, видеоустройства)

Так как полученная скорость, маленькая или норма для этого проца?


Что вы там намеряли? Для HID максимальная скорость 64000 байт за секунду. За один кадр (1mc) только одна транзакция - максимум 64 байта. Какой драйвер вы создали для ПК - для HID драйвер готовый в составе ОС.



Danis
Цитата(Fry__ @ Dec 14 2010, 15:50) *
Что вы там намеряли? Для HID максимальная скорость 64000 байт за секунду. За один кадр (1mc) только одна транзакция - максимум 64 байта.


Может Вы и правы.
Намерил то что написано в первом посте, данные не с потолка.
Для гарантии сохранности целостности данных в буфере я использовал проверку CRC32 на всякий случай, все сходиться и ошибок не было.


Цитата(Fry__ @ Dec 14 2010, 15:50) *
Какой драйвер вы создали для ПК - для HID драйвер готовый в составе ОС.


Я знаю что имеется, мне свой написать было нужно принципиально.
Fry__
Цитата(Danis @ Dec 14 2010, 17:56) *
Может Вы и правы.
Намерил то что написано в первом посте, данные не с потолка.
Для гарантии сохранности целостности данных в буфере я использовал проверку CRC32 на всякий случай, все сходиться и ошибок не было.
Я знаю что имеется, мне свой написать было нужно принципиально.


Ну если вы создали свой драйвер, то с устройства FULL SPEED реальная скорость должна быть не менее 800-900 kBps (килобайт за секунду). Более у меня не получалось. Только тогда при чем здесь HID.

To kovigor. Фабричная Flash'а наверняка High Speed устройство.
kovigor
Цитата(Fry__ @ Dec 14 2010, 18:53) *
Фабричная Flash'а наверняка High Speed устройство.


Так и есть, но у меня порт FS, так что ей остается только работать на FS sm.gif
Danis
Цитата(Fry__ @ Dec 14 2010, 21:53) *
Только тогда при чем здесь HID.


Извиняюсь за задержку с ответом, все нет времени в форуме посидеть….
Я создал свой драйвер для HID, чтобы устройство могло не только в винде но и в linux работать. Если использовать готовый драйвер windows система покажет устройство просто как HID совместимое устройство, как на скриншоте ниже, без указания названия и изготовителя. Мне так не интересно.

alex6441161
Здравствуйте, помогите новичку, я делаю на диплом устройство которое связано по USB с компом. МК AT90USB162 может передавать на Full Speed, а на комп я так понимаю мне надо писать драйвер. подскажите где почитать про написание драйвера?
A. Fig Lee
Цитата(alex6441161 @ Jan 15 2015, 11:50) *
Здравствуйте, помогите новичку, я делаю на диплом устройство которое связано по USB с компом. МК AT90USB162 может передавать на Full Speed, а на комп я так понимаю мне надо писать драйвер. подскажите где почитать про написание драйвера?


Смотря как передавать. Если имплементация на AT90USB162 CDC compliant (по русски: если USB прикинется что он COM порт), то там такой уже есть.
Xenia
Цитата(alex6441161 @ Jan 15 2015, 19:50) *
Здравствуйте, помогите новичку, я делаю на диплом устройство которое связано по USB с компом. МК AT90USB162 может передавать на Full Speed, а на комп я так понимаю мне надо писать драйвер. подскажите где почитать про написание драйвера?


Драйвер писать не надо - если это CDC, то подходит стандартный "usbser.sys", но inf-файл нужно приложить, чтобы комп знал, что для вашего устройства именно usbser.sys годится, а не какой-то другой.

Обычно берешь inf-файл от какого-то другого CDC-устройства (лучше для Атмеловского) и переправляешь в нем VID и PID на свои (этот файл текстовый). Или при программировании AT90USB162 уставливаешь ему такие VID и PID, какие указаны в чужом inf-файле.

А еще лучше взять inf-файл от демки самого AT90USB162 - из архива at90usb162-cdc-1_0_1.zip , т.к. он именно usbser.sys использует. Но только он устарел маленько (2007 год), а потому для Win7 и Win8, возможно, не годится.

P.S. Если оно только ради диплома надо, то можно не горбатиться, а взять целиком пример из at90usb162-cdc-1_0_1.zip , таким, каков он есть, дописав к нему передачу ваших данных. Стандартно тот код всё, что принимает от UART, передает в USB. А то что принимает от USB, передает в UART. Т.е. работает, как USB/COM-конвертер. Разорвать эту цепь очень просто, если UART вам не нужен.

P.P.S. В свежем "Atmel Software Framework (ASF)" версии 3.21.0 (08.01.2015) есть универсальный USB-драйвер для всех атмеловских примеров:
"Windows 2000, XP, Vista, 7 and 8 (x32 and x64) setup file for Atmel CDC Devices" - этот для всех версий Windows подойдет.
Выкладываю только inf-файл, т.к. здесь по-прежнему используется драйвер usbser.sys из дистрибутива Windows. Перед использованием распаковать из rar-архива.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.