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

 
 
> XMega - FT232RL - PS
zombi
сообщение May 15 2012, 20:51
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 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 и цикл повторяется.
Откуда эта пауза берётся?
Как от неё избавиться?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zombi
сообщение May 16 2012, 05:27
Сообщение #2


Гуру
******

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



УРА! Нашел эту самую злополучную задержку!
В доп. настройках ком порта FTDI.
В параметре "Время ожидания (мсек)" стояло именно 17!
Поставил 1 и задержка действительно стала 1мс, правда иногда скачет до 2-х мс, но это видать винда чудит.
В результате удалось получить скорость приёма ~278сек. Далеко от идеала но всёже лучше чем не 1310с biggrin.gif
Кстати, уменьшение параметра "Буфер приёма/передачи (Байты)" с 4096 до 512 не даёт ни какого эффекта.

Сейчас думаю как ещё уменьшить время приёма.
1. Увеличить скорость до 3Mb/s - эффект предсказуем.
2. Увеличить размер передаваемой пачки до 1024,2048 или 4096 байт.

Как думаете существенно ли повлияет увеличение размера буфера на время передачи?
Т.к. изменение буфера довольно кропотливый процесс и не хочется зря время тратить.

Цитата(dimka76 @ May 16 2012, 08:04) *
Не фантастика сам лично через виртуальный COM порт загонял в компьютер 1 ГБайт за 90 секунд wink.gif

Как же это возможно? Ведь скрость должна быть ~120Mb/s!
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 16 2012, 10:34
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 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) *
Кажется я поторопился с предсказуемостью biggrin.gif
Если устанавливаю скорость больше чем 2Mb/s то, ниче не работает crying.gif
Токи комп не понимает толи проц чегото не успевает laughing.gif
Года три назад — та же FT232BM, завалявшаяся в столе + Cyclone EP1C3.
По ТЗ на мой кусок был UART 2 Mbps (и не от компа), но я c заглушкой в альтерине, которая принятый байт тут же отдаёт в UART на передачу (заменяя по дороге '?' на '!') гонял и на 3 MBps.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
zombi
сообщение May 16 2012, 18:01
Сообщение #4


Гуру
******

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



Цитата(ReAl @ May 16 2012, 13:34) *
...установкой EventChar на символ разделителя пакетов обошёлся
Но у меня и на приём и на передачу могут быть любые байты 0..FF как использовать EventChar ?

Уже 10 лет чип на рынке и неужели ни укого не возникло необходимости начать передачу не полностью заполненного буфера?
Неужели разработчики не заложили такую возможность? или заложили но почемуто скрывают?
А может всё на столько элементарно что об этом никто не упоминает?
Пол для в гугле искал хоть что то подобное, но ничего не нашел.
КАПЕЦ! wacko.gif
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 16 2012, 19:49
Сообщение #5


Нечётный пользователь.
******

Группа: Свой
Сообщений: 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 так просто дополнительній бонус получился.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
zombi
сообщение May 16 2012, 20:16
Сообщение #6


Гуру
******

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



Аглицкий со словарём и то со скрипом.
Цитата(ReAl @ May 16 2012, 22:49) *
Пакетная передача с byte-stuffing. Выделенный байт используется для отмашки границ пакета и при наличии в сообщении подменяется парой других байт.
А что делать если в сообщении уже есть такая пара байт?
Или оную нужно определить и сообщить принимающей стороне?

ЗЫ. Ага всё сам нашел. всё понятно. Спасибо ReAl, буду пробывать.
Цитата
Он использует специальные символы для ограничения кадра данных в последовательном канале. SLIP определяет следующие два символа, служащие для этой цели: End и Esc. Символом End служит символ с кодом ASCII 192 (ОхСО), символом Esc - символ с кодом 219 (OxDB). Компьютер с протоколом SLIP передает символ End в конце каждого пакета данных. Символ Esc используется для обозначения данных, имеющих тот же номер, что и символы Esc и End внутри пакета данных. В том, что для Esc и End выбрали именно указанные коды, нет особого скрытого смысла. Просто они были выбраны, и все. Поэтому почти наверняка в потоке данных пользователя будут встречаться как символы Esc, так и End. Когда это происходит, SLIP использует Esc, чтобы сообщить приемнику, что следующий символ с кодом End на самом деле не является концом кадра. Например, когда в пакете данных попадается байт с номером ОхСО (код символа End), SLIP подставляет двухбайтную Esc-последовательность Esc OxDC. Если байт имеет код самого символа Esc, SLIP вставляет двухбайтную Esc-последовательность Esc OxDD.

ЗЫ.ЗЫ. Обидно только что придётся заниматься паковкой/распаковкой блоков , тратить на это ресурсы мк и всё только потому что FTDIшники поленились реализовать функцию принудительной выгрузки буфера или хотябы сделать задержку меньше 1мс maniac.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - 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


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

 


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


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