Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Re: W5500_client+Atmega8_для самых начинающих.

Вт май 31, 2022 20:27:15

tonyk писал(а):192.168.27.100- это сервер;
192.168.27.133- это клиент.

клиент это кто ?))
W5500 - 192.168.27.133 ?

сервер это кто ?))
W5500 - 192.168.27.100 ?


ну допустим... W5500 - 192.168.27.100 в режиме сервер...
1.jpg
(61.06 KiB) Скачиваний: 57

сам модуль W5500 не будет ничего резать... без команды из вне))
библиотеки смотреть надо... или кто там управляет модулем W5500...

Re: W5500_client+Atmega8_для самых начинающих.

Вт май 31, 2022 20:42:29

сам модуль W5500 не будет ничего резать... без команды из вне))
библиотеки смотреть надо... или кто там управляет модулем W5500...

Я прошёл в отладчике Визнетовскую библиотеку и нигде не встретил никаких попыток повторной отправки: загрузили в 5500 3 управляющих байта и 10 байт посылки- и всё, вернули мне 10. Я никаких явных команд отправки не делаю. Для чистоты эксперимента отключил все задачи, кроме одной.

Re: W5500_client+Atmega8_для самых начинающих.

Вт май 31, 2022 22:12:14

я повыкидывал все библиотеки (включая визнетовскую) и пишу всё в ручную...


//TX_Socket_2:
/////////////////////////////////////////////////////////////////////////////////////////////
// Читаем начальный адрес для записи данных Socket_2:
PORTB.6=0; // SS W5500
tx=0x00; SPI(); tx=0x24; SPI(); tx=0x48; SPI(); // Address + Control Registers
tx=0x00; SPI(); x1 = rx; // Data -Sn_TX_WR0 -начальный адрес для записи данных
tx=0x00; SPI(); x2 = rx; // Data -Sn_TX_WR1 -начальный адрес для записи данных
PORTB.6=1; // SS W5500
// начальный адрес для записи данных:
add = x1; add = (add<<8)|x2; // 0x0000
/////////////////////////////////////////////////////////////////////////////////////////////
// начальный адрес для записи данных:
x1 = (add>>8);
x2 = add;
// Пишем данные Socket_2 с начального адреса:
PORTB.6=0; // SS W5500
tx=x1; SPI(); tx=x2; SPI(); tx=0x54; SPI(); // Address + Control Registers

// сброс len
len = 0; // 0x0000


////////////////////////////////////////// Data TX W5500 HTTP (например отправим текстовую страницу для браузера):
//GET / HTTP/1.1
//unsigned char bufer_TX_W5500_HTTP[]={
//"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n>|"
//};
//bufer_TX_W5500_HTTP
for (x=0; bufer_TX_W5500_HTTP[x] != '|' ; x++) {
tx=bufer_TX_W5500_HTTP[x]; SPI(); len++;
};
////////////////////////////////////////// GET /1 HTTP/1.1
if (bufer_RX_W5500[5] == '1') {
////////////////////////////////////////// Data TX W5500:
for (x=0; x<30 ; x++) {
//////////////////////////////////////// перенос строка \r\n
tx='<'; SPI(); len++;
tx='b'; SPI(); len++;
tx='r'; SPI(); len++;
tx='>'; SPI(); len++;
//////////////////////////////////////// счёт x > HEX > DEC > 000
bi = x;
z=0; while (bi>99) {z++; bi=bi-100;}; // LED(z+48);
tx=z+48; SPI(); len++; // HEX
z=0; while (bi>9) {z++; bi=bi-10;}; // LED(z+48);
tx=z+48; SPI(); len++; // HEX
z=0; while (bi) {z++; bi=bi-1;}; // LED(z+48);
tx=z+48; SPI(); len++; // HEX
//////////////////////////////////////// пробел
tx=' '; SPI(); len++;
//////////////////////////////////////// RX_int[x] > HEX > DEC > 000
bi = RX_int[x];
z=0; while (bi>99) {z++; bi=bi-100;}; // LED(z+48);
tx=z+48; SPI(); len++; // HEX
z=0; while (bi>9) {z++; bi=bi-10;}; // LED(z+48);
tx=z+48; SPI(); len++; // HEX
z=0; while (bi) {z++; bi=bi-1;}; // LED(z+48);
tx=z+48; SPI(); len++; // HEX
/////////////////////////////////////////
};
};
/////////////////////////////////////////// Data END



PORTB.6=1; // SS W5500
/////////////////////////////////////////////////////////////////////////////////////////////
// Пишем указатель TX Socket_2 до увеличенного значения:
add = add + len; // add - конечный адрес переданных данных // 0x0000
// len - размер переданных данных // 0x0000
x1 = (add>>8);
x2 = add;
PORTB.6=0; // SS W5500
tx=0x00; SPI(); tx=0x24; SPI(); tx=0x4C; SPI(); // Address + Control Registers
tx=x1; SPI(); // Data -Sn_TX_WR0 -конечный адрес передачи данных
tx=x2; SPI(); // Data -Sn_TX_WR1 -конечный адрес передачи данных
PORTB.6=1; // SS W5500
/////////////////////////////////////////////////////////////////////////////////////////////
// Пишем команду передачи Socket_2:
PORTB.6=0; // SS W5500
tx=0x00; SPI(); tx=0x01; SPI(); tx=0x4C; SPI(); // Address + Control Registers
tx=0x20; SPI(); // Data -0x20 (SEND)
PORTB.6=1; // SS W5500
/////////////////////////////////////////////////////////////////////////////////////////////
//if (Sn_CR == 0x00); // По окончанию передачи регистр -Sn_CR будет = 0x00.


//Передача закончена.

сколько байт я указал W5500 передать (len), ровно столько байт W5500 и передаёт. Всё одним пакетом.
по другому и быть не может. По другому W5500 не работает.

остальные настройки (тайминги повторной передачи и т.д. не трогаем).

вывод:
надо повыкидывать нафиг все библиотеки))
:tea:

Re: W5500_client+Atmega8_для самых начинающих.

Вт май 31, 2022 23:49:20

Так ведь непонятка в том, что 5500, нормально передав посылку, с какого-то перепуга начинает ещё несколько раз отправлять её по частям, хотя никто его об этом, вроде, не просит.

Re: W5500_client+Atmega8_для самых начинающих.

Ср июн 01, 2022 00:29:57

5500 не может ещё несколько раз отправлять одну посылку по частям...

если сбить настройки тайминга то будет 5500 тупо будет отправлять одну и ту же посылку несколько раз... но не по частя а целиком.

5500 может отправлять по частям если мы сами попросим 5500 отправлять посылку по част... для этого достаточно указать дляину посылки...

1.2.3.4.5.6.7.8.9

len = 3
1.2.3 >>
len = 3
4.5.6>>
len = 3
7.8.9 >>

или сделать посылку больше TCP пакета...

например для UDP... если длина пакета больше 1472 байта... например 0...1999 то 5500 будет отправлять по частям...
первый пакет UDP - 0...1471
второй пакет UDP - 1472...1999

по другому никак))

с другими вариантами не сталкивался))
:tea:

Re: W5500_client+Atmega8_для самых начинающих.

Ср июн 01, 2022 06:16:34

roman.com писал(а):сам модуль W5500 не будет ничего резать... без команды из вне))
библиотеки смотреть надо... или кто там управляет модулем W5500...

Я прошёл отладчиком штатную библиотеку ioLibrary- там только один раз записала.
Посмотрю осциллографом, может, откуда-то из недр проекта кто-то дёргает ноги.
Ответить