Проверяю данную плату на предельных скоростях на своём протоколе, в качестве МК взят Arduino.
Начал наблюдать следующие поведение. Выходной буфер сокета TX переполняется и соответственно мк подвисает, пока буфер не очистится. Очищение всего буфера происходит через определенное время, видимо, по какому-то внутреннему таймеру чипа (~200 мс).
При этом такое поведение наблюдается только тогда, когда работают два микроконтроллера в режиме запись-чтение. При работе мк с компьютером выходной буфер сокета освобождается сразу как сообщение будет послано.
Какое условие должно быть выполнено, чтобы буфер TX освободился? Запись в буфер->запись указателя буфера->отправка сообщения->ожидания подтверждения?
Write в сокет я использую полностью как в родной Wiznet библиотеке.
Read маленько модифицировал - читает в два приёма, правда в один приём тоже самое выходит.
Код: Выделить всё
int16_t recv = w5500.getRXReceivedSize(_sock);
uint16_t ptr = w5500.readSnRX_RD(_sock);
uint8_t sz_msg = 0;
if(recv >= 2) {
uint8_t head[2];
w5500.read_data(_sock, ptr, head, 2);
ptr += 2;
sz_msg = head[1];
message = new char[sz_msg + 1];
w5500.read_data(_sock, ptr, (uint8_t*)message, sz_msg);
ptr += sz_msg;
message[sz_msg] = 0;
w5500.writeSnRX_RD(_sock, ptr);
w5500.execCmdSn(_sock, Sock_RECV);
} //else // здесь пока ничего не сделал, но все сообщения более 2 б, это точно
return sz_msg;


