|
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 15 2012, 21:17
|

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

|
Цитата(_Артём_ @ May 16 2012, 00:08)  Может watchdog сбрасывает? watchdog в мк выключен. Проблема в том что писишка следющий байт запроса (0х40) передаёт после паузы. Задержка именно в писишке. мк отвечает сразу и нужным количеством байт, писишка их успешно принимает но следующий запрос передаёт после паузы! Пробывал играться с таймаутами но ниче не меняется
|
|
|
|
Guest_@Ark_*
|
May 15 2012, 21:25
|
Guests

|
Цитата(zombi @ May 16 2012, 01:17)  ... Задержка именно в писишке... Вы ничего не сказали про управление потоком. Какие настройки для COM-порта в PC? И как управляете этими сигналами со стороны UART FT232?
|
|
|
|
|
May 15 2012, 21:32
|

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

|
Цитата(@Ark @ May 16 2012, 00:25)  Вы ничего не сказали про управление потоком. Наверное никак не управляю. Тупо сижу и жду когда придут все 512 байт. Цитата(@Ark @ May 16 2012, 00:25)  Какие настройки для COM-порта в PC? Getcommstate(h,DCB); DCB.BaudRate:=2000000; Setcommstate(h,DCB); Цитата(@Ark @ May 16 2012, 00:25)  И как управляете этими сигналами со стороны UART FT232? Какими сигналами? и как оными управлять?
|
|
|
|
Guest_@Ark_*
|
May 15 2012, 21:42
|
Guests

|
Цитата(zombi @ May 16 2012, 01:32)  Наверное никак не управляю. Тупо сижу и жду когда придут все 512 байт. Getcommstate(h,DCB); DCB.BaudRate:=2000000; Setcommstate(h,DCB); На счет Дельфи я Вам не подскажу, но желательно выставить режим порта 'без управления потоком', если этот механизм никак не используете. В принципе, винда (если речь о ней) может давать задержки от 10мс до 300мс (иногда и более), Вас ни спрашивая ни о чем, и ни о чем не уведомляя... Не реал-тайм эта система - имеет право, как говориться...
Сообщение отредактировал @Ark - May 15 2012, 21:44
|
|
|
|
|
May 15 2012, 21:57
|

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

|
Цитата(@Ark @ May 16 2012, 00:42)  В принципе, винда (если речь о ней) О ней родимой. windows 7 Цитата(@Ark @ May 16 2012, 00:42)  На счет Дельфи я Вам не подскажу, но желательно выставить режим порта 'без управления потоком', если этот механизм никак не используете. Надо будет поискать что это за режим. Цитата(@Ark @ May 16 2012, 00:42)  В принципе, винда (если речь о ней) может давать задержки от 10мс до 300мс (иногда и более), Вас ни спрашивая ни о чем, и ни о чем не уведомляя... Не реал-тайм эта система - имеет право, как говориться... Настораживает завидное постоянство задержки ~17ms. Хотя небольшая девиация имеется ~0.4ms. При общем периоде транзакций ~20ms. Не может ли это быть как-то связано с RTC писишки? что то когдато слышал про какието вродебы 18ms?
|
|
|
|
Guest_@Ark_*
|
May 15 2012, 22:11
|
Guests

|
Цитата(zombi @ May 16 2012, 01:57)  Настораживает завидное постоянство задержки ~17ms. Хотя небольшая девиация имеется ~0.4ms. При общем периоде транзакций ~20ms. Не может ли это быть как-то связано с RTC писишки? что то когдато слышал про какието вродебы 18ms? Насчет таймера - не знаю, его период когда-то был порядка 18,2 мс (точная частота 1193180/65536). Но нужно принимать, как данность, задержку между пакетами в 20мс, как среднестатистическую, если имеете дело с виндой. И быть готовым к задержкам порядка 100-300мс - время от времени. И, очень редко, - к 'зависаниям' на пару-другую секунд. Все это - по опыту общения с виндой, вплоть до ХР. Что там дальше- не ведомо...
Сообщение отредактировал @Ark - May 15 2012, 22:12
|
|
|
|
|
May 15 2012, 22:28
|

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

|
Цитата(@Ark @ May 16 2012, 01:11)  Но нужно принимать, как данность, задержку между пакетами в 20мс, как среднестатистическую, если имеете дело с виндой. И быть готовым к задержкам порядка 100-300мс - время от времени. И, очень редко, - к 'зависаниям' на пару-другую секунд. Все это - по опыту общения с виндой, вплоть до ХР. Что там дальше- не ведомо... Дык, сама то задержка не напрягает. Напрягает время за которое, с учётом оной, писишка прочитает 32МB. По идее без задержки (на скорости 2Mb) должно быть ~167 сек, а с задержкой получается 1310 сек!!!  в восемь раз дольше!!! Наверно надо размер буфера увеличивать.
|
|
|
|
Guest_@Ark_*
|
May 15 2012, 22:39
|
Guests

|
Цитата(zombi @ May 16 2012, 02:28)  Дык, сама то задержка не напрягает. Напрягает время за которое, с учётом оной, писишка прочитает 32МB. По идее без задержки (на скорости 2Mb) должно быть ~167 сек, а с задержкой получается 1310 сек!!!  в восемь раз дольше!!! Наверно надо размер буфера увеличивать. На сколько помню, передаваемый по USB пакет имеет ограничение. Выше него не "прыгните". Давайте подождем комментариев более компетентных в этом вопросе коллег.
|
|
|
|
Guest_@Ark_*
|
May 15 2012, 23:12
|
Guests

|
Цитата(V_G @ May 16 2012, 02:55)  А вы попробуйте какой-нибудь терминалкой принять файл 32 метра с другого компа через 2 адаптера USB-COM (или через две FT232). Получите опорное время, вокруг которого можно будет прыгать Да вот и не факт, что получите, оказывается! Я вот сталкивался с ситуациями, когда передача идет в одну сторону на скорости порядка 2Мбит/сек (от камеры). И винда такой поток прекрасно "переваривает". Именно через FT232! А вот когда нужно часто переключаться с приема на передачу - скорость падает до 18 пакетов в секунду, не зависимо от их размера. Опять же из опыта...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|