[an error occurred while processing this directive]
|
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: info@telesys.ru