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

 
 
> Как повысить скорость прокачки данных через virtual COM (USB), CDC из пакета FreeRTOS для AT91SAM7X256
OlegHmt
сообщение Feb 18 2007, 23:47
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 5-12-06
Пользователь №: 23 146



Нужно организовать обмен данными между ПК и камнем. В основном данные записываются в камень, но небольшие пакеты подтверждения состояния процеса в камне передаются в ПК.
В качестве базового кода использовал пример lwIP_Demo_Rowley_ARM7 из пакета FreeRTOS выбросив оттуда работу с сетью и добавив ещё одну задачу обработки данных от USB. В результате, у меня в системе крутятся две задачи: первая (с высшим приоритетом) производит обмен данными между контролером USB и двумя очередями (одна на приём, другая на передачу), вторая - обрабатывает данные используя их для выполнения своих задач. В качестве драйвера устройства используется стандартный виндосовский usbser.sys (работаю под WinXPPro).
В камне зарезервированы очереди на приём (размером 300 байт) и на передачу (размером 100 байт), а также очередь обмена сообщениями между обработчиком прерываний и первой задачей. Насколько я разобрался с протоколом работы USB, в даном примере код написан достаточно грамотно с использованием двойной буферизации (ping-pong процесора) и там не должно бы быть задержек (возможно я не прав). В нескольких словах как это всё работает. По приходе пакета от ПК вызывается прерывание которое записывает информацию о пакете в очередь обмена с задачей и вызывает переключение задач. Первая задача ожидает этого переключения, вытягивает данные из буфера FIFO, запихивает их в очередь приёма, данные из очереди передачи передаёт в FIFO и выставляет нужные флаги. Когда есть время вторая задача обрабатывает данные в очередях.
Запустив всю эту систему я смог получить скорость обмена даными приблизительно 125 кБит/с, а нужно где-то 5Мбит/с.
Чтобы проверить где может быть узкое место я изменил код следующим образом:
в первой задаче, дополнительно при передаче данных из буфера FIFO в очередь приёма я дописывал размер полученого пакета и номер кадра в котором пришёл пакет. Вторая задача все данные из очереди приёма после некоторой задержки отправляла обратно на ПК.
На ПК я отправлял данные из масива размером 249 байт. Програма написана на Delphi. Порт открываю командой hCom:=Createfile(port, GENERIC_READ+GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);. Скорость обмена устанавливается на камне 115200, но как мне раньше ответили эта скорость, только для совместимости и реально она не ограничивает потока данных (я это проверял - скорость обмена не изменялась при установке других чисел). Данные из программы на ПК я отправлял командой WriteFile(hCom, test[0], 249, bytes, OvLapp);. Как и предполагается в протоколе USB у меня пришло четыре пакета: 64+64+64+57=249. Но почему-то все пакеты приходят не в одном кадре (или в двух соседних кадрах), а через один-два кадра (номера кадров разнятся на две-три единицы). Может я ещё не до конца разобрался со стандартом USB, но вроде-бы, все пакеты могут передаться в одном кадре несколькими транзакциями.
Такое ощущение, что передачу данных тормозит драйвер CDC usbser.sys. Если да, то какая может быть альтернатива? Желательно бы обойтись без написания собственного драйвера.

Возможно кто-то подскажет как можно ещё попробовать поискать где узкое место.
Может кто-то работал с этой реализацией CDC, получал ожидаемые большие скорости обмена данными и знает где нужно изменить код.

