W5500 вопрос

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Встал на лапы
Сообщения: 106
Зарегистрирован: Вс апр 01, 2012 22:15:14

Сообщение vt1980 »

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

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

Не пойму это глюк или фича.
То есть 0xFF воспринимается как отсутствие байта или как служебный байт, или это всё же какой то косяк в программе ?
Реклама
Друг Кота
Сообщения: 9459
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

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

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

Сообщение vt1980 »

Спасибо. При возможности попробую.
Пока что пошёл путём наименьшего сопротивления, решил передавать цифры "буквами" )))
Благо объём передаваемых данных не большой, и нет жёстких требований по формату передачи данных.
Друг Кота
Сообщения: 9459
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

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

Пример передачи для 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:
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 106
Зарегистрирован: Вс апр 01, 2012 22:15:14

Сообщение vt1980 »

[uquote="roman.com",url="/forum/viewtopic.php?p=3976444#p3976444"]передавать цифры "буквами" ?)) это как ? ))[/uquote]
ну как? текстом в формате ascii. по одному байту на цифру.
например для передачи одного байта 0xFF, отправляются три байта 0x32 0x35 0x35, что отображается как текст "255" (для десятеричной системы)

У вас в примере тоже JSON , а я изначально хотел сделать Binary. Но в процессе передумал.
С текстом больше возможностей получается, и текстовые команды более удобоваримы для восприятия.
Реклама
Друг Кота
Сообщения: 9459
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

ясно))
раньше мы тоже так делали...
https://www.radiokot.ru/forum/viewtopic ... start=1348
потом мы от этой идеи отказались.
:tea:
Реклама
Открыл глаза
Сообщения: 40
Зарегистрирован: Ср фев 11, 2015 01:18:12
Откуда: г. Уссурийск

Сообщение kondeg »

roman.com, здравствуйте. Хотел бы попросить у вас помощи в написании w5500_client + atmega (только передача некоторых данных на сервер). Услуга платная. С уважением Константин.
Друг Кота
Сообщения: 9459
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

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

Вернуться в «Периферия»