|
at90usb1287 - малая скорость передачи по USB, Передача данных в режиме CDC USB |
|
|
|
Nov 23 2010, 09:14
|
Частый гость
 
Группа: Свой
Сообщений: 151
Регистрация: 19-12-04
Из: Москва
Пользователь №: 1 560

|
Привет! Необходимо за 0.1 сек передать с at90usb1287 в комп массив данных из 600 чисел типа int Я пользуюсь для этого printf() Код while( buffindex < buffmax ){ printf( "%x %x\r\n", databuff[ buffindex ], databuff[ buffindex + 1 ] ); buffindex += 2; } И получаю очень малую скорость - порядка 100 байт за 0.1 секунды. А нужно порядка 20 килобайт в секунду. Посоветуйте, как можно увеличить скорость, что я делаю не так? За основу я взял AT90USBxxx CDC demonstration с сайта Atmel. Функцию вывода буффера я поместил в функцию cdc_task() Спасибо.
|
|
|
|
|
 |
Ответов
|
Nov 25 2010, 08:36
|
Частый гость
 
Группа: Свой
Сообщений: 151
Регистрация: 19-12-04
Из: Москва
Пользователь №: 1 560

|
Цитата(Xenia @ Nov 25 2010, 03:02)  А вы еще "double bank mode" включите (это в конфигурации конечных точек), если до сих пор этого не сделали. Еще быстрее станет.
После этого прогоните свой тест снова. Напишите, что изменилось. Возможно, что тогда при 80байтах буфер перестанет дробиться. Спасибо за идею, в моей версии библиотек (USBKEY_STK525-series6-cdc-2_0_3-doc.zip) похоже уже включен double bank mode. Код usb_configure_endpoint(TX_EP, \ TYPE_BULK, \ DIRECTION_IN, \ SIZE_64, \ TWO_BANKS, \ NYET_ENABLED); Цитата(shrek @ Nov 25 2010, 10:08)  Получается за кадр, период которого 1 мс, full-speed девайс может передать максимум 64 байта и это получается 64 килобайта в секунду или 512000 бит в секунду в одну сторону. А как получается что mass storage работает на скоростях гораздо больше 60кб/сек? Там используется BULK? Насколько я помню USB флешки на USB 1.1 выдают скорость около мегабайта в секунду.
|
|
|
|
|
Nov 25 2010, 13:02
|
Частый гость
 
Группа: Участник
Сообщений: 125
Регистрация: 1-12-08
Из: г. Орел
Пользователь №: 42 126

|
Цитата(mempfis_ @ Nov 25 2010, 11:48)  Это всё получается потому, что для BULK-передач отводится всё свободное время на шине. Если нет SETUP/ISO/INTERRUPT-передач и есть заполненные BULK EPs то USB-host будет считывать данные из них постоянно по мере их заполнения. За 1 мС BULK EP может быть заполненной и считанной несколько раз. Помогает повышению скорости двойная буфферизация. А разве передача данных из точки или в точку не начинается по маркер пакету SOF? По идее хост прислал мне SOF, потом шлет пакет с адресом конечной точки и функцией и направлением передачи, после этого если в буфере данные имелись то передаются данные. После передачи по идее хост должен прислать подтверждение. Вроде бы все передачи начинаются после "команды" хоста. Или в течении кадра 1 мс можно окромя 64 байт всунуть еще? например меняя DATA0 на DATA1 и наоборот? Нда... оказывается так и делается... получается по теории 7 с лишним мегабит в одну сторону...  Значит виндовый драйвер CDC можно разогнать на более чем 64 килобайта в сек))) С другой стороны как именно организовать передачу непрерывную со сменой PID пакета... Это уже програмные проблемы... Хотя когда я отправлял с компа данные больше 64 байт они за раз и отправлялись без подтверждений и т.д. хотя я конкретно не смотрел при отладке в течении кадра они принялись и не смотрел PID данных data0 или data1... По проведенным только что опытам он за раз в течении кадра смог принять 1024 байта!!! Получается 8192000 мегабит в сек...  При попытке отправить ему 1025 байт уходит в непонятное зацикливание по прерываниям причем генерится перрывание и по данным банка 0 и по данным банка 1... Я хосту случайно ничего не должен отправить?... Или хост получается не разбивает отправленные байты на транзакции... Пытается все за раз отправить)))
Сообщение отредактировал shrek - Nov 25 2010, 13:17
|
|
|
|
|
Nov 25 2010, 13:37
|
Частый гость
 
