|
XMega - FT232RL - PS |
|
|
|
May 15 2012, 20:51
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Господа помогите. Мозг уже плавится. Схема: Xmega <-> FT232RL <-> PS. Нужно по запросу от PS (путём посылки байта 0x40) получить от иксмеги 32MB данных. Прогу на PS пишу на Delphi. Передавать решил пачками по 512 байт (т.е. 65536 транзакций). Скорость сом порта 2Mb/s. Всё вроде работает, но есть один нюанс (напишу позже). Вот так открываю порт: Код var h:thandle; ... h:=fileopen('COM7',fmOpenReadWrite); ... Вот процедура вычитки сом порта (максимально упростил для наглядности): Код procedure BUF_read; var i,k:dword;B:byte; BUF:array [0..511] of byte; begin B:=$40; for k:=0 to $FFFF do begin _hwrite(h,@B,1); for i:=0 to 511 do _hread(h,@buf0[i],1); end; end; RXD и TXD наблюдаю осциллографом. Сразу после передачи писишкой байта 0x40 иксмега передаёт в ответ 512 байт затем пауза примерно 17ms и цикл повторяется. Откуда эта пауза берётся? Как от неё избавиться?
|
|
|
|
|
 |
Ответов
|
May 16 2012, 05:27
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
УРА! Нашел эту самую злополучную задержку! В доп. настройках ком порта FTDI. В параметре "Время ожидания (мсек)" стояло именно 17! Поставил 1 и задержка действительно стала 1мс, правда иногда скачет до 2-х мс, но это видать винда чудит. В результате удалось получить скорость приёма ~278сек. Далеко от идеала но всёже лучше чем не 1310с Кстати, уменьшение параметра "Буфер приёма/передачи (Байты)" с 4096 до 512 не даёт ни какого эффекта. Сейчас думаю как ещё уменьшить время приёма. 1. Увеличить скорость до 3Mb/s - эффект предсказуем. 2. Увеличить размер передаваемой пачки до 1024,2048 или 4096 байт. Как думаете существенно ли повлияет увеличение размера буфера на время передачи? Т.к. изменение буфера довольно кропотливый процесс и не хочется зря время тратить. Цитата(dimka76 @ May 16 2012, 08:04)  Не фантастика сам лично через виртуальный COM порт загонял в компьютер 1 ГБайт за 90 секунд  Как же это возможно? Ведь скрость должна быть ~120Mb/s!
Эскизы прикрепленных изображений
|
|
|
|
|
May 16 2012, 10:34
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(zombi @ May 16 2012, 08:27)  Поставил 1 и задержка действительно стала 1мс, правда иногда скачет до 2-х мс, но это видать винда чудит. Я делал пакетный протокол (в рамке SLIP, которой и Wake пользуется), так установкой EventChar на символ разделителя пакетов обошёлся, не хуже было точно. Если FTDI-шному драйверу виртуального COM-порта задать EventChar, то не только поток программы в Win не дёргается по каждому байту и спокойно спит, пока в буфере драйвера не появится этот символ, но в при передаче драйвер, и при приёме сама микросхема FTDI отправляет недозаполненный буфер по приходу этого символа. Дело было давно с FT232BM, точных времён не помню, но я в дальнейшем даже не трогал в настройках те 16 мс по умолчанию. Без прописывания EventChar все те милисекунды, которые должны быть. Цитата(zombi @ May 16 2012, 12:48)  Кажется я поторопился с предсказуемостью Если устанавливаю скорость больше чем 2Mb/s то, ниче не работает Токи комп не понимает толи проц чегото не успевает  Года три назад — та же FT232BM, завалявшаяся в столе + Cyclone EP1C3. По ТЗ на мой кусок был UART 2 Mbps (и не от компа), но я c заглушкой в альтерине, которая принятый байт тут же отдаёт в UART на передачу (заменяя по дороге '?' на '!') гонял и на 3 MBps.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
May 16 2012, 18:01
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(ReAl @ May 16 2012, 13:34)  ...установкой EventChar на символ разделителя пакетов обошёлся Но у меня и на приём и на передачу могут быть любые байты 0..FF как использовать EventChar ? Уже 10 лет чип на рынке и неужели ни укого не возникло необходимости начать передачу не полностью заполненного буфера? Неужели разработчики не заложили такую возможность? или заложили но почемуто скрывают? А может всё на столько элементарно что об этом никто не упоминает? Пол для в гугле искал хоть что то подобное, но ничего не нашел. КАПЕЦ!
|
|
|
|
|
May 16 2012, 19:49
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(zombi @ May 16 2012, 21:01)  Но у меня и на приём и на передачу могут быть любые байты 0..FF как использовать EventChar ? Пакетная передача с byte-stuffing. Выделенный байт используется для отмашки границ пакета и при наличии в сообщении подменяется парой других байт. В данном конкретном случае использовалась рамка SLIP (почти эта подстановка используется в Wake, но в спецификации от Леонида Ивановича байт FEND не передаётся в конце пакета, что делает бессмысленной установку его как EventChar). Есть ещё COBS. SLIP в катастрофически неудачном случае может удвоить длину пакета, у COBS удлиннение максимум байт на пакет (при пакетах короче 254 байт). SLIP мне когда-то был навязан необходимостью работы с радиомодемом, после чего исходники копировались в несколько других проектов. Про COBS узнал позже и пока не было куда приткнуть. Цитата(zombi @ May 16 2012, 21:01)  Уже 10 лет чип на рынке и неужели ни укого не возникло необходимости начать передачу не полностью заполненного буфера? Неужели разработчики не заложили такую возможность? или заложили но почемуто скрывают? У FT2232D на каждом канале есть нога SI/WU - SendImmediate/WakeUp То, что надо. Но это побольше байда, чем FT232R Никогда не пользовался, мне EventChar хватало. Причём он был еще для обычного RS232 использован и там тоже был полезен, а с переходом на FT232/FT245 так просто дополнительній бонус получился.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
Сообщений в этой теме
zombi XMega - FT232RL - PS May 15 2012, 20:51 _Артём_ Цитата(zombi @ May 15 2012, 23:51) Сразу ... May 15 2012, 21:08 zombi Цитата(_Артём_ @ May 16 2012, 00:08) Може... May 15 2012, 21:17  @Ark Цитата(zombi @ May 16 2012, 01:17) ... За... May 15 2012, 21:25   zombi Цитата(@Ark @ May 16 2012, 00:25) Вы ниче... May 15 2012, 21:32    @Ark Цитата(zombi @ May 16 2012, 01:32) Наверн... May 15 2012, 21:42     zombi Цитата(@Ark @ May 16 2012, 00:42) В принц... May 15 2012, 21:57      @Ark Цитата(zombi @ May 16 2012, 01:57) Настор... May 15 2012, 22:11       zombi Цитата(@Ark @ May 16 2012, 01:11) Но нужн... May 15 2012, 22:28        @Ark Цитата(zombi @ May 16 2012, 02:28) Дык, с... May 15 2012, 22:39 V_G А вы попробуйте какой-нибудь терминалкой принять ф... May 15 2012, 22:55 @Ark Цитата(V_G @ May 16 2012, 02:55) А вы поп... May 15 2012, 23:12 V_G Так у топикстартера и есть двусторонний обмен, хот... May 16 2012, 01:07 dimka76 Цитата(V_G @ May 16 2012, 04:07) ....... ... May 16 2012, 05:04 AHTOXA Я может, что-то не понял, но при чём тут винда воо... May 16 2012, 03:42 V_G Нет, как раз пауза 17 мс может быть вызвана как то... May 16 2012, 03:59 V_G Цитата(zombi @ May 16 2012, 16:27) Кстати... May 16 2012, 05:37  zombi Цитата(V_G @ May 16 2012, 08:37) У вас в ... May 16 2012, 05:45 dimka76 Цитата(zombi @ May 16 2012, 08:27) Как же... May 16 2012, 09:06  zombi Цитата(dimka76 @ May 16 2012, 12:06) Если... May 16 2012, 09:48    zombi Аглицкий со словарём и то со скрипом.
Цитата(ReAl ... May 16 2012, 20:16 XVR Вы когда отправляете запрос с ПС на МК пишете 1 ба... May 16 2012, 05:51 zombi Цитата(XVR @ May 16 2012, 08:51) Вы когда... May 16 2012, 06:13  XVR Цитата(zombi @ May 16 2012, 10:13) А где ... May 16 2012, 06:28   zombi Цитата(XVR @ May 16 2012, 09:28) тут и ту... May 16 2012, 06:35 XVR Еще тут посмотрите May 16 2012, 06:48 zombi Цитата(XVR @ May 16 2012, 09:28) тут и ту... May 16 2012, 07:07  XVR Цитата(zombi @ May 16 2012, 11:07) Шото н... May 16 2012, 09:53   zombi Цитата(XVR @ May 16 2012, 12:53) Я тоже, ... May 16 2012, 10:04 V_G Как вариант, настроить буфер на 64 байта и плюнуть... May 16 2012, 07:07 zombi Цитата(V_G @ May 16 2012, 10:07) Как вари... May 16 2012, 07:25
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|