Следующие несколько уроков будут посвящены организации сети Ethernet. В этом уроке я изложу минимум информации, необходимой для практической работы с сетью. Немного расскажу об Ethernet модуле ENC28J60 и приведу схему подключения его к плате Ардуино.
Предыдущий урок Список уроков Следующий урок
Локальная сеть Ethernet.
Ethernet – самый распространенный в мире сетевой интерфейс. Когда говорят об объединении компьютеров в локальную сеть, как правило, имеют в виду именно его. Ethernet контроллер стал штатным устройством для каждого компьютера.
Первый вариант стандарта Ethernet появился еще в 70х годах. Первоначально средой передачи был коаксиальный кабель, топология сети – шина, скорость передачи 10 мегабит/сек. Со временем появилось множество разновидностей Ethernet со скоростью передачи до 100 гигабит/сек, изменилась архитектура сети, стала другой среда передачи. Об этом существует много подробной информации: протоколы, форматы данных, алгоритмы обмена и т.п. Я буду рассказывать о сети Ethernet чисто с практической стороны.
Нам интересны стандарты Ethernet (10 Мбит/сек) и Fast Ethernet (100 Мбит/сек). Они совместимы и отличаются только скоростью передачи данных. Для подключения к сети плат Ардуино мы будем использовать контроллеры первого стандарта (10 Мбит/сек), а штатные сетевые контроллеры компьютеров поддерживают второй стандарт (100 Мбит/сек). Но это не помешает подключить компьютер к той же сети. Стандарты обозначаются соответственно 10BASE-T и 100BASE-TX.
Топология сети.
Два Ethernet устройства могут быть соединены между собой непосредственно. Никакие дополнительные блоки не требуются, достаточно одного кабеля.
Если используется более двух устройств, то соединение происходит по радиальной топологии с помощью хабов (HUB).
Хаб или сетевой концентратор - это электронный прибор для соединения нескольких сетевых устройств в один сегмент сети. Он содержит несколько портов ввода/вывода.
По сути это повторитель. Все сигналы, которые подаются на один из его портов, повторяются на остальных. Несмотря на то, что физически топология сети выглядит как радиальная, логически с использованием хабов она превращается в “общую шину”. Любые пакеты данных в сети попадают на все сетевые устройства, в том числе и на устройства, которым они не предназначены. Благодаря этому возможны конфликты данных, увеличивается нагрузка на сеть. В настоящее время хабы практически вытеснены более совершенными устройствами - сетевыми коммутаторами.
Хабы можно соединять между собой, но только в древовидные структуры.
При этом недостатки, связанные с логической топологией ”общая шина” усугубляются за счет увеличения количества сетевых устройств.
Гораздо больше возможностей имеет сеть, созданная на базе коммутаторов (switch).
Топология сети выглядит, так же, как и сеть, созданная с помощью хабов. Но в отличие от последней, топология сети остается радиальной не только на физическом, но и на логическом уровне.
Коммутатор это прибор для соединения нескольких устройств сети в пределах одного или нескольких сегментов.
Подобно хабу коммутатор имеет несколько портов ввода/вывода. Но в отличие от хаба коммутатор передает пакеты данных не всем подключенным к нему устройствам, а только непосредственно получателю. Благодаря этому увеличивается производительность сети, повышается надежность.
- Хаб - это “тупой” аппаратный повторитель сигналов.
- Коммутатор – интеллектуальное устройство, которое анализирует заголовки пакетов и передает данные только на нужные порты.
Обычно сетевой коммутатор поддерживает различные скорости передачи данных одновременно.
К портам коммутаторов могут быть подключены другие коммутаторы или хабы. Это позволяет почти бесконечно расширять сеть.
Роутер или маршрутизатор – это сетевой шлюз, устройство для передачи пакетов между различными сетями. Как правило, используется для подключения к глобальной сети Интернет.
Большинство роутеров также выполняют функции сетевых коммутаторов. В этом случае можно обойтись без сетевого коммутатора.
Среда передачи данных Ethernet (кабель).
В качестве среды передачи нужные нам стандарты требуют применения кабеля категории 3 или категории 5. Используются только две неэкранированные витые пары (4 провода).
Одна витая пара предназначена для передачи данных, другая для приема.
- Волновое сопротивление линий - 100 Ом.
Кабель обозначается UTP - Unshielded twisted pair (неэкранированная витая пара). Часто на нем написано ”ETHERNET LAN CABLE”.
Стандартный кабель содержит 4 витые пары.
Мы будем использовать только две из них.
Для подключения к портам Ethernet используются 8 контактные разъемы RJ-45.
Есть два варианта распиновки разъемов: T568A и T568B. Часто просто называются варианты A и B.
Распиновка T568A.
Номер контакта | Назначение сигнала |
1 | TX+ |
2 | TX- |
3 | RX+ |
6 | RX- |
Распиновка T568B.
Номер контакта | Назначение сигнала |
1 | RX+ |
2 | RX- |
3 | TX+ |
6 | TX- |
- На сетевой карте компьютера и Ethernet модуле Ардуино применяется вариант A.
- Порты ввода/вывода коммутатора или роутера используют вариант B.
Понятно, что выходные сигналы одного устройства должны подключаться к входам другого, и наоборот. Поэтому существует 2 варианта кабелей: прямой и перекрестный. Прямой используется для соединения между устройствами с разъемами типов A и B, а перекрестный – для соединения портов с одинаковой распиновкой.
Для нас это означает:
- если мы будем подключать плату Ардуино к материнской плате компьютера или другой плате Ардуино, то необходимо использовать перекрестный кабель;
- если плата Ардуино подключается к коммутатору или роутеру – кабель должен быть прямым.
Прямой кабель предполагает, что соединяются контакты с одинаковыми номерами. Соответствие сигналов вход – выходу обеспечивается распиновкой разъемов сетевых портов.
В перекрестном кабеле провода соединяются таким образом, чтобы у связанных кабелем портов входные сигналы были подключены к выходам, а выходные к входам.
На рисунках показаны общепринятые цвета жил кабеля. Лучше их придерживаться.
- Максимальная длина сегмента кабеля – 100 м.
В сетевом интерфейсе Ethernet существует полная гальваническая развязка каждого устройства от среды передачи (кабеля). Развязка осуществляется за счет применения импульсных трансформаторов.
Это значительно повышает помехозащищенность сети и обеспечивает электрическую безопасность сетевых устройств.
Модуль ENC28J60.
Платы Ардуино будем подключать к сети Ethernet с помощью модуля ENC28J60. Физически он представляет собой плату размерами 51 x 18 мм.
Это самый дешевый сетевой Ethernet контроллер. По моей партнерской ссылке на момент написания статья его цена составляет всего 250 руб.
Моя цель не сделать обзор возможностей и технических характеристик модуля. Возможно, я напишу отдельную статью о нем в рубрике ”Электронные компоненты”. А сейчас я приведу информацию необходимую для работы модуля совместно с платами Ардуино.
Модуль выполнен на базе микросхемы ENC28J60 фирмы Microchip. Практически это микросхема ENC28J60 в стандартном включении.
Техническую информацию фирмы-производителя можно посмотреть по этой ссылке ENC28J60.pdf.
Вот принципиальная схема модуля.
Основные характеристики модуля ENC28J60.
- Совместимость с Ethernet сетями 10/100/1000 Base-T. Скорость передачи данных 10 мбит/сек, реализация TCP/IP стека.
- Интерфейс связи с микроконтроллером – SPI, частота до 20 мГц.
- Напряжение питания 3,1 – 3,6 В. Типовое 3,3 В.
- Интерфейсные входы модуля позволяют непосредственное подключение к сигналам с 5 вольтовыми уровнями. Максимально-допустимое напряжение на входах интерфейса SPI - 6 В. В половине статей о подключении ENC28J60 к Ардуино написано, что необходимо подключать входные сигналы через согласующие резисторные делители. Это не так. Сомневающееся могут посмотреть документацию на микросхему ENC28J60.
- Ток потребления от источника питания 3,3 В:
- в момент передачи может достигать 180 мА;
- в активном состоянии, но без передачи 120 мА;
- в режиме ожидания (сигнал CS в неактивном уровне) не более 2 мА.
- В модуле обеспечивается гальваническая развязка от линии связи.
Это характеристики, которые я решил выделить. Главное:
- для питания модуля необходимо использовать источник напряжением 3,3 В и выходным током до 180 мА;
- выводы интерфейса модуля допускается подключать к 5 вольтовым сигналам.
Интерфейс связи с микроконтроллером.
К микроконтроллеру модуль подключается через 10 контактный разъем типа PLHD, расположенный на печатной плате устройства.
Назначение контактов (распиновка) модуля ENC28J60.
Контакт | Обозначение | Направление | Назначение |
1 | CLK | выход | Выход тактового сигнала |
2 | INT | выход | Сигнал прерывания |
3 | WOL | - | Зарезервирован |
4 | SO | выход | Сигнал SO интерфейса SPI |
5 | SI | вход | Сигнал SI интерфейса SPI |
6 | SCK | вход | Сигнал SCK интерфейса SPI |
7 | CS | вход | Сигнал CS интерфейса SPI (выбор контроллера) |
8 | RST | вход | Сброс |
9 | VCC | - | Питание модуля 3,3 В 180 мА |
10 | GND | - | Общий вывод |
Подключение модуля ENC28J60 к плате Ардуино.
Для питания модуля необходим источник напряжения 3,3 В. Такое напряжение есть на плате Arduino UNO. Поэтому я решил подключить модуль к ней. Для других плат пришлось бы добавлять стабилизатор напряжения 3,3 В.
В характеристиках на плату Arduino UNO указано, что ток потребления на выводе 3,3 В должен быть не более 50 мА. А нам необходимо 180 мА. Но на моей плате Arduino UNO в качестве стабилизатора 3,3 В используется микросхема XC6206P332MR. На плате это корпус SOT-23 с обозначением 662K. Допустимый выходной ток для этого стабилизатора 200 мА (технические характеристики можно посмотреть по ссылке XC6206.pdf). Т.е. модуль можно смело запитывать от Arduino UNO.
Для управления модулем мы будем использовать аппаратный интерфейс SPI микроконтроллера. Поэтому выбора выводов платы Ардуино для подключения модуля у нас нет.
Таблица соединения выводов платы Arduino UNO и модуля ENC28J60 выглядит так.
Плата Arduino UNO | Модуль ENC28J60 | |
Вывод | № вывода | Обозначение |
12 | 4 | SO |
11 | 5 | SI |
13 | 6 | SCK |
10 | 7 | CS |
RES | 8 | RST |
3.3 V | 9 | VCC |
GND | 10 | GND |
Кому-то удобнее будет работать со схемой.
У меня все это выглядит так.
К роутеру я подключил модуль прямым кабелем.
В следующем уроке изучим библиотеку для управления модулем ENC28J60, научимся писать программы для передачи данных через сеть Ethernet.
Спасибо, за ваши труды, очень познавательно! Хочется попросить у вас список рекомендуемых вами ресурсов, для изучения программирования микроконтроллеров и около этой темы.
Здравствуйте! Спасибо за приятные слова.
Не знаю. Информации в интернете много, но большей частью перепечатывается одно и то же, практически нет авторских статей.
Для изучения программирования я бы порекомендовал просто книжку по языку C. Можно даже не C++. Программирование Ардуино ничем не отличается. Еще надо иметь хотя бы начальные знания электроники. Микроконтроллеры всегда к чему-то подключаются.
Обязательно продолжайте писать! Более практичного наставления не найти. Жду продолжения темы езернет. У самого пара модулей завалялась. Не то, чтобы было трудновато скетч найти, сколько хочется узнать, как вписать это все в предложенную вами систему равномерного распределения кода, с использованием таймера. И еще вопрос. А, что если мне нужно и таймер по прерываниям и , допустим, энкодер обрабатывать. Как строить приоритеты. То, что быстрее то главнее? Спасибо. Желаю успехов.
Здравствуйте!
Лучше чтобы в системе было только одно прерывание по таймеру. Выбираете задачу с самым малым периодом, на нее и задаете таймер. А остальные процессы отсчитываете от него.
Когда выбирал себе ethernet шильд для ардуино, много полазил по форумам, в итоге взял себе W5100. Он дороже, чем ENC28J60, но у меня работает безотказно уже больше года, плюс в нём есть слот для карты памяти, на которой можно сделать вэб интерфейс. Ещё она совместима по форм-фактору с UNO.На ENC28J60 много народу жалуется, что часто зависает, а для системы умного дома это критично.Вообще, по моему мнению, по соотношению цена-качество-функционал, для умного дома оптимальнее сразу взять ESP8266.
Спасибо, что после перерыва опять нас радуете уроками!
Здравствуйте!
Решили начать с проводного варианта, как самого надежного и дешевого. В будущем, надеюсь, будем переводить на WiFi.
А когда планируете написать про Wi-Fi и , наверное про ESP8266 ? Очень хочется почитать в вашем исполнении.
С есп намного проще и лучше, но проблема как к есп прикрутить Лан, там только вайфай.
ножка инт не подключается. функционал модуля работы с прерываниями не реализован? работа модуля реализована для бабушек со сковородкой, которые его к ардуино подсоединяют? при этом иногда зависает?
Очень толково написано. Спасибо.
Спасибо за информацию. Подскажите пожалуйста, использую UNO с точно таким же модулем ENC28J60, через сеть поступает команда на замыкание реле в 3 режимах (30 сек, 2 раза по 30 с интервалом в 5 сек, 3 раза по 10 с интервалом 5 сек). В отдельности отрабатывает все нормально, но после отработки релюшки, сетевой модуль не активен, будто отключен, хотя индикаторы горят. Начинает пинговаться если перезапустить ардуино или если открыть монитор порта в IDE. Сталкивались ли вы с такой проблемой? Буду благодарен за подсказку