Много времени потратил. W5100 в режиме сервера работает, в режиме клиента нет.
W5100, SPI. На компьютере поднял сервер TCP и ожидаю соединения на порту 10301. ip адрес компьютера 169.254.194.110
Код инициализации w5100 и открытие сокета
[code] //делаем сброс аппаратный W5100
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_7, 0);
Task_sleep(100);
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_7, GPIO_PIN_7);
Task_sleep(500);
//софтварный сброс;
writeW5100(W5100, (uint8_t)W51_MR_RST, W51_MR);
Task_sleep(3000);
// writeByte(spi, 0, 0x10); //запретить пинг
writeW5100(W5100, (uint32_t)0x01020304, W51_GAR); //
writeW5100(W5100, (uint16_t)0x2710, W51_RTR); //пишим Retry Time-value Register 1 секунда
writeW5100(W5100, (uint8_t)10, W51_RCR); //пишим Retry Count Register 10 попыток
uint8_t array[100] =
{ 0x00, 0x22, 0x20, 0x13, 0xd9, 0x7b };
writeW5100(W5100, array, 6, W51_SHAR); //запишим MAC адрес
writeW5100(W5100, (uint32_t)0xffffff00, W51_SUBR); //пишим маску сети 255, 255, 255, 0
writeW5100(W5100, 0xc0fec205, W51_SIPR); //пишим ip свой 169.254.194.5
//
writeW5100(W5100, (uint16_t)0x5555, W51_RMSR); //инициализация памяти, всем по 2 кб
writeW5100(W5100, (uint8_t)W51_PROTOKOL_TCP, W51_S1_MR); //S1_MR set TCP
writeW5100(W5100, (uint16_t)0x283d, W51_S1_DPORT); //порт 10301 на сокете 1 для датчика скорости вращения антенны
writeW5100(W5100, (uint16_t)48000, W51_S1_PORT); //порт 48000
uint8_t array4[4] = { 169, 254, 194, 110 };
writeW5100(W5100, array4, 4, W51_S1_DIPR);
uint8_t byte;
writeW5100(W5100, (uint8_t)W51_CR_OPEN, W51_S1_CR);
for(int i = 0; i < 10; i++)
{
readW5100(W5100, array, 1, W51_S1_SR);
Task_sleep(1000);
if(array[0] == W51_SR_SOCK_INIT)
break;
}
writeW5100(W5100, (uint32_t)0, W51_SUBR);//сброс маски сети в 0
readW5100(W5100, &byte, 1, W51_S1_SR);
writeW5100(W5100, (uint8_t)W51_CR_CONNECT, W51_S1_CR);
while(1)
{
readW5100(W5100, &byte, 1, W51_S1_CR);
if(byte == 0)
break;
}
writeW5100(W5100, (uint32_t)0xffffff00, W51_SUBR);//восстановление маски 255.255.255.0
readW5100(W5100, array, 1, W51_S1_IR);
readW5100(W5100, &byte, 1, W51_S1_SR);[/code]
С таким кодом не могу соединиться с сервером. Запустил на компьютере wireshark и смотрю лог. Снимок 1.
после подачи команды connect, регистр S1_CR сбрасывается в 0, а регистр статуса S1_SR становитсья 0х15. Через какое-то время регистр S1_SR становиться 0, а регистр прерывания S1_IR становиться 0х08 (таймаут)
Может что с сервером не так? Вместо w5100 подключил ноутбук и с помощью программы TCP Port Toolkit подключаюсь к серверу. Соединение нормально устанавливается. Посмотрел лог в wireshark - Снимок 2
Почему w5100 не может установить соединение с сервером?