STM Урок 68. LAN. ENC28J60. Часть 1

 

 

 

 

Урок 68

 

Часть 1

 

LAN. ENC28J60

 

 

Сегодня мы подключим контроллер  к локальной сети с помощью модуля на микросхеме ENC28J60.

Так как мы интерфейсом LAN пользовались только используя микроконтроллер AVR, я решил сделать подобный урок и на STM32., причём также с использованием того же модуля, так как именно этот модуль позволяет прочувствовать тот или иной интерфейс LAN изнутри, так как для него у STM готовых библиотек нет.

Данный модуль выглядит вот так

 

image00

 

В качестве микроконтроллера был выбран STM32F103RCT6, на который я ещё уроков не давал, но распаковка среди моих роликов на Youtube имеется. Но так как уроков нет, то проект мы будем создавать заново. Контроллер установлен на отладочной плате, которая выглядит вот так (нажмите на картинку для увеличения изображения)

 

Image01_small

 

Для программирования нашей отладочной платы мы будем использовать программатор ST-Link-V2, на который есть также распаковка, подключенный по интерфейсу SWD. Как подключать данный программатор, также есть в видео по распаковке здесь.

Сердцем данного модуля является одноименная микросхема ENC28J60, которая представляет собой готовое сетевое решение, в котором присутствует и физический и канальный уровень. Обмен данными с контроллером данная микросхема осуществляет посредством шины SPI. Физический уровень у неё организован по стандарту 10BASE-T. То есть максимальная скорость передачи данных — 10 мегабит в секунду, что хотя и мало по сегодняшним современным меркам скоростей передачи данных по сети, но для микроконтроллера вполне хватит, и я думаю это будет удобнее, чем по USB, так как, находясь в сети и имея свой адрес и канальный и сетевой, контроллер может обращаться к любому компьютеру как в локальной сети, так и в глобальной, что сравнительно-таки неплохо.

Внутренняя структура микросхемы представляет собой следующий вид (нажмите на картинку для увеличения изображения)

 

image02_0500

 

Мы видим здесь, что у нас существуют управляющие регистры, в которые мы будем отправлять определённые команды для управления теми или иными действиями и настройками, Также мы видим буфер размером 8 килобайт для получения и отправки данных по сети.

Поставляется микросхема в различных корпусах. На нашем модуле она в корпусе, предназначенном для поверхностного монтажа.

Для подключения модуля имеется следующий разъём

 

image03

 

Все обозначения контактов мы видим справа.

К отладочной плате мы подключим модуль следующим образом

ENC28J60 — STM32F103RCT6
VCC — 3.3V
GND — GND
CS — PA4
RESET —
3.3V
SI — PA7 (MOSI)
SCK — PA5
SO — PA6 (MISO)

 

Кроме всего прочего мы к плате подключим переходник USART, чтобы следить за за данными, которые будут приходить из сети в контроллер.

Регистры в микросхеме организованы следующим образом

 

 

image04

 

Мы видим здесь, что кроме адресов регистров существуют и банки, то есть порядок адресации регистров сегментированный, а начиная с адреса 1Bh обращение к регистрам от банков не зависит, они мапятся на все банки.

Основное назначение регистров можно узнать по их начальным буквам в аббревиатуре

E — Ethernet,

MA — MAC,

MII — MI.

 

Конкретно с некоторыми регистрами мы будем знакомиться уже при написании исходного кода, так как его будет очень много и к тому моменту, когда нам потребуется тот или иной регистр, мы уже забудем его назначение.

 

 

Само собой, чтобы заниматься программированием передачи данных по сети, необходимы знания сетевых уровней, модели OSI и всего, что связано с сетью, так как учить данным вещам я не буду, по этим вопросам есть очень много информации, могу только если что-то посоветовать, так что обращайтесь если что в комментариях. Но некоторые сведения я, конечно, давать буду, не без этого.

Вообще сетевая модель делится на несколько уровней. Основные из них следующие:

1. Прикладной уровень

2. Уровень представления

3. Сеансовый уровень

4. Транспортный уровень

5. Сетевой уровень

6. Канальный уровень

7. Физический уровень

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

Вообщем кратко как-то вот так. Поконкретней с протоколами будем знакомиться по мере их использования.

Ну давайте, чтобы от этой всей теории немного отвлечься, создадим наш проект.

Для этого запустим генератор проектов Cube MX создадим новый проект и выберем там наш контроллер (нажмите на картинку для увеличения изображения)

 

Image05_500

 

Включим SWD

 

Image08

 

Затем подключим кварцевый резонатор

 

Image07

 

Clock Configuration настроим следующим образом

 

 

Image09_0500

 

Вернёмся в "Pinout", включим там SPI

 

Image10

 

Также включим USART

 

Image11

 

Ещё включим на выход ножки портов PC13 и PA4, так как к перовой подключен красный светодиод, а ко второй мы подключи Chip Select нашего SPI

 

Image12

 

Идём в Configuration, первым делом включим на обе ножки портов, задействованные выше скорость Medium

 

Image13

 

Для SPI настроим следующие параметры

 

Image14

 

А USART мы настроим следующим образом

 

Image15

 

На всякий случай включим прерывания, лишним не будет

 

Image16

 

Сохраним проект для Keil5, а назовём его по имени нашей используемой микросхемы незатейливо — ENC28J60.

Сгенерируем проект для Keil, запустим его, настроим программатор на autoreset и пропробуем проект собрать.

Соединим все наши модули, подключив их согласно распиновке в Cube MX , и посмотрим, что у нас получилось (белый провод от USART можно не подключать, он и так нормально питается)

 

Image17_0500

 

То есть USART у нас подключен следующим образом:

 

FDI — STM32F103RCT6

GND — GND

RX — A9

TX —  A10

 

Ножку RESET модуля ENC28J60 желательно подключить к 3.3в через резистор 10 кОм.

 

В следующей части нашего урока мы добавим несколько макросов и функций по работе с микросхемой ENC28J60, а также немного поработаем над изучением технической документации.

 

Предыдущий урок Программирование МК STM32 Следующая часть

 

 

Техническая документация:

Документация на микросхему ENC28J60

Перечень ошибок ENC28J60 (Errata)

 

 

Отладочную плату можно приобрести здесь STM32F103C8T6

Ethernet LAN Сетевой Модуль можно купить здесь ENC28J60 Ethernet LAN

Переходник USB to TTL можно приобрести здесь USB to TTL ftdi ft232rl

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM LAN. ENC28J60

 

3 комментария на “STM Урок 68. LAN. ENC28J60. Часть 1
  1. Евгений:

    RESET лучше подключить к ноге R — и сброс получите при нажатии не кнопку RESET платы, и подтяжку к 3.3В через резистор на отладочной плате.

  2. Евгений:

    STM32F103RCT6 имеет форм-фактор LQFP64, на Вашей плате установлен STM32F103C8T6 (собственно, его Вы и выбираете в CubeMX). Поправьте в описании.

  3. Иван:

    Здравствуйте. Только начинаю изучать контроллеры. В частности. работу с ENC28J60. Возможно ли сделать обмен данными между двумя контроллерами по сети без использования ПК. И какой ваш урок лучше всего для этого посмотреть. Спасибо.

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

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

*