Ethernet-контроллер W5300. Инициализация. Пинг

Сегодня уже интереснее. Мы с вами попробуем проинициализировать W5300 и пингануть.

Что нам для этого понадобиться:
— плата с W5300 (собственного изготовления или готовая, например WIZ830MJ);
— управляющий модуль (у меня — платка STM32F4-Discovery);
— среда разработки, дебагер, компилятор в зависимости от того, что вы выбрали в качестве управляющего модуля. (У меня – Keil. У них есть бесплатная вресия с ограничением по коду до 32 КБ. Лично мне этого более, чем достаточно.:-)) );
— сниффер. Этот пункт не обязателен, но в дальнейшем он нам понадобиться. Снифер – программка, которая будет показывать нам пакеты в сети. Мне нравится WireShark. Кстати, во время установки WireShark попросит разрешения установить WinPcap. Соглашайтесь. Если WinPcap не попросится на установку, то вам придется его устанавливать отдельно.

Схема

Обращаемся мы к памяти W5300, используя прямую адресацию и 16-битную шину данных. Принципиальную схему рисовать не буду, просто опишу, какие GPIO идут на какие ножки WIZ830MJ.

WIZ830MJ STM32F4-Discovery
Шина адреса ADDR [0:9] GPIOE [0:9]
Шина данных DATA [0:15] GPIOD [0:15]
CS GPIOB 13
RD GPIOB 14
WR GPIOB 15
RES GPIOB 11

Создаем проект в Keil

Опишу, как создать проект в Keil, если вдруг это может вызвать затруднения.

Project -> New uVision Project

Выбираем наш микроконтроллер:

Соглашаемся скопировать стартаповский файл:

В папку проекта копируем папку CMSIS, которая в свою очередь содержит файлы:

Эти файлы можно взять из STM32CubeF4
А файл system_stm32f4xx.c генерируется с помощью екселевского файла STM32F4xx_Clock_Configuration. Качаете, распаковываете и запускаете екселевский файл (UPD на момент написания статьи это был самый простой способ настройки тактирования, сейчас рекомендуется использовать CubeMX генератор кода).
Активизируете макрос, нажав кнопку параметры.

Устанавливаем значение частоты на выходе и на входе, жмем кнопочку Run, в процессе выбираем внешний источник тактирования HSE. Далее жмем Generate и в той же папке, в которой находится екселевский файл обнаруживаем system_stm32f4xx.c, сгенерированный на нашу частотку и на наши коэффициенты делителей.

Добавляем группу CMSIS в наш проект:

В группу CMSIS добавляем сишный файл из папки CMSIS:

Теперь создаем новый файл, при сохранении обзываем его main.c.

Создаем группу main, добавляем в нее только что созданный файл.
Структура проекта теперь должна быть следующей:

Сразу в опциях проекта производим следующие изменения.
Частоту устанавливаем 30 МГц:

Устанавливаем галочку Create HEX, а иначе не сможем прошивать.

Выбираем дебагер ST-Link, Settings -> Debug Port должен быть SW.

Define

Далее уже в программе прописываем адреса регистров ethernet-контроллера, кто-то делает это в хедере, кто-то в основном файле, правильнее конечно в хедере.
В общем, смотрим в даташите на W5300, там на страницах 25 – 44 расписаны адреса регистров. Нам сейчас понадобятся только эти регистры:

Инициализация STM32F407

Функции записи, чтения регистров W5300

В даташите приведена вот такая диаграмма, поясняющая нам процесс записи в регистры W5300:

В соответствии с ней пишем код:

Точно такая же диаграмма дана для чтения из регистров.

Тут я думаю, ничего сложного.

Функция задержки

Инициализация W5300 и сигнал сброса

Каким должен быть по длительности сигнал сброса тоже указано в даташите:

Далее… Записываем MAC-адрес, IP-адрес, маску подсети нашего устройства, IP-адрес основного шлюза:

Компилируем, прошиваем.

Пинг

Пинг пошел и наши ICMP-пакеты тоже!

Список литературы:
1. High-Performance Internet Connectivity Solution W5300. Version 1.2.5. 2008
2. WIZ830MJ Datasheet (Ver. 1.3). 2008
3. Reference manual. STM32F405xx, STM32F407xx, STM32F415xx and STM32F417xx advanced ARM-based 32-bit MCUs. 2011
4. User Manual. STM32F4DISCOVERY. STM32F4 high-performance discovery board. 2012

Прикрепленные файлы:
Архив с папкой проекта
Исходник — main.c

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *