Перейти к содержанию
    

STM32F103. USB 2.0 full-speed?

Привет, спецы!

 

Решил освоить 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 - не лучший выбор, если нужна скорость. Можете попробовать поиграться с интервалом между прерываниями в дескрипторе INT - конечной точки. Почти наверняка там стоит 10 мС. Поставьте поменьше. Ну и попробуйте максимально увеличить размер пакета для INT - конечной точки.

P.S. Пишу Mass-Storage для AT91SAM9XE512 (тоже Full-Speed). Сделал на нем "флэшку" и замеряю скорость. На запись - ~608-616 КБайт в секунду. На чтение - ~396 - 400 КБайт в секунду. Беру фабричную флэшку. Чтение заметно шустрее, чем у меня. Зато запись - те же ~608-616 КБайт в секунду. Это много или мало ? Думаю, в случае с записью - почти хорошо. А вот чтение придется птимизировать ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

341333 byte, что примерно 2.7 Mbit.

 

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

Для hid самое то скорость. Хотя бы балк взял для оценки...

Изменено пользователем XGoblinX

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет, спецы!

 

Решил освоить 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 драйвер готовый в составе ОС.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Может Вы и правы.

Намерил то что написано в первом посте, данные не с потолка.

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

 

 

Какой драйвер вы создали для ПК - для HID драйвер готовый в составе ОС.

 

Я знаю что имеется, мне свой написать было нужно принципиально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может Вы и правы.

Намерил то что написано в первом посте, данные не с потолка.

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

Я знаю что имеется, мне свой написать было нужно принципиально.

 

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

 

To kovigor. Фабричная Flash'а наверняка High Speed устройство.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Фабричная Flash'а наверняка High Speed устройство.

 

Так и есть, но у меня порт FS, так что ей остается только работать на FS :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только тогда при чем здесь HID.

 

Извиняюсь за задержку с ответом, все нет времени в форуме посидеть….

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

 

post-44990-1292763900_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, помогите новичку, я делаю на диплом устройство которое связано по USB с компом. МК AT90USB162 может передавать на Full Speed, а на комп я так понимаю мне надо писать драйвер. подскажите где почитать про написание драйвера?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, помогите новичку, я делаю на диплом устройство которое связано по USB с компом. МК AT90USB162 может передавать на Full Speed, а на комп я так понимаю мне надо писать драйвер. подскажите где почитать про написание драйвера?

 

Смотря как передавать. Если имплементация на AT90USB162 CDC compliant (по русски: если USB прикинется что он COM порт), то там такой уже есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, помогите новичку, я делаю на диплом устройство которое связано по 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-архива.

atmel_devices_cdc.inf.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...