Группа: Участник
Сообщений: 125
Регистрация: 1-12-08
Из: г. Орел
Пользователь №: 42 126

|
Цитата(mempfis_ @ Nov 25 2010, 16:32)  С at90usb не работал. Нужно смотреть какой тип EP в нём есть - с двойной буфферизацией или без. По поводу пакетов дата0/дата1 - этим занимается usb-контроллер. Ваша задача дождаться освобождения одного из буфферов конечных точек и заполнить соответствующий. Не забудьте что если длина данных кратна размеру конечной точки то надо слать пакет нулевой длины для того, чтобы показать хосту что закончилась передача данных. Ну вообще в AT91SAM7A3 контроллер этим не занимается по моему... Только вручну устанавливая и сбрасывая бит... Забрел в эту тему из-за того, что обсуждался крайне важный вопрос скорости передачи данных по USB CDC)))
Сообщение отредактировал shrek - Nov 25 2010, 13:38
|
|
|
|
Сообщений в этой теме
Mty at90usb1287 - малая скорость передачи по USB Nov 23 2010, 09:14 Xenia А приём-то у вас работает? А то как-то странно: pr... Nov 23 2010, 09:28 Mty Цитата(Xenia @ Nov 23 2010, 12:28) А приё... Nov 23 2010, 09:43  shrek Цитата(Mty @ Nov 23 2010, 12:43) Да, рабо... Nov 23 2010, 18:20   Mty Цитата(shrek @ Nov 23 2010, 21:20) А вы б... Nov 24 2010, 08:55    zhevak Цитата(Mty @ Nov 24 2010, 13:55) Попробов... Nov 24 2010, 09:19   mempfis_ Цитата(shrek @ Nov 23 2010, 22:20) Сам ст... Nov 24 2010, 09:23    shrek Цитата(mempfis_ @ Nov 24 2010, 12:23) Это... Nov 25 2010, 07:08 kovigor Цитата(Mty @ Nov 23 2010, 13:14) А нужно ... Nov 23 2010, 09:33 zhevak Цитата(Mty @ Nov 23 2010, 14:14) И получа... Nov 23 2010, 10:11 Xenia Цитата(zhevak @ Nov 23 2010, 13:11) К ста... Nov 23 2010, 11:57  demiurg_spb Передавайте бинарный массив сразу без всяких print... Nov 23 2010, 12:00   MrYuran Цитата(demiurg_spb @ Nov 23 2010, 15:00) ... Nov 23 2010, 12:09   Mty Цитата(demiurg_spb @ Nov 23 2010, 15:00) ... Nov 23 2010, 13:14    zhevak Цитата(Mty @ Nov 23 2010, 18:14) Спасибо.... Nov 23 2010, 13:59  zhevak Цитата(Xenia @ Nov 23 2010, 16:57) Есть г... Nov 23 2010, 12:24   Xenia Цитата(zhevak @ Nov 23 2010, 15:24) Знает... Nov 23 2010, 12:45 Mty Цитата(zhevak @ Nov 23 2010, 13:11) Отдел... Nov 23 2010, 12:44 ARV а вы не рассматривали такую возможность: в WinAVR ... Nov 24 2010, 09:51 Mty Цитата(ARV @ Nov 24 2010, 12:51) а вы не ... Nov 24 2010, 20:37   Mty Цитата(mempfis_ @ Nov 25 2010, 11:48) Это... Nov 25 2010, 10:28      mempfis_ Цитата(shrek @ Nov 25 2010, 17:37) Ну воо... Nov 25 2010, 13:53
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|