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!
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
But in general, when chip responds with garbage, there’re two things to look into:
- power quality - 3v3 and 1v8;
- proper reset timing.
Евгений здравствуйте!
Сомнения по поводу скорости возникли, когда я увидел эту запись в даташите - там так и написано что скорость SPI гарантируется от 33 до 80. А скорость которую даёт микроконтроллер - самая быстрая F_osc/2. В моём случае порядка 7 МГц.
По поводу резета - в программе выдерживается необходимая длительность сигнал Резет - 1 мс, после него ещё 500 мкс.
То что вы написали про питание - я подаю 5 вольт. Стабилизатор их приводит к 3.3 вольтам. Тут проблем нет. Немного не ясно, что вы имели ввиду говоря о 1.8 вольтах.
Надеюсь на вашу помощь
Александр
Я понял, вы не разбираетесь в схемотехнике W5500.
В даташите написано -
Symbol Description Min Max Units
FSCK SCK Clock Frequency 80/33.34 MHz
То есть минимум не определен. Если плата уже готовая и вы пользуетесь платой как пользователь, и мы подразумеваем, что она не дефектная, то получается, что что-то действительно не то с протоколом SPI. Поэтому я предложил его потрассировать на самой минимальной скорости, то есть 1 Гц. Можно 0.5 Гц, чтобы успеть записать показания на линиях. Если убедитесь, что доступ по SPI производится правильно, тогда плата под вопросом - попробуйте взять другую (если есть). Вы умеете программировать SPI? Это немного нетривиальная задача.
Каюсь - я проглядел что 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 Гц. Достичь меньшего можно только используя встроенные источники тактирования МК, что я бы делать не хотел