Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC214x, USB 2.0 - Virtual COM port, макс. скорость передачи = 15кБайт/сек
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Alex2172
Есть пример для LPC214x от Keil реализующий передачу с виртуального COM-порта в UART.
Сделаем простой эксперимент... удалим передачу из VCOM в UART, и будем передавать данные обратно в VCOM - т.е. реализуем простое эхо.

Тогда максимальная скорость передачи составляет всего лишь ~15кБайт/сек (независимо от выбранной скорости виртуального COM-порта - будь то 9600, или 921600), и это при том что мы имеем на борту USB 2.0.
Откуда это ограничение? В драйвере от Keil...? В размере буфера bulk-only EP - 64 байт...?
Прошу Вас, помогите разобраться.
Abo
Что то этого примера на кейле я не нашел. А пример реализует стандартный класс устройства, или там все по свое, в том числе и драйвер для винды?
Alex2172
Цитата(Abo @ Mar 28 2006, 13:32) *
Что то этого примера на кейле я не нашел. А пример реализует стандартный класс устройства, или там все по свое, в том числе и драйвер для винды?


http://www.standardics.philips.com/support.../?scope=LPC2000
см. "Sample Code for AN10420 USB Virtual COM Port on LPC214x"
"AN10420 USB Virtual COM Port on LPC214x"
Alex2172
Привожу пример для приблизительной оценки скорости с использованием HyperTerminal:
1. После установки 2ух драйверов VirtualCOM, и подключения к LPC214x через USB предположим Вы имеете два дополнительных порта COM5 и COM6
2. Открываем два HyperTerminal'а для COM5 и COM6, аппаратный контроль отключаем, остальное "по барабану"
3. В одном HT выбираем принять файл, например через XModem 1k, во втором соответственно передать

Во вложенном проекте для Keil изменения только в файле VCOMuser.c - принимаем с EP2 передаем в EP5, и наоборот - принимаем в EP5, передаем в EP2 (с UART обмен обрезан)

Оценка скорости таким способом будет несколько занижена с 15кБ до 10кБ/сек, но зато не требует специального ПО.

С уважением, Александр
aaarrr
HyperTerminal даже для приблизительной оценки скорости использовать нельзя -
очень глючная и тормозная софтина. Могу порекомендовать TeraTerm для этих
целей.
И еще: для оценки скорости данные лучше гнать в одну сторону - скорости передачи
и приема могуг отличаться в разы (и даже на порядки, как в стандартном виндовом CDC).
Alex2172
Кстати, если оценить скорость чтения из виртуального USB Mass Storage Device (также пример от Keil), то скорость составит примерно 30 кБ/сек.
Alex2172
Цитата(aaarrr @ Mar 28 2006, 19:15) *
HyperTerminal даже для приблизительной оценки скорости использовать нельзя -
очень глючная и тормозная софтина. Могу порекомендовать TeraTerm для этих
целей.
И еще: для оценки скорости данные лучше гнать в одну сторону - скорости передачи
и приема могуг отличаться в разы (и даже на порядки, как в стандартном виндовом CDC).


Оценка скорости в HyperTerminal вполне сопоставима с оценкой скорости полученной средствами Win32 CommAPI.
aaarrr
Цитата(Alex2172 @ Mar 29 2006, 15:46) *
Оценка скорости в HyperTerminal вполне сопоставима с оценкой скорости полученной средствами Win32 CommAPI.


Вполне возможно: глючность сказывается на скоростях в десятки-сотни килобайт в
секунду. Но гипертерминал это не оправдывает.
Alex03
Может драйвер.
Если передаётся в каждую сторону только по одному BULK пакету в мс. (или даже в 2 мс.)
Alex2172
Цитата(Alex03 @ Mar 30 2006, 10:48) *
Может драйвер.
Если передаётся в каждую сторону только по одному BULK пакету в мс. (или даже в 2 мс.)


Bulk-Only режим, максимальный размер пакета 64 байта, период фрейма 1 мс
LPC2148 формирует прерывание по приему данных в используемый EndPoint с периодом 1 мс.
Поэтому теоретический предел - 64кБ/сек.
При тесте виртуального COM-порта максимальная скорость приема/передачи ~ 15кБ (в тесте использовались пакеты длителностью 16 байт), т.е.
Speed = 64кБ/сек / (64/16) = 16 кБ - все сходиться.

Но! как заставить передавать в одном фрейме несколько пакетов?
Такая же проблема с USB-MEM - в примере используется Bulk-Only 64 байта.
Alex03
Я про это и имел ввиду.
И насколько понимаю дело в драйвере, именно он submit-ит URB.


Сам недавно столкнулся с этой проблемой используя libusb.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.