|
Как повысить скорость прокачки данных через virtual COM (USB), CDC из пакета FreeRTOS для AT91SAM7X256 |
|
|
|
Feb 18 2007, 23:47
|
Участник

Группа: Участник
Сообщений: 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, получал ожидаемые большие скорости обмена данными и знает где нужно изменить код.
Помогите, пожалуйста.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|