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

W5500 вопрос

Пт фев 05, 2021 16:39:16

Осваиваю работу с модулем на микросхеме W5500.

Скачал драйвер у официалов, почитал примеры, вроде запустил, открыл соккет, данные принимаются отправляются.
Но столкнулся с тем, что если в передаваемых данных содержатся байты 0xFF, то функция recv() не правильно считает количество переданных байт.

Не пойму это глюк или фича.
То есть 0xFF воспринимается как отсутствие байта или как служебный байт, или это всё же какой то косяк в программе ?

Re: W5500 вопрос

Сб фев 06, 2021 23:40:14

// Читаем начальный адрес (начальный адрес буфер FIFO), для записи данных в Socket:
...
// Пишем данные в Socket с начального адреса (начальный адрес буфер FIFO):
...
// Пишем указатель Socket до увеличенного значения (конечный адрес буфер FIFO):
...
// Пишем команду передачи Socket:

Сколько мы указали W5500 передать данных (начальный и конечный адрес буфера FIFO), столько W5500 и передаст данных.
И не важно что там за данные. Все 0xFF или 0x00. Для W5500 это абсолютно все равно.
:tea:

Re: W5500 вопрос

Вс фев 07, 2021 01:23:25

Спасибо. При возможности попробую.
Пока что пошёл путём наименьшего сопротивления, решил передавать цифры "буквами" )))
Благо объём передаваемых данных не большой, и нет жёстких требований по формату передачи данных.

Re: W5500 вопрос

Вс фев 07, 2021 17:06:00

передавать цифры "буквами" ?)) это как ? ))

Пример передачи для W5500:

//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

// сброс размер Data TX
len = 0; // 0x0000

////////////////////////////////////////// Data TX W5500 HTTP:
//unsigned char bufer_TX_W5500_HTTP[]={
//"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n>12345678|"
//};
for (x=0; bufer_TX_W5500_HTTP[x] != '|' ; x++) {
tx=bufer_TX_W5500_HTTP[x]; SPI(); len++;
};
/////////////////////////////////////////// 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
/////////////////////////////////////////////////////////////////////////////////////////////
:tea:

Re: W5500 вопрос

Вс фев 07, 2021 19:54:25

передавать цифры "буквами" ?)) это как ? ))

ну как? текстом в формате ascii. по одному байту на цифру.
например для передачи одного байта 0xFF, отправляются три байта 0x32 0x35 0x35, что отображается как текст "255" (для десятеричной системы)

У вас в примере тоже JSON , а я изначально хотел сделать Binary. Но в процессе передумал.
С текстом больше возможностей получается, и текстовые команды более удобоваримы для восприятия.

Re: W5500 вопрос

Вс фев 07, 2021 21:36:52

ясно))
раньше мы тоже так делали...
https://www.radiokot.ru/forum/viewtopic ... start=1348
потом мы от этой идеи отказались.
:tea:

Прошу помощи в w5500

Вт июл 06, 2021 08:56:22

roman.com, здравствуйте. Хотел бы попросить у вас помощи в написании w5500_client + atmega (только передача некоторых данных на сервер). Услуга платная. С уважением Константин.

Re: W5500 вопрос

Вт июл 06, 2021 21:55:25

Здрасти)
Денег не беру ! Заказы тоже ))
Тут сайт радиолюбителей !
Тут всё делается чисто на голом энтузиазизме )) Или просто ради интереса)) Как Вам будет угодно))
Что знаю расскажу и помогу (бесплатно).
:tea:
Из готовых: w5500_server + atmega <> ПК_server, протокол UDP, технология P2P.
Просто, дёшево, надёжно, быстро.
:tea:
Ответить