Помогите, пожалуйста.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- OlegHmt   Как повысить скорость прокачки данных через virtual COM (USB)   Feb 18 2007, 23:47
- - Kail   Альтернатив нету. По книжке Агурова - втроенный др...   Feb 19 2007, 10:06
|- - OlegHmt   Цитата(Kail @ Feb 19 2007, 09:06) Альтерн...   Feb 19 2007, 11:25
|- - ivstech   Какой драйвер используете? Я - стандартный из Wind...   Feb 19 2007, 11:53
|- - OlegHmt   Цитата(ivstech @ Feb 19 2007, 10:53) Како...   Feb 19 2007, 12:42
- - gormih   Это мне тоже очень инетерсно. Поговорил с челове...   Feb 19 2007, 13:11
- - AlexandrY   А чем вы смотрите обмен по USB? Смотреть надо аппа...   Feb 19 2007, 13:43
|- - Alechek   Цитата(OlegHmt @ Feb 19 2007, 01:17) Но п...   Feb 19 2007, 14:18
|- - gormih   Цитата(Alechek @ Feb 19 2007, 14:18) Непр...   Feb 19 2007, 14:28
||- - Alechek   Цитата(gormih @ Feb 19 2007, 16:28) Други...   Feb 19 2007, 15:04
|- - AlexandrY   Да, вы оказались правы Что-то тогда было не то. Се...   Feb 21 2007, 12:57
|- - AlexandrY   Так, новые данные о работе виртуального COM порта....   Feb 22 2007, 13:20
|- - Alechek   Цитата(AlexandrY @ Feb 22 2007, 15:20) Т....   Feb 22 2007, 16:09
|- - AlexandrY   Ситуация, прояснилась окончательно. Выводы о криви...   Feb 24 2007, 15:23
|- - SasaVitebsk   Цитата(AlexandrY @ Feb 24 2007, 16:23) Си...   Feb 24 2007, 21:47
|- - ivstech   [quote name='SasaVitebsk' date='Feb 25...   Feb 25 2007, 07:30
|- - SasaVitebsk   Цитата(ivstech @ Feb 25 2007, 08:30) Цита...   Feb 25 2007, 14:23
|- - ivstech   Цитата(SasaVitebsk @ Feb 25 2007, 17:23) ...   Feb 25 2007, 18:41
|- - Alechek   Цитата(ivstech @ Feb 25 2007, 20:41) Но п...   Feb 26 2007, 15:21
- - Dron_Gus   Я думаю, SAM7S и SAM7X в плане USB идентичны. Мне,...   Feb 19 2007, 19:46
- - OlegHmt   Вчера немного разбирался с проблемой и вот что смо...   Feb 20 2007, 11:30
- - gormih   а мне посоветовали "забить" на виртуальн...   Feb 20 2007, 12:10
|- - OlegHmt   Цитата(gormih @ Feb 20 2007, 11:10) а мне...   Feb 20 2007, 12:27
|- - gormih   Цитата(OlegHmt @ Feb 20 2007, 12:27) Если...   Feb 20 2007, 12:57
- - AlexanderX   Я тестировал скорость передачи данных от компа на ...   Feb 23 2007, 18:08
- - AlexandrY   В вашем случае вероятнее виновата выбранная схема ...   Feb 24 2007, 15:58
- - SasaVitebsk   Скажите специалисты. А если требуется реализация п...   Feb 26 2007, 23:18
|- - wladimiru   Цитата(SasaVitebsk @ Feb 26 2007, 23:18) ...   Mar 6 2007, 17:04
- - OlegHmt   Наконец дошли у меня руки до исследований USB и во...   Mar 10 2007, 15:45
- - gormih   Интересно было бы узнать, чем всё закончилось? Как...   May 8 2007, 05:53
|- - klen   Я достиг скорости 1,2 кб/с!!! Пока ...   May 9 2007, 08:09
- - OlegHmt   Да похвалиться, вообще-то, нечем. Как я писал рань...   May 10 2007, 06:30
- - klen   Мдя. Используя lpc2148 c открытым USB стеком и к...   May 18 2007, 20:34
- - goodwin   http://www.tnkernel.com/usb_bulk.html   May 18 2007, 20:42
- - klen   Цитата(goodwin @ May 19 2007, 00:42) http...   May 18 2007, 20:51


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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 22:35
Рейтинг@Mail.ru


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