---
title: "SPI connecting problem W5500 Ethernet Shield"
url: "https://maker.wiznet.io/forum/11799"
markdown_url: "https://maker.wiznet.io/forum/11799/md"
type: "Forum topic"
category: "Ethernet Chips"
author: "alexander111122"
created: "2016-04-15T13:38:51+09:00"
last_activity: "2017-05-04T08:38:40+09:00"
language: "en"
views: 1940
replies: 4
source: "WIZnet Makers forum (https://maker.wiznet.io/forum/)"
---

# SPI connecting problem W5500 Ethernet Shield

## Question

Asked by alexander111122 on 2016-04-15 in Ethernet Chips.

Greetings!
I am getting wrong info from Ethernet Shield W5500. In datasheet it is said that the content of VersionR is always 0x04, but I’m getting 0x03. Also I have found in datasheet that the SPI speed varies in the range of 33.3 - 80 MHz. I’m using a board based on ATmega2560 with external crystall oscillator of 14.7456 MHz. Maybe the problem is in the wrong speed? But I have seen an example of using the W5500 ethernet shield with the Seeeduino which has a ATmega328 as a central unit and an external quarz of 16 MHz as a oscillator.
Please help me with this issue! ![:nerd:](https://emoji.discourse-cdn.com/twitter/nerd.png?v=12)

## Replies

### Reply 1 by Eugeny, 2016-04-15

There should be no minimal SPI speed threshold, thus if you think that SPI protocol has some problems just lower its speed down to 1 Hz, attach LEDs to the lines and see which signals are out there ![:slight_smile:](https://emoji.discourse-cdn.com/twitter/slight_smile.png?v=12)
But in general, when chip responds with garbage, there’re two things to look into:

1. power quality - 3v3 and 1v8;

2. proper reset timing.

### Reply 2 by alexander111122, 2016-04-15

Евгений здравствуйте!
Сомнения по поводу скорости возникли, когда я увидел эту запись в даташите - там так и написано что скорость SPI гарантируется от 33 до 80. А скорость которую даёт микроконтроллер - самая быстрая F_osc/2. В моём случае порядка 7 МГц.
По поводу резета - в программе выдерживается необходимая длительность сигнал Резет - 1 мс, после него ещё 500 мкс.
То что вы написали про питание - я подаю 5 вольт. Стабилизатор их приводит к 3.3 вольтам. Тут проблем нет. Немного не ясно, что вы имели ввиду говоря о 1.8 вольтах.
Надеюсь на вашу помощь
Александр

### Reply 3 by Eugeny, 2016-04-15

Я понял, вы не разбираетесь в схемотехнике W5500.
В даташите написано -

`Symbol Description Min Max Units FSCK SCK Clock Frequency 80/33.34 MHz `То есть минимум не определен. Если плата уже готовая и вы пользуетесь платой как пользователь, и мы подразумеваем, что она не дефектная, то получается, что что-то действительно не то с протоколом SPI. Поэтому я предложил его потрассировать на самой минимальной скорости, то есть 1 Гц. Можно 0.5 Гц, чтобы успеть записать показания на линиях. Если убедитесь, что доступ по SPI производится правильно, тогда плата под вопросом - попробуйте взять другую (если есть). Вы умеете программировать SPI? Это немного нетривиальная задача.

### Reply 4 by alexander111122, 2016-04-18

## Каюсь - я проглядел что 80/33 указаны, как максимум, а минимум пуст. Тогда этот вопрос отпадает. Что касается железа - обмен данными по SPI я осуществляю между “заводской” W5500 ethernet shield и своей платой с контроллером ATmega2560. На моей плате реализованы USART и SPI, собственно то что я получаю по SPI - транслирую обратно по USARTу для слежения. Вообщем то для справедливости скажу, что со SPI я встречаюсь второй раз. Базовые SPI функции я скопипастил с даташита. Там инициализация и операции чтения и записи. Я просимулировал инициализацию - всё пишется куда надо. Насчёт скорости я понял вашу идею - попробую проверить таким образом. Обмен данными по СПИ я осуществляю таким образом: MISO на вход MOSI на выход SS на выход SCLK на выход RESET на выход

## SS ставится в 1 SPI настройка: Мастер; Первый бит - старший; Скорость - тактовая частота/4; Интерфейс - вкл.

(далее привожу код)

```
void resetW5500(void)
{
	SPI_port &=~ (1 << Reset_chip);//  генерируем «Сброс» для Ethernet  шилда 
	cpu_delay_ms(1, Fosc); //8000000);
	SPI_port |= (1 << Reset_chip);
	cpu_delay_us(500, Fosc); //8000000);
}

void spi_send(unsigned char data)
{	
	SPDR = data; 	
	
	while(!(SPSR & (1 << SPIF))); //if SPIF is set, than the byte is sent
}

unsigned char spi_read(void)
{
	while(!(SPSR & (1 << SPIF))); //if SPIF is set, than we can read a byte from SPDR
	
	return SPDR;	
}

void init_w5500(void)
{
	unsigned char ctrl = 0;
	unsigned char send_data = 0x80; //RST is 1 - all internal registers will be initialized
	unsigned char received_data[4];
	uint8 temp1;
	cpu_delay_ms(200, Fosc);
	resetW5500();	

	ctrl = 0x01;	// адрес блока - 00000, операция чтения - 0, режим - 1 фиксированный бит; итого: 0b00000001
	SPI_port &=~ (1 << SCS);
	spi_send(0x00);	//старший байт адреса
	spi_send(0x39); //младший байт адреса
	spi_send(ctrl); // команда
	temp1 = spi_read(); // читаем
	SPI_port |= (1 << SCS);
	cpu_delay_ms(1, Fosc);
	
	USART_Transmit(temp1);
}
```

Если вам не сложно - помогите разобраться в чём же дело.

П.С.
Наименьшая частота линии SCLK, которая достижима при моём кварце (14.7456 МГц) - 115200 Гц. Достичь меньшего можно только используя встроенные источники тактирования МК, что я бы делать не хотел ![:slight_smile:](https://emoji.discourse-cdn.com/twitter/slight_smile.png?v=12)

---

Source: https://maker.wiznet.io/forum/11799
