|
Как повысить скорость прокачки данных через 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, получал ожидаемые большие скорости обмена данными и знает где нужно изменить код.
Помогите, пожалуйста.
|
|
|
|
|
 |
Ответов
|
May 18 2007, 20:34
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912

|
Мдя. Используя lpc2148 c открытым USB стеком и как mass storage и как custom устройство дает 0,33 мегабайта в секунду при обмене буффер прилагухи или файл диска <--> записи/считывании в озу контроллера. контроллер работает на 60 мегагерцах. Гденить порытся в исходниках и откопать еще скорость возможно (исходники USB стека для 2148 и драйвера на PC ессесено доступны)? Куда рылом похать. Начальник сказал что такая скорость пойдет для текущего проекта. Что меня не мало успокоило. Эта скорость как? медленно, быстро? или так себе? Некоторые тут аж 600кбайт/сек какимто волшебным способом получили  .... У кого больше скорость обмена получилось? и при каких остоятельствах вы ее видели в последний раз?
|
|
|
|
Сообщений в этой теме
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 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
|
|
|