[an error occurred while processing this directive]
Ответ: Похоже, что у меня те же проблемы с CS8900 буфером
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено vit2005 01 февраля 2005 г. 15:45
В ответ на: А устройство его буфера так и осталось для меня загадкой (+) отправлено Григорий-II 31 января 2005 г. 18:10

1)
На плате установлен AT89C51RE2+СS8900A (8051 клон).
Использую простой тест на базе IPX. Это практически уровень
Ethernet пакетов.


Сценай #1
Посылаю 3 80-byte пакета и 100 ms пауза между пакетами
Все три пакета приняты :-)
rxStatus = 0x0904
rxLength = 0x0050

rxStatus = 0x0904
rxLength = 0x0050

rxStatus = 0x0904
rxLength = 0x0050

Сценай #2
Посылаю 3 80-byte пакета и без паузы между пакетами
Вс три пакета приняты :-)
rxStatus = 0x0904
rxLength = 0x0050

rxStatus = 0x0904
rxLength = 0x0050

rxStatus = 0x0904
rxLength = 0x0050

Сценай #3
Посылаю 3 298-byte пакета и 100 ms пауза между пакетами
Вс три пакета приняты :-)

rxStatus = 0x0904
rxLength = 0x012A

rxStatus = 0x0904
rxLength = 0x012A

rxStatus = 0x0904
rxLength = 0x012A


Сценарий #4
Посылаю 3 298-byte пакета и без паузы мужду пакетами.
Один пакет потерян :-(
rxStatus = 0x0904
rxLength = 0x012A

!!! RxMiss = 1 !!!
rxStatus = 0x0904
rxLength = 0x012A

Сценарий #5
Посылаю 3 пакета ( 178,182 и 186) и без паузы мужду пакетами.
Один пакет потерян :-(
rxStatus = 0x0904
rxLength = 0x00B2

!!! RxMiss = 1 !!!
rxStatus = 0x0904
rxLength = 0x00B6
Пакет, который был послан последним ( 186 = 0xBA), пропал. Похоже, что Cs8900 не буферирует пакеты. Почему ????

Я использую очень простой код для тестирования
for (;;)
{
if (CS8900_PP_READ(PP_RxEvent) & RX_OK)
CS8900_RECEIVE();

if ( CS8900_PP_READ(0x12C) & 0x0400)
printf ("\n!!! RxMiss = 1 !!!");
}

Сниффер (Ethereal) показывает все правильно. Все пакеты пролетают нормально.

Других пакетов там нет. Это 1.5м кабель.
У меня три платы. Результаты на всех платах идентичны.

Я посылал запрос на Cirrus Logic. Они ответили
The CS8900A has a 4KByte circular buffer that dynamically allocates memory shared between the transmit and receive buffers. So assuming no transmission, the part should be able to accept and keep 40, 100byte packets.

Это означает, что микросхема должна хранить три маленьких пакета без проблем. В реальной жизни это не работает по каким-то причинам.
Я бьюсь с этим уже несколько дней. Безрезультатно :-(

Интересно, есть ли У Вас подобные эффекты на Вашей плате.


2)
Я не использую SKIP, чтобы выбросить ненужный пакет. Я считываю все пакеты. Но ненужные (большие) просто не копирую в буфер процессора
для дальнейшей обработки.



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru