Подключение микроконтроллера к локальной сети
Локальная сеть — вещь прикольная и интересная. Место обитания каждого гика, включая его самого, опутано витой парой сверху донизу. Почему бы не использовать всё это на пользу дела?
Тем более, существует микросхема, позволяющая микроконтроллеру прекрасно чувствовать себя в сети Ethernet. А именно, ENC28J60, разработка вражеской компании Microchip. Об её использовании мы и поговорим.
Вообще-то, Ethernet — достаточно обширная тема. В один пост явно не поместится. Так что частей будет несколько.
Эта первая часть, и как обычно, — вводная и обзорная.
С точки зрения микроконтроллера, локальная сеть — лишь ещё один интерфейс «наружу». Зачем использовать именно его, а не простейший RS-232, скажем?
Всё это открывает возможности для создания множества прикольных и необычных девайсов.
Конечно, есть и недостатки — для работы с сетью нужен контроллер с обвязкой. Что несколько повышает стоимость конечного девайса.
Интересно? Поехали! :)
Стоит сразу сказать что здесь подразумевается под Ethernet и что это есть на самом деле.
Ethernet — группа стандартов IEEE 802.3, описывающая различные технологии локальных сетей. В этих стандартах определён общий канальный уровень и набор технологий физического уровня (использующих для передачи данных оптоволокно, витую пару, коаксиал, с разными скоростями, etc.).
Здесь же под Ethernet будет подразумеваться конкретный стандарт IEEE 802.3i, который и поддерживается ENC28J60. В этом стандарте физический уровень — это 10BASE-T, 10 мбит/с по витой паре (Twisted pair).
Вот, в общем виде, структурная схема девайса:

Здесь вроде-бы всё просто. ENC28J60 содержит в себе физический уровень (PHY) и канальный уровень (MAC) Ethernet. Микроконтроллеру остаётся только подтаскивать пакеты для отправки и забирать принятые через SPI.
В прошивке микроконтроллера реализован простенький IP-стек, позволяющий прикладной задаче общаться с задачами на других системах с помощью стандартных протоколов.
Более подробно обо всём этом будет в следующих частях.
А что это за уровни, о которых я всё говорю? Если ты знаешь, эту часть можно пропустить.
Модель OSI — полезная вещь для понимания того, как работает сеть. Здесь о ней очень кратенько.
Данная модель разбивает коммуникационную систему на простые части, называемые уровнями. Каждый уровень обслуживает следующий (верхний) и обслуживается предыдущим (нижним) — вертикальные связи. Особенности функционирования каждого уровня скрыты от других уровней.
Взаимодействует две системы, соответственно есть и по два экземпляра каждого уровня. На каждом уровне используются свои протоколы (горизонтальные связи).

Всего есть 7 уровней модели OSI.

У нас будет только 5 уровней.
У нас это 10BASE-T. Физический уровень реализован в ENC28J60. Сюда входит витая пара и всё, что нужно для передачи данных по ней (драйверы, трансформаторы).
Канальный уровень Ethenet (MAC) тоже реализован в ENC28J60. Канальный уровень отвечает за передачу Ethernet-фреймов между узлами локальной сети (адресацию, проверку контрольной суммы, разрешение коллизий, etc.).
Проще говоря, канальный уровень — это то, что позволяет посылать фреймы другим узлам локальной сети и принимать фреймы от них.
Также к канальному уровню относится протокол ARP, который служит для преобразовния IP-адресов в MAC-адреса.
Сетевой уровень отвечает за передачу пакетов. У нас это IP. IP-пакет спокойно может пройти через несколько разных сетей с различными технологиями физического и канального уровня.
Проще говоря, сетевой уровень — это то, что позволяет отправлять пакеты любым узлам и принимать пакеты от любых узлов.
В нашем маленьком IP-стеке сетевой уровень будет очень простой. Скажем, отправка пакета будет сводиться к добавлению к блоку данных IP-заголовка и отрпавке в виде фрейма канального уровня на определённый MAC-адрес.
Транспортный уровень отвечает за связь узлов. Скажем, приложение хочет отправит данные другому узлу. Транспортный уровень представляет эти данные в виде пакета сетевого уровня (или пакетов) и отправляет. Если используется протокол с установкой соединения, транспортный уровень занимается также установкой и контролем соединения. UDP и TCP — протоколы транспортного уровня.
А тут может быть всё, что нам вздумается. Это то, ради чего всё затевалось. Та самая задача, обменивающаяся с внешним миром данными по какому-то своему или стандартному протоколу.
Вприницпе, пока это всё. В следующей части будет ближе к делу. Будем писать библиотеку для работы с ENC28J60. :)

Все статьи цикла
Тем более, существует микросхема, позволяющая микроконтроллеру прекрасно чувствовать себя в сети Ethernet. А именно, ENC28J60, разработка вражеской компании Microchip. Об её использовании мы и поговорим.
Вообще-то, Ethernet — достаточно обширная тема. В один пост явно не поместится. Так что частей будет несколько.
Эта первая часть, и как обычно, — вводная и обзорная.
А зачем это нужно?
С точки зрения микроконтроллера, локальная сеть — лишь ещё один интерфейс «наружу». Зачем использовать именно его, а не простейший RS-232, скажем?
- Это удобно. Любая нормальная операционная система имеет нативную поддержку сети и API для работы с ней. Много стандартного софта умеет работать в сети и сможет обращаться к нашему девайсику.
- Девайс будет доступен как минимум с любого компа, подключенного к локальной сети, а максимум — вообще с любого компа, имеющего доступ в интернет. В том числе, по беспроводному соединению — к девайсу можно будет обращаться, например, с ноутбука, не привязывая себя к девайсу проводами.
- Девайс сам сможет выходить в интернет и получать различную информацию — от точного времени до прогноза погоды и последних новостей (хм, ну конечно если памяти у МК хватит на всё это).
- Это быстро. 10 мбит/с — более чем прилично для микроконтроллерного девайсика.
- Девайс больше не привязан к компу проводами — максимальные 100 м для витой пары не идут ни в какое сравнение с «классическими» интерфейсами.
- Это просто. Нет, правда! IP-стек мне кажется куда проще и логичнее чем, скажем, USB.
Всё это открывает возможности для создания множества прикольных и необычных девайсов.
Конечно, есть и недостатки — для работы с сетью нужен контроллер с обвязкой. Что несколько повышает стоимость конечного девайса.
Интересно? Поехали! :)
Disclaimer
Стоит сразу сказать что здесь подразумевается под Ethernet и что это есть на самом деле.
Ethernet — группа стандартов IEEE 802.3, описывающая различные технологии локальных сетей. В этих стандартах определён общий канальный уровень и набор технологий физического уровня (использующих для передачи данных оптоволокно, витую пару, коаксиал, с разными скоростями, etc.).
Здесь же под Ethernet будет подразумеваться конкретный стандарт IEEE 802.3i, который и поддерживается ENC28J60. В этом стандарте физический уровень — это 10BASE-T, 10 мбит/с по витой паре (Twisted pair).
The Plan
Вот, в общем виде, структурная схема девайса:

Здесь вроде-бы всё просто. ENC28J60 содержит в себе физический уровень (PHY) и канальный уровень (MAC) Ethernet. Микроконтроллеру остаётся только подтаскивать пакеты для отправки и забирать принятые через SPI.
В прошивке микроконтроллера реализован простенький IP-стек, позволяющий прикладной задаче общаться с задачами на других системах с помощью стандартных протоколов.
Более подробно обо всём этом будет в следующих частях.
Модель OSI
А что это за уровни, о которых я всё говорю? Если ты знаешь, эту часть можно пропустить.
Модель OSI — полезная вещь для понимания того, как работает сеть. Здесь о ней очень кратенько.
Данная модель разбивает коммуникационную систему на простые части, называемые уровнями. Каждый уровень обслуживает следующий (верхний) и обслуживается предыдущим (нижним) — вертикальные связи. Особенности функционирования каждого уровня скрыты от других уровней.
Взаимодействует две системы, соответственно есть и по два экземпляра каждого уровня. На каждом уровне используются свои протоколы (горизонтальные связи).

Всего есть 7 уровней модели OSI.

У нас будет только 5 уровней.
Физический уровень
У нас это 10BASE-T. Физический уровень реализован в ENC28J60. Сюда входит витая пара и всё, что нужно для передачи данных по ней (драйверы, трансформаторы).
Канальный уровень
Канальный уровень Ethenet (MAC) тоже реализован в ENC28J60. Канальный уровень отвечает за передачу Ethernet-фреймов между узлами локальной сети (адресацию, проверку контрольной суммы, разрешение коллизий, etc.).
Проще говоря, канальный уровень — это то, что позволяет посылать фреймы другим узлам локальной сети и принимать фреймы от них.
Также к канальному уровню относится протокол ARP, который служит для преобразовния IP-адресов в MAC-адреса.
Сетевой уровень
Сетевой уровень отвечает за передачу пакетов. У нас это IP. IP-пакет спокойно может пройти через несколько разных сетей с различными технологиями физического и канального уровня.
Проще говоря, сетевой уровень — это то, что позволяет отправлять пакеты любым узлам и принимать пакеты от любых узлов.
В нашем маленьком IP-стеке сетевой уровень будет очень простой. Скажем, отправка пакета будет сводиться к добавлению к блоку данных IP-заголовка и отрпавке в виде фрейма канального уровня на определённый MAC-адрес.
Транспортный уровень
Транспортный уровень отвечает за связь узлов. Скажем, приложение хочет отправит данные другому узлу. Транспортный уровень представляет эти данные в виде пакета сетевого уровня (или пакетов) и отправляет. Если используется протокол с установкой соединения, транспортный уровень занимается также установкой и контролем соединения. UDP и TCP — протоколы транспортного уровня.
Прикладной уровень
А тут может быть всё, что нам вздумается. Это то, ради чего всё затевалось. Та самая задача, обменивающаяся с внешним миром данными по какому-то своему или стандартному протоколу.
Вприницпе, пока это всё. В следующей части будет ближе к делу. Будем писать библиотеку для работы с ENC28J60. :)

Все статьи цикла
- Подключение микроконтроллера к локальной сети: Теория
- Подключение микроконтроллера к локальной сети: работаем с ENC28J60
- Подключение микроконтроллера к локальной сети: UDP-сервер
- Подключение микроконтроллера к локальной сети: UDP-клиент
- Подключение микроконтроллера к локальной сети: Широковещательные сообщения и DHCP
- Подключение микроконтроллера к локальной сети: TCP-клиент
- Подключение микроконтроллера к локальной сети: HTTP и CGI
- Подключение микроконтроллера к локальной сети: TCP и HTTP (продолжение)
- Подключение микроконтроллера к локальной сети: HTTP и CGI (заключение)
- Подключение микроконтроллера к локальной сети: тесты производительности и краткое описание API стека
- Подключение микроконтроллера к локальной сети: Заключение
- Веб сервер на Tiny2313. Чисто ради лулзов
- +25
- 27 марта 2011, 22:00
- Lifelover
Очень заманчиво смотрится WIZnet W5100 (у ардуино на ethernet платах применяют), меньше обвязки снаружи (PHY встроен). Одна засада — корпус 80 LQFP :( Но для джедаев лута не помеха… Покруче за решение ENC28J60 от Microchip.
ой это я имел ввиду модуль на W5300
да вот ссылка www.efo.ru/doc/Wiznet/Wiznet.pl?2935
я у них и брал — $41,80 вышло год назад.
да вот ссылка www.efo.ru/doc/Wiznet/Wiznet.pl?2935
я у них и брал — $41,80 вышло год назад.
На многих ARM контроллерах есть MAC уровень. К нему физику прицепить, транс и можно гонять траффик :)
RTL8201 стоит порядка 3 баксов в розницу, транс стоит те же 2-3 бакса, stm32 с ethernet'ом я нашёл(взял первое, что попалось, stm32f107RB) в пределах 20$ за камень в розницу(8-12 баксов оптом). Итого — 25 баксов в худшем случае. Есть решение с физикой на кристалле дешевле? :)
ip-стек — uIP или lwIP.
Как-то так :)
ip-стек — uIP или lwIP.
Как-то так :)
STM32F107RCT6
ARM Cortex M3 MCU 72МГц, 128кб Flash, 48кб ОЗУ, Ethernet, 2x SPI, I2C audio class, 3xUSART, USB OTG, 2xCAN 2,0B, 2xАЦП 16 каналов, 51 I/O
210 руб в розницу
RTL8201CP-VD-LF
Single-Port 10/100M Fast Ethernet PHYceiver
35 рэ
разъем с трансом
тел TJ8P8C роз.в плату TS-50022
90 рэ
= 335 примерно 12 баксов, как то так
ARM Cortex M3 MCU 72МГц, 128кб Flash, 48кб ОЗУ, Ethernet, 2x SPI, I2C audio class, 3xUSART, USB OTG, 2xCAN 2,0B, 2xАЦП 16 каналов, 51 I/O
210 руб в розницу
RTL8201CP-VD-LF
Single-Port 10/100M Fast Ethernet PHYceiver
35 рэ
разъем с трансом
тел TJ8P8C роз.в плату TS-50022
90 рэ
= 335 примерно 12 баксов, как то так
присоединяюсь… тем более что у китайцев сетка в сборе прикуплена…
- CrazyCrazer
- 28 марта 2011, 06:51
- ↓
Комментарии (41)
RSS свернуть / развернуть