8-900-374-94-44
[email protected]
Slide Image
Меню

Подключение enc28j60 – работаем с ENC28J60 / Связь железа с компьютером. / Сообщество EasyElectronics.ru

Содержание

ENC28J60 Подключаем Микроконтроллер к сети Ethernet

Смотри также WiFi модуль ESP8266

Отдельно работающее устройство на микроконтроллере становится более полезным, если с него можно получить интересующую нас информацию. Для этого мы подключали микроконтроллер к портам компьютера RS232 и USB.

Однако, зависимость от компьютера – это не всегда хорошо. Иногда требуется создать автономное сетевое устройство со своим сетевым адресом и, желательно, с уже ставшим привычным, Web-интерфейсом. Этим мы и займемся.

Я начинал с реализации схемы, опубликованной в этой статье:
http://www.rlocman.ru/shem/schematics.html?di=55059
http://www.radiolocman.com/shem/schematics.html?di=55059

Все оказалось не так сложно, как может показаться на первый взгляд. Мое первое устройство для удаленного отключения/включения питания через web интерфейс.

Как видите, ENC28J60 упрощает схему подключения микроконтроллера с компьютерной сети до простейшей.

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

Итак, микросхема Ethernet интерфейса ENC28J60 включает протокол приема/передачи данных, MAC адрес, и протокол физического уровня в одном чипе. Микросхема имеет 28 ног.
Требует подключение всего нескольких внешних элементов. Кварц, Ethernet трансформатор, Ethernet-разъем, несколько конденсаторов и резисторов, пару светодиодов. Вот схема подключения к микроконтроллеру Atmega88 /Atmega168.

Обращаю внимание, что все схемы и софт распространяются по лицензии GPL2. Т.е. общедоступны, и если Вы использовали что либо из софта, то свой софт Вы обязаны опубликовать и сделать общедоступным.

Микросхема Ehernet интерфейса ENC28J60 греется. Причем в SMD корпусе чуть больше, чем DIP. Вероятнее всего, это субъективное ощущение, но я в конце концов, перешел на DIP корпуса. Что касается Ehernet трансформаторов, сразу я выпаивал их из старых сетевых карточек. Мне ни разу не попадалось два одинаковых трансформатора. Отдельно их купить в Украине нереально. Утомившись каждый раз по новому разводить плату, я перешел на разъем со встроенным трансформатором и светодиодами. Цена немного кусается, но зато на плате сразу освобождается место, да и внешний вид устройства становится значительно симпатичнее.

ENC28J60 подключал к Atmega88, ATMEga168, ATMEga32. Питание всей схемы 3.3В. Собственно, по железу все, ничего сложного. Проблем с запуском ни разу не испытывал. Все работало сразу и без вопросов.

Исходный пример для работы с ENC28J60 на CGG (WinAVR) можно скачать в указанной выше статье.  Я же расскажу о том, что получилось у меня в конечном итоге. Все основано на этом же примере и распространяется по лицензии GPL2.

NETAlarm

NETAlarm создавался как устройство для контроля климатических условий в серверных помещениях. Но его можно применять везде, где требуется удаленный контроль и управление.  Например, дома или на даче, в качестве устройства для удаленного контроля поливом, вентиляцией, и т.п. Чуть позже я расскажу, как на базе NETAlarm была создана метеостанция, работающая в сети интернет. Задача NETAlarm  контролировать состояние датчиков (аналоговых, дискретных, датчиков температуры), предоставлять Web интерфейс для контроля и управления, с заданной периодичностью отправлять данные на сервер. Отправлять сообщения для предотвращения аварийных ситуаций.

Характеристики Устройства:
– 3 цифровых датчика DS18B20
– 2 аналоговых входа (0…3,3В)
– 4 дискретных входа
– два дискретных выхода (управляются программно (настраивается через Web-интерфейс) или вручную)
– web-интерфейс, позволяющий настроить все параметры устройства, в том числе сетевые, и алгоритм срабатывания на разные состояния датчиков.
– отправка данных демону Syslog на указанный сервер через указанный промежуток времени
– отправка сообщений по UDP протоколу на указанный сервер в случае превышения критических показаний датчиков (настраивается через Web-интерфейс).

Схема NETAlarm

Внимание! В схеме используется микросхема Atmega32A или Atmega32LAtmega32 не подойдет по напряжению питания.

Печатная плата двусторонняя сторона 1:

сторона 2:

Скачать схему, плату, прошивку, исходники.

Фьюзами нужно установить тактирование от внешнего источника и отключить JTAG. Все остальные по умолчанию.

Описание работы NETAlarm

Краткое описание NETAlarm

NETAlarm – устройство для отслеживания состояния различных датчиков и передачи данных по компьютерным сетям. Специализирован для контроля за климатической обстановкой в помещениях. Имеет Web-интерфейс для настройки и отслеживания состояния. Позволяет в случае аварийных ситуаций организовать уведомление серверов. Отправляет данные по протоколу Syslog через определенный промежуток времени. Позволяет подключить через два дискретных выхода внешние устройства и управлять ими по заданному алгоритму.

Характеристики и возможности

  • – до 3 цифровых датчиков температуры DS18B20 с интервалом измеряемых температур от -55 до +125 0C.
  • – 2 аналоговых входа 0…3,3В. Внутренний АЦП обеспечивает 10 разрядное преобразование.
  • – 4 дискретных входа (внутренняя подтяжка к логической 1)
  • – 2 дискретных выхода с нагрузочной способностью 10 мА
  • – отправка состояния датчиков на указанный сервер по протоколу Syslog
  • – отправка уведомления списку серверов или одному из списка, при наступлении указанного условия
  • – возможность управления выходами и отправкой данных по указанной логической схеме
  • – web-интерфейс для управления и получения данных

Требования к питанию и окружающей среде

Питание прибора осуществляется от внешнего стабилизированного источника питания +5В, 500mA. Прибор рассчитан на работу при температуре 0…85 0С. При относительно влажности до 90% в неагрессивной среде. Не рассчитан на прямое попадание воды и ВЧ излучений.

Подключение и установка датчиков

NETAlarm позволяет подключить до 6 внешних датчиков помимо 3 датчиков температуры DS18B20. Для этого применяются клеммы.

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

Подключение дополнительных датчиков температуры

Общее количество датчиков температуры DS18B20 не должно превышать трех. Датчики подключаются параллельно друг другу. Никаких других элементов не требуется. Длина провода не более 3 метров.

Подключение аналоговых датчиков

Подключаемый аналоговый датчик должен выдавать напряжение в пределах 0…3,3В. В противном случае, необходимо обеспечить согласование сигналов. При этом вся защита от возможного перенапряжения должна ложиться на схему согласования. Прибор имеет 10 разрядный АЦП. Уровень измеренного сигнала отображается в числовом выражении от 0 до 1023. Пересчет в милливольты и другие величины прибор не выполняет.

Подключение дискретных датчиков

Подключаемые датчики могут быть как контактными (герконы, переключатели, кнопки) так и электронными ключами (цифровые датчики Холла, датчики, имеющие на выходе транзистор с открытым коллектором) Подключение датчика выполняется между нужным входом и “GND”. Вход контроллера “подтягивается” к логической 1 через внутренний резистор 10…60 кОм. Поэтому, при разомкнутом датчике на входе будет 1. При замыкании датчика на входе 0. Использование схемы для предотвращения дребезжания контактов при замыкании/размыкании необязательна. Если существует возможность попадания в цепь датчика напряжения, превышающего 3,3В, необходимо реализовать схему защиты входов от перенапряжения.

Подключение исполнительных устройств

Номинальная нагрузочная способность выходов OUT9, OUT10 10 мА (максимальная 20 мА). Используя внешние исполнительные устройства, можно реализовать управление сильноточной нагрузкой (вентиляцией, кондиционером, насосом, генератором и т.п.)

Настройка NETAlarm через web-интерфейс

Вход на страницу управления выполняется по ссылке следующего вида: http://IP-адрес NETAlarm/пароль

Пример:

http://192.168.114.20/whfynl

Если выполняется первичная настройка устройства, IP-адрес и пароль, заданный производителем можно узнать на наклейке корпуса NETAlarm.
После удачного входа, первой откроется страница состояния датчиков. Используя меню, перемещайтесь по закладкам.

Сетевые настройки

В закладке “Settings” выполняются основные сетевые настройки. А именно настройка MAC-адреса, IP-адреса, маски подсети, адрес шлюза, пароль доступа.

Настройки заголовков

В закладке “Titles” можно установить короткие текстовые подписи длинной до 20 символов к входам NETAlarm. Эти подписи отображаются на страницах состояния датчиков.

Настройки лог-сервера

В закладке “Log-Server” указывается IP-адрес сервера, порт и временной интервал, для отправки данных по протоколу syslog. При этом сервер должен быть настроен для приема данных, кроме того сетевые экраны (firewall) должны также позволять прохождению UDP пакетов на указанный IP-адрес и порт от IP-адреса NETAlarm. Как настроить сервер FreeBSD для приема данных, читайте здесь: “Настройка syslog на FreeBSD”.

Настройка списка “Alarm”

В закладке “Alarm List” указывается список IP-адресов серверов и портов, сообщений, которые будут отправлять серверам при условиях, указанных в следующей закладке “Events”. При этом несколько строк могут содержать одну и ту же комбинацию IP-адреса и порта, но с разными сообщениями. Сообщения отправятся, если будет включено поле ‘Enable/Disable’.

Настройка списка “Events”

В закладке “”Events” настраивается логическая таблица работы NETAlarm. В каждой строке указывается:

  • – опрашиваемый датчик
  • – условие сравнения (> = <)
  • – значение для сравнения
  • – действие, которое необходимо выполнить при выполнении условия в течение времени, указанного в поле ‘Delay time
  • – поле ‘Delay time‘ задающее время, в течении которого должно выполняться условие прежде чем указанное действие будет выполнено. Задается в секундах. Если установлен 0 – немедленное выполнение.
  • – поле Enable/Disable Для включения/отключения обработки строки.

Прибор проверяет таблицу условий 10 раз в секунду, проходя последовательно по таблице, начиная со строки 0 до строки 9. Проверка условий выполняется только для строк, у которых включено поле Enable/Disable.
При выполнении условия в течении указанного периода выполняется указанное действие. В списке действий имеется проверка другого условия, что позволяет реализовать операцию логического “И“. При этом желательно указывать строки с отключенным полем Enable/Disable. В этом случае условие будет проверено, но будет проигнорировано в основном цикле проверке.

Если Вам, вдруг, захочется “зациклить” проверку условий, Вы сможете это сделать, но прибор работать правильно не будет.

Подробное описание полей:

Первое поле содержит список датчиков:

  • T0 – цифровой датчик температуры #1
  • T1 – цифровой датчик температуры #2
  • T2 – цифровой датчик температуры #3
  • A3 – аналоговый вход #1
  • A4 – аналоговый вход #2
  • IN5 – дискретный вход #1
  • IN6 – дискретный вход #2
  • IN7 – дискретный вход #3
  • IN8 – дискретный вход #4
  • OUT9 – дискретный выход #1
  • OUT10 – дискретный выход #2

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

Условие сравнения:

  • > – если значение датчика превышает указанное в поле ‘Value’ значение
  • = – если значение датчика равно указанному в поле ‘Value’ значению
  • < – если значение датчика меньше указанного в поле ‘Value’ значения

В Поле ‘Value’ можно указывать целые числа в диапазоне от -9999 до 32767

Поле ‘What to do’

  • On OUT9 -включить OUT9
  • On OUT10 -включить OUT10
  • Off OUT9 -выключить OUT9
  • Off OUT10 -выключить OUT10
  • Send to Log -отправить состояние датчиков серверу, указанному в закладке “Log-Server”
  • Send Alarm#0..#9 -отправить сообщения всем со списка
  • Send Alarm#0 -отправить сообщение серверу, указанному в строке #0 из списка ‘Alarm List’
  • Send Alarm#1 -отправить сообщение серверу, указанному в строке #1 из списка ‘Alarm List’
  • Send Alarm#2 -отправить сообщение серверу, указанному в строке #2 из списка ‘Alarm List’
  • Send Alarm#3 -отправить сообщение серверу, указанному в строке #3 из списка ‘Alarm List’
  • Send Alarm#4 -отправить сообщение серверу, указанному в строке #4 из списка ‘Alarm List’
  • Send Alarm#5 -отправить сообщение серверу, указанному в строке #5 из списка ‘Alarm List’
  • Send Alarm#6 -отправить сообщение серверу, указанному в строке #6 из списка ‘Alarm List’
  • Send Alarm#7 -отправить сообщение серверу, указанному в строке #7 из списка ‘Alarm List’
  • Send Alarm#8 -отправить сообщение серверу, указанному в строке #8 из списка ‘Alarm List’
  • Send Alarm#9 -отправить сообщение серверу, указанному в строке #9 из списка ‘Alarm List’
  • Event#0 -проверить условие в строке #0
  • Event#1 -проверить условие в строке #1
  • Event#2 -проверить условие в строке #2
  • Event#3 -проверить условие в строке #3
  • Event#4 -проверить условие в строке #4
  • Event#5 -проверить условие в строке #5
  • Event#6 -проверить условие в строке #6
  • Event#7 -проверить условие в строке #7
  • Event#8 -проверить условие в строке #8
  • Event#9 -проверить условие в строке #9

Поле ‘Delay time’

В этом поле следует указывать период в секундах, на протяжении которого условие должно выполняться, прежде, чем будет выполнено указанное действие.
Технически возможно указать значения в диапазоне от -9999 до 32767. Но отрицательные значения, лишенные логического смысла, лишат логики всего, что вы делаете.

Поле ‘Enable/Disable’

Если Вы хотите, чтобы условие проверялось, установите это поле. Если условие используется как подчиненное в цепочке логического “И”, и Вам не нужно чтобы эту условие работало как самостоятельное, не устанавливайте это поле.

Пример #1:

Задача:

При превышении температуры 27 градусов на протяжении 1 минуты включать вентиляцию.
Если температура превышает 30 градусов на протяжении 30 сек, рассылать сообщения всем серверам.
Выключать вентиляцию при температуре ниже 25 градусов

Решение:

0T0>27On OUT960
1T0>30Send Alarm#0..#930
2T0<25Off OUT90
Пример #2:

Задача:

Регистрировать момент открытия/закрытия двери серверной (датчик IN5)

Решение:

0IN5=0Send to Log0
1IN5=1Send to Log0
Пример #3:

Задача:

Отправлять сообщение серверам, если дверь в серверную (датчик IN5) закрыта более часа, вентилятор включен (Выход OUT9) более 30 минут, а температура превышает значение 30 градусов в течении 30 секунд.
При наличии воды на полу (датчик IN6) более 5 секунд отправлять сообщения.

Решение:

0IN5=1Event#13600
1OUT9=1Event#21800
2T0>30Send Alarm#0..#930
3IN6=0Send Alarm#0..#95

 Настройка прибора через последовательный порт

Этот способ предназначен для возвращения контроля над устройством, если его основные параметры (IP-адрес, пароль доступа) безвозвратно утеряны и не представляется возможным их восстановить.

!ВАЖНО! Кабель последовательного интерфейса в комплект не входит. Для изменения настроек NETAlarm по последовательному порту нужно выполнить следующие действия:

  • открыть крышку прибора
  • подключить кабель последовательного интерфейса к разъему USART
  • подключить кабель к компьютеру
  • включить прибор
  • запустить терминальную программу (например HyperTerminal) и подключиться к NETAlarm по соответствующему COM порту

В таком варианте подключения NETAlarm имеет ограниченный набор команд:

  • AT – проверка связи, в случае успеха, возвращает ‘OK’
  • CONFIG – выводит на дисплей текущую конфигурацию в сжатом виде
  • SETMAC– устанавливает MAC-адрес. Пример:

    SETMAC 88-255-114-17-50-117

    Обратите внимание! MAC-адрес указывается в десятичном формате

  • SETIP– устанавливает IP-адрес.

    Пример:

    SETIP 192.168.0.1

  • SETPWD– устанавливает пароль.

    Пример:

    SETPWD qwerty

    Пароль может содержать латинские буквы и цифры. Использование других символов крайне не рекомендуется.

  • HELP – выводит подсказку по командам.

 Страницы состояния датчиков

Кроме страницы состояния в главном web-интерфейсе, NETAlarm предоставляет дополнительные страницы, где можно получить состояние датчиков.

С описание входов: http://[IP-адрес NETAlarm]/status

Пример:

http://192.168.114.20/status

Содержание страницы:

Сокращенная информация: http://[IP-адрес NETAlarm]/stat

Пример:

http://192.168.114.20/stat

Содержание страницы:

Эти данные могут быть получены и обработаны любым ПО с любой операционной системы, что расширяет сферу использования NETAlarm.

Настройка Syslog на FreeBSD

Для настройки syslog необходимо в файл syslog.conf добавить строку

local0.info                                     /var/log/climate.log

где /var/log/climate.log – файл, в который будут записываться данные NETAlarm.

Пример файла syslog.conf:

# $FreeBSD: src/etc/syslog.conf,v 1.28 2005/03/12 12:31:16 glebius Exp $
#
#       Spaces ARE valid field separators in this file. However,
#       other *nix-like systems still insist on using tabs as field
#       separators. If you are sharing this file between systems, you
#       may want to use only tabs as field separators here.
#       Consult the syslog.conf(5) manpage.
*.err;kern.warning;auth.notice;mail.crit                /dev/console
*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err   /var/log/messages
security.*                                      /var/log/security
auth.info;authpriv.info                         /var/log/auth.log
mail.info                                       /var/log/maillog
lpr.info                                        /var/log/lpd-errs
ftp.info                                        /var/log/xferlog
cron.*                                          /var/log/cron
local0.info                                     /var/log/climate.log
*.=debug                                        /var/log/debug.log
*.emerg                                         *
# uncomment this to log all writes to /dev/console to /var/log/console.log
#console.info                                   /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
# touch /var/log/all.log and chmod it to mode 600 before it will work
*.*                                             /var/log/all.log
# uncomment this to enable logging to a remote loghost named loghost
#*.*                                            @10.20.27.111
# uncomment these if you're running inn
# news.crit                                     /var/log/news/news.crit
# news.err                                      /var/log/news/news.err
# news.notice                                   /var/log/news/news.notice
!mpd
*.*                                             /var/log/mpd.log
!startslip
*.*                                             /var/log/slip.log
!ppp
*.*                                             /var/log/ppp.log

В rc.conf устанавливаем флаг syslog, и указываем от кого ему можно принимать данные. Пример:

syslogd_flags= “-a 192.168.114.20/32:*”

Настройка FreeBSD для приема и обработки сообщений

Предположим, отправка сообщений будет выполняться на порт 773. Смотрим в файле /etc/services 773/udp – это notify

В файле inetd.conf добавляем строку

notify  dgram udp       wait            root    /root/scripts/alarm.sh  alarm.sh

/root/scripts/alarm.sh – это скрипт, который будет принимать, и обрабатывать полученное сообщение.

Пример скрипта:

#!/usr/local/bin/bash

#LOG="/var/log/alarm.log"
LOG=`mktemp /tmp/alarm.XXXXXX` || exit 1
MY_IP_AND_PORT="192.168.144.1 773"
SECRET_STRING="balar"

WAIT_CNT=3
# get modify time of log
LOG_MODIFY=`stat -f "%m" ${LOG}`

/usr/bin/nc -l -u ${MY_IP_AND_PORT} > ${LOG} &

BG_PID=$!

while [ $WAIT_CNT -gt 0 ]; do
sleep 1
LOG_MODIFY_CUR=`stat -f "%m" ${LOG}`
if [ $LOG_MODIFY -eq $LOG_MODIFY_CUR ]; then
WAIT_CNT=$((WAIT_CNT-1))
else
WAIT_CNT=0
fi
done

kill $BG_PID

# bug fix BEGIN
read -t 1 sss
# bug fix END

MSG=`cat ${LOG}`

if [ $MSG=$SECRET_STRING ]; then
echo ALARM! SHUTDOWN! | mail -s ALARM [email protected]
logger AHTUNG! SHUTDOWN
else
logger GADI PITALIS POTUSHIT SERVER
fi

unlink ${LOG}

exit 0

ВНИМАНИЕ!На разных версиях операционных систем скрипт может не работать как следует или не работать вовсе. Придется применить свое умение.

Настройка MRTG для построения графиков температуры

Создаем скрипт /usr/local/etc/periodic/daily/climate.shСледующего содержания:

#!/bin/sh

read=`cut -f 4 -d: /var/log/climate.log | tail -1`
write=${read}

echo ${read}
echo ${write}
echo 0
echo items

где /var/log/climate.log – файл, в который принимаются данные от NETAlarm.

В файле /usr/local/etc/mrtg/mrtg.cfgдобавляем следующие строки:

Target[tgadova]:`/usr/local/etc/mrtg_scripts/climate.sh`
Options[tgadova]: nopercent,growright,gauge,noinfo
Title[tgadova]: Temperature
PageTop[tgadova]: <h2> Temperature </h2>
MaxBytes[tgadova]: 10000
YLegend[tgadova]: temperature, <sup>o</sup>C
ShortLegend[tgadova]: items
LegendI[tgadova]: Temperature:
LegendO[tgadova]: Temperature:
Legend1[tgadova]: temperature, <sup>o</sup>C
Legend2[tgadova]: temperature, <sup>o</sup>C

Установка и настройка сервиса для обработки сообщений на Windows серверах

Для приема сообщений серверами под управлением Windows систем создан специальный сервис NETAlarm.exe. Установить как сервис командой:

NETAlarm

.exe -install

Проверьте, служба Net Alarm должна появиться в списке сервисов.

Далее выполняем настройку. Для этого в папке Windows создаем файл NETAlarm.ini Примерно следующего содержания:

[Settings]
udpport=773
fromip=192.168.114.20
string=alarm
todo="C:\Atmel_Projects\AVRWeb\WinUDPServer\WinService\1.bat"

Где

  • udpport=773 – порт на котором служба будет принимать сообщения
  • fromip=192.168.114.20 – адрес от куда принимать сообщения, другие адреса будут игнорироваться
  • string=alarm – текст сообщения, после приема которого нужно выполнить команду
  • todo=”C:\NETAlarm\alarm.bat” – команда, которая выполняется после получения сообщения

Скачать схему, плату, прошивку, исходники.

P.S.

На той же основе была создана метеостанция для работы в интернет.

Принцип тот же, что и NETAlarm

.  Добавлены:
– датчик давления HP02
– “тахометр” для измерения скорости ветра
– работа с 4 битным энкодером для определения направления ветра
– отправка данных на сервер по http протоколу
– вывод данных в XML формате

Со схемой и прошивкой метеостанции познакомлю Вас немного позже.

www.avislab.com

Ethernet модуль на ENC28J60 | Электроника для всех

Уже давно был сделан Ethernet модуль, но все валялся в ящике. Никак руки не доходили.

Вот, наконец, собрался. Проверил на примерах от lifelover — работает.


 

В качестве микрухи используется ENC28J60 в SSOP28 корпусе. Бывает также в DIP28 и QFN корпусе. В общем, на любой вкус.
 

Схемотехника
Схема типейшая, по даташиту. Никаких заморочек, разве что применен разъем с трансформатором J00-0086NL, тогда как лучше было бы поставить J00-0066NL — у него коэффициент трансформации оптимальней (1:1). Но что было под рукой то и поставил. Можно и отдельный трансформатор взять, вроде FC-22 который стоял в модуле для WIZ100SR

 

Еще одна важная деталь. Резистор Rbias, у меня он на схеме обозначен как R8 2k 1% нужно подбирать исходя из ревизии микросхемы. Я поставил 2.2кОм. Errata рекомендует
 

For silicon revisions, B1 and B4, use a 2.7 k, 1% external resistor between the RBIAS pin and ground. The value shown in the data sheet (2.32 k,) is correct for revisions B5 and B7.

 

 

Деталей не много, развести все удалось по одной стороне практически, с парой перемычек.



Дорожки мелковаты, 0.3мм, но не думаю, что у кого то это вызовет сильных затруднений. Сделано ЛУТом без проблем.
 

Интерфейс
Связь с контроллером по SPI интерфейсу.

  • SO — MISO
  • SI — MOSI
  • SCK — SCK
  • CS — SS Впрочем, выбор кристалла SS тут может быть повешан куда угодно.
  • RESET — если никуда не подключать, то лучше его повесить на +3.3 вольта. Чтобы не болтался и не создавал глюки.
  • INT — выход прерывания. При приеме пакета может дрыгать этой ногой и заставлять проц срочно обрабатывать пакет. Или, как минимум, принять во внимание, что надо получать данные.
  • WOE — Это, как я понял, Wake On Ethernet. Я никуда не подключал
  • 3V3 — питание на 3.3 вольта. Микруха жручая, потребляет 250мА и весьма активно при этом греется. От платы не отпаивается конечно, но горячая — палец еле держит. Да, несмотря на питание в 3.3 вольта ее входы толерантны к 5 вольтам
  • GND — земля

 

 

Подробнейшее описание работы с этой игрушкой можно найти в сообществе, в цикле статей посвященной этой микросхеме и работе с Ethernet в частности. Подробней вы вряд ли где найдете 🙂

 

Файлы

 

З.Ы.
Сейчас эта поделка у меня плавно мутирует в боковой модуль для Pinboard II и скоро пойдет в производство.

easyelectronics.ru

Atmega328p + ENC28J60 = мост между UART и Ethernet / Habr


Создавая различную электронику и программируя AVR, STM и т.п. всегда встает вопрос как ее подключить к другой периферии для управления и передачи информации, например, к компьютеру.

Есть много различных решений: COM, RS482, WiFi, Zigbee, ZWave, Ethernet и т.п. Из всех вариантов я пробовал WiFi, Zigbee, Ethernet, все остальное крайне неудобно или устарело.

Я хочу рассказать и поделиться, как можно использовать чип ENC28J60 от Microchip и Atmega328p для создания «моста» (далее по тексту) между UART и Ethernet.

Есть готовые платы из Китая с чипом, но это только чип без реализации TCP/IP и имеет большие размеры.

Поэтому мне пришлось создавать не только прошивку, но и саму печатную плату.
Плата получилась небольших размеров.

Многие пишут, что чип глючный, есть подделки, но мне этого не удалось встретить в своей практике. В интернете есть много проектов и исходников для работы с этим чипом, но рабочих проектов мне не удалось встретить. Как правило эти проекты «умирали» или были не доведены до конца автором. Мой проект полностью рабочий, его можно смело использовать. Вот и захотелось поделиться. На сегодняшний день я уже не использую ENC28J60 т.к. на смену ему пришел WiFi модуль ESP8266. Я также напишу позже статью как собрать под ESP8266 прошивки AT, MicroPython, NodeMCU, Esp-Bridge и т.д. Но возможно кому-то еще требуется проводное Ethernet соединение с его девайсами или недоверие к беспроводным технологиям. В любом случае в каждой ситуации хорошо свое решение. Универсального решения не бывает!

Все схемы и пояснения в конце статьи. И конечно отвечу на вопросы.

У меня была задача подключиться удаленно к моему устройству на AVR через интернет.
Передача полностью сквозная и двухсторонняя

Вот примерно по такой схеме

Т.к. Atmega имеет не особо много памяти, то я реализовал только самое необходимое:

Для настроек используется Web интерфейс на 80 порту

  • IP адрес
  • Маска
  • Шлюз
  • Выбор скорости UARTa

В моем конечном девайсе было две платы, основная со всей логикой и отдельная как «мост».
Сам «мост» был реализован на отдельной плате, которая вставлялась уже в основную.
На основной плате располагался разъем RJ45 (для меня это было удобно). Можно было всегда убрать «мост» если заказчик этого не требовал.

Вид модели (Altium)

Уже готовая печатная плата:

В моем устройстве:

Основные возможности

  • «Мост» всегда слушает порт 23 и ждет подключения.
  • Одновременно возможно только одно соединение.
  • Есть поддержка ping’а
  • Полностью реализовал TCP/IP
  • Скорость порта от 2400… 115200
  • Есть поддержка RTS/CTS
  • Питание 3.3В

Сам исходник для Atmeg328
Схемы (PDF) и фотографии

Схемы и PCB рисовал в Altium`e, если нужно, пишите вышлю.

В общем надеюсь кому-то это поможет для реализации внешнего подключения к его девайсам используя Ethernet (TCP/IP).

habr.com

Подключение ENC28J60 + PIC к локальной сети .

Страница 1 из 3

1 часть.

 

Эта статья будет интересна в первую очередь тем, кто пишет программы  для микроконтроллеров на ассемблере и есть желание  собрать устройство , работающие в локальной сети или сети ethernet. Здесь будет применена связка  ethernet контроллер  enc28j60 и PIC18F46K20. Но можно применить и любой другой микроконтроллер , мне было просто удобно использовать именно этот , т.к. был  под рукой  и питание у обоих  3.3 вольта . 

 

 

 При использовании микроконтроллера с 5 вольтовым питанием  необходимо согласовать  уровни ,  на пример как показано в даташите.

   

 

  В  конечном итоге попробуем реализовать устройство удаленного управления и контроля (мониторинга) . В него предполагается внести функции контроля напряжения , температуры ,цифровые входа сигнализации и управления нагрузками. Все это будет работать по WEB интерфейсу , что в свою очередь очень удобно , нет необходимости в дополнительном ПО.

Сразу хочу определиться. Я не «крутой спец» в данной теме и практически сам постепенно разбираюсь в деталях , хотя и собирал различные конструкции (на СИ) в основном из  доработанных примеров. Так что прошу сильно не ругать. Но в любом случае все , что здесь будет написано (программа ) в начале проверяется  в «железе». Если будут замечания , или предложения , то пожалуйста на форум…

В этой части статьи мы дойдем  до приема пакетов, что уже позволит тем , кто более менее  разбирается в протоколах TCP/IP написать  ПП  для своей задачи.

Ну что ж начнем :

И начнем  с отладочной платы  , которую я использую для тестирования . Хотя это могут быть и другие платы или готовые модули на базе Ethernet контроллера NC28J60 (MM-ENC28J60 на пример ) или собственные , главное что бы они соответствовали рекомендаций производителя . Но лучше конечно собрать такую же плату, тем более что она не столько отладочная , сколько в конечном итоге должна стать законченным устройством.

 

 

 

 

 

Как видно из фотографий плата собрана из одностороннего текстолита и имеет минимальное количество деталей . Все свободные «пины» портов выведены на разъемы , к которым в последствии мы будем подключать различные датчики и управления нагрузками. Разъем RG-45 с интегрированными трансформаторами , полностью совместимый с контроллером enc28j60 . На плате установлен стабилизатор на 3.3 вольта , для питания как самого адаптера enc28j60 ,так и микроконтроллера PIC18F46K20 .Ток потребления enc28j60 приличный  — 250 мА . В начале я подумал , что мне попалась бракованная партия т.к.  сильно греются (температуру не измерял , думаю градусов 40 есть ) . Потом  выяснилось что это нормальное состояние для этой микросхемы .

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

Микросхемы enc28j60 выпускаются в разных корпусах  (DIP, SOIC и QFN) и назначение выводов могут отличаться. Я использовал в SOIC-28 , правда они чуть дороже чем DIP . Схему подключения , печатную плату можно будет скачать в конце статьи по ссылке ,  рассматривать технические характеристики будем частично , т.е. только то , что непосредственно нам необходимо . Ниже , на рисунке показана упрощенная архитектура ethernet-контроллера  и связь с PICом ,обмен данными   производится   по протоколу  SPI , прерывания не задействованы и соответственно в схеме не указаны .

 

 

  1. TX/RX Bufer -буфер , размером 8КБ , большая часть используется для приема пакетов ,другая  для передачи.
  2. MAC —  MAC (Medium Access Controller) модуль, который реализует IEEE 802.3 MAC-логики.
  3. PHY — (Physical Layer) модуль, для работы с витой парой (интерфейс , физический уровень) .

Организация памяти:

Вся память в ENC28J60 реализован в виде статической оперативной памяти. Есть три типа памяти в ENC28J60:

  • регистры управления
  • буфер Ethernet памяти
  • PHY регистры

 

 

Управляющие регистры — находятся в  4 банках , в каждом по 32 регистра (0х00-0x1F) ,  последние 5 регистров  в каждом банке одни и те же , т.е. при обращении к этим регистрам не нужно переключать банки.

Ethernet буфер (0х00-0FFF) — (8KB) буфер.

PHY регистры — регистры состояния, управления и конфигурирования модуля PHY . Прямого доступа к этим регистрам нет, к ним можно обращаться только через регистры Media Independent Interface (MII), реализованных в MAC.

 

Регистры управления.

На стадии «изготовления » программы нам необходимо постоянно «подглядывать»  где какой регистр расположен и за что отвечает, для удобства подкрасим регистры  и выделим по группам . Регистры прерывания и DMA использовать не будем , как и встроенный тест. По большей части к регистрам будем обращаемся только в процессе инициализации , когда настраиваем ENC28J60.

 

 

 

Повторюсь , что последними 5 регистрами можно работать не переключая банки .При обращении к другим регистрам в начале необходимо указать в каком банке они находиться . Разберем назначение отдельных регистров.

Банк0. 2 байта L и H (младший и старший).

  • ERDPT    (L/H) — указатель чтения буфера .      
  • EWRPT   (L/H) — указатель записи буфера.
  • ETXST (L/H) — начало  отправляемого пакета.
  • ETXND (L/H) — конец отправляемого пакета.
  • ERXST (L/H) — начало кольцевого буфера
  • ERXND (L/H) — конец кольцевого буфера.
  • ERXRDPT(L/H) — указатель кольцевого буфера .
  • ERXWRPT(L/H) — указатель кольцевого буфера .
  • ESTAT  — основной регистр (флаги)
  • ECON2 — основной регистр (авто инкрементирование указателей чтения и записи,уменьшение счётчика пакетов….)
  • ECON1 — основной регистр (выбор банка,разрешение прием данных ,разрешение отправка пакетов….)

Банк1

  • EPKTCNT — основной регистр (указатель (счетчик)принятых пакетов).

Банк2

  • MACON1- регистр MAC (управление потоком ,разрешение приема пакетов…)
  • MACON2- регистр MAC
  • MACON3- регистр MAC (режим работы,контрольная сумма,проверка длины фреймов…)
  • MACON4- регистр MAC
  • MABBIPG- регистр MAC (задержка между отправляемыми пакетами — 0x15 в полнодуплексном режиме)
  • MAIPGL — регистр MAC   (задержка между отправляемыми пакетами-0х12 рекомендация )
  • MAIPGH — регистр MAC  (задержка между отправляемыми пакетами-0х0C рекомендация )
  • MACLCON1 -регистр MAC (задержка  при возникновении коллизии= по умолчанию.)
  • MACLCON2 -регистр MAC (задержка  при возникновении коллизии= по умолчанию.)
  • MAMXF(L/H)-максимальная длина пакетов (прием , передача)
  • MICON  — регистр MII  (rezet MII)
  • MICMD — регистр MII (управление , операции с PHY) .
  • MIREGADR-регистр MII(указатель регистра PHY с которым будем работать)
  • MIWR (L/H) — регистр MII (данные для записи  в  регистр PHY)
  • MIRD(L/H) — регистр MII ( чтение данных из регистра PHY)

Банк3

  • MAADR1 — MAC адрес , байт № 5 .
  • MAADR0 — MAC адрес , байт № 6
  • MAADR3 — MAC адрес , байт № 3
  • MAADR2 — MAC адрес , байт № 4
  • MAADR5 — MAC адрес , байт № 1
  • MAADR4 — MAC адрес , байт № 2
  • MISTAT  — регистр MII (проверка занятости PHY регистра….)
  • EREVID — номер ревизии enc28J60
  • ECOCON — управление CLKOUT

Как отмечалось ранее , прямого доступа к этим регистрам нет. Для того что бы сделать с ними какие либо действия необходимо обратиться к регистрам MII, которые и созданы как раз для этих целей .Процедура обращения к регистрам следующая:
Чтение:

  • Указываем адрес регистра к которому мы обращаемся в MIREGADR.
  • Устанавливаем бит MIIRD в регистре MICMD.
  • Ждем сброса бита BUSY в регистре MISTAT.
  • Сбрасываем бит MIIRD в регистре MICMD.
  • Читаем данные из регистров MIRDL и MIRDH

 

Запись:

  • Указываем адрес регистра к которому мы обращаемся в MIREGADR.
  • Записываем данные в регистры MIWRL (младший байт) и после младшего MIWRH (старший байт).
  • Ждем сброса бита BUSY в регистре MISTAT.

Регистры PHY:

  • 0х00  PHCON1 (управление режимом работы  PHY)
  • 0х01  PHSTAT  (статус PHY)
  • 0х02  PHID1    (идентификатор PHY)
  • 0х02  PHID2 (идентификатор PHY (остаток))
  • 0х10  PHCON2 (управление режимом  работы  PHY)
  • 0х11  PHSTAT2 (статус PHY)
  • 0х12  PHIE      (управления прерываниями PHY)
  • 0х12  PHIR      (флаги прерывания PHY)
  • 0x14  PHLCON (управление светодиодами)

С регистрами более менее понятно  , а что дальше ? Как с ними работать?

chipmk.ru

Подключение ENC28J60 + PIC к локальной сети .

Страница 1 из 3

1 часть.

 

Эта статья будет интересна в первую очередь тем, кто пишет программы  для микроконтроллеров на ассемблере и есть желание  собрать устройство , работающие в локальной сети или сети ethernet. Здесь будет применена связка  ethernet контроллер  enc28j60 и PIC18F46K20. Но можно применить и любой другой микроконтроллер , мне было просто удобно использовать именно этот , т.к. был  под рукой  и питание у обоих  3.3 вольта . 

 

 

 При использовании микроконтроллера с 5 вольтовым питанием  необходимо согласовать  уровни ,  на пример как показано в даташите.

   

 

  В  конечном итоге попробуем реализовать устройство удаленного управления и контроля (мониторинга) . В него предполагается внести функции контроля напряжения , температуры ,цифровые входа сигнализации и управления нагрузками. Все это будет работать по WEB интерфейсу , что в свою очередь очень удобно , нет необходимости в дополнительном ПО.

Сразу хочу определиться. Я не «крутой спец» в данной теме и практически сам постепенно разбираюсь в деталях , хотя и собирал различные конструкции (на СИ) в основном из  доработанных примеров. Так что прошу сильно не ругать. Но в любом случае все , что здесь будет написано (программа ) в начале проверяется  в «железе». Если будут замечания , или предложения , то пожалуйста на форум…

В этой части статьи мы дойдем  до приема пакетов, что уже позволит тем , кто более менее  разбирается в протоколах TCP/IP написать  ПП  для своей задачи.

Ну что ж начнем :

И начнем  с отладочной платы  , которую я использую для тестирования . Хотя это могут быть и другие платы или готовые модули на базе Ethernet контроллера NC28J60 (MM-ENC28J60 на пример ) или собственные , главное что бы они соответствовали рекомендаций производителя . Но лучше конечно собрать такую же плату, тем более что она не столько отладочная , сколько в конечном итоге должна стать законченным устройством.

 

 

 

 

 

Как видно из фотографий плата собрана из одностороннего текстолита и имеет минимальное количество деталей . Все свободные «пины» портов выведены на разъемы , к которым в последствии мы будем подключать различные датчики и управления нагрузками. Разъем RG-45 с интегрированными трансформаторами , полностью совместимый с контроллером enc28j60 . На плате установлен стабилизатор на 3.3 вольта , для питания как самого адаптера enc28j60 ,так и микроконтроллера PIC18F46K20 .Ток потребления enc28j60 приличный  — 250 мА . В начале я подумал , что мне попалась бракованная партия т.к.  сильно греются (температуру не измерял , думаю градусов 40 есть ) . Потом  выяснилось что это нормальное состояние для этой микросхемы .

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

Микросхемы enc28j60 выпускаются в разных корпусах  (DIP, SOIC и QFN) и назначение выводов могут отличаться. Я использовал в SOIC-28 , правда они чуть дороже чем DIP . Схему подключения , печатную плату можно будет скачать в конце статьи по ссылке ,  рассматривать технические характеристики будем частично , т.е. только то , что непосредственно нам необходимо . Ниже , на рисунке показана упрощенная архитектура ethernet-контроллера  и связь с PICом ,обмен данными   производится   по протоколу  SPI , прерывания не задействованы и соответственно в схеме не указаны .

 

 

  1. TX/RX Bufer -буфер , размером 8КБ , большая часть используется для приема пакетов ,другая  для передачи.
  2. MAC —  MAC (Medium Access Controller) модуль, который реализует IEEE 802.3 MAC-логики.
  3. PHY — (Physical Layer) модуль, для работы с витой парой (интерфейс , физический уровень) .

Организация памяти:

Вся память в ENC28J60 реализован в виде статической оперативной памяти. Есть три типа памяти в ENC28J60:

  • регистры управления
  • буфер Ethernet памяти
  • PHY регистры

 

 

Управляющие регистры — находятся в  4 банках , в каждом по 32 регистра (0х00-0x1F) ,  последние 5 регистров  в каждом банке одни и те же , т.е. при обращении к этим регистрам не нужно переключать банки.

Ethernet буфер (0х00-0FFF) — (8KB) буфер.

PHY регистры — регистры состояния, управления и конфигурирования модуля PHY . Прямого доступа к этим регистрам нет, к ним можно обращаться только через регистры Media Independent Interface (MII), реализованных в MAC.

 

Регистры управления.

На стадии «изготовления » программы нам необходимо постоянно «подглядывать»  где какой регистр расположен и за что отвечает, для удобства подкрасим регистры  и выделим по группам . Регистры прерывания и DMA использовать не будем , как и встроенный тест. По большей части к регистрам будем обращаемся только в процессе инициализации , когда настраиваем ENC28J60.

 

 

 

Повторюсь , что последними 5 регистрами можно работать не переключая банки .При обращении к другим регистрам в начале необходимо указать в каком банке они находиться . Разберем назначение отдельных регистров.

Банк0. 2 байта L и H (младший и старший).

  • ERDPT    (L/H) — указатель чтения буфера .      
  • EWRPT   (L/H) — указатель записи буфера.
  • ETXST (L/H) — начало  отправляемого пакета.
  • ETXND (L/H) — конец отправляемого пакета.
  • ERXST (L/H) — начало кольцевого буфера
  • ERXND (L/H) — конец кольцевого буфера.
  • ERXRDPT(L/H) — указатель кольцевого буфера .
  • ERXWRPT(L/H) — указатель кольцевого буфера .
  • ESTAT  — основной регистр (флаги)
  • ECON2 — основной регистр (авто инкрементирование указателей чтения и записи,уменьшение счётчика пакетов….)
  • ECON1 — основной регистр (выбор банка,разрешение прием данных ,разрешение отправка пакетов….)

Банк1

  • EPKTCNT — основной регистр (указатель (счетчик)принятых пакетов).

Банк2

  • MACON1- регистр MAC (управление потоком ,разрешение приема пакетов…)
  • MACON2- регистр MAC
  • MACON3- регистр MAC (режим работы,контрольная сумма,проверка длины фреймов…)
  • MACON4- регистр MAC
  • MABBIPG- регистр MAC (задержка между отправляемыми пакетами — 0x15 в полнодуплексном режиме)
  • MAIPGL — регистр MAC   (задержка между отправляемыми пакетами-0х12 рекомендация )
  • MAIPGH — регистр MAC  (задержка между отправляемыми пакетами-0х0C рекомендация )
  • MACLCON1 -регистр MAC (задержка  при возникновении коллизии= по умолчанию.)
  • MACLCON2 -регистр MAC (задержка  при возникновении коллизии= по умолчанию.)
  • MAMXF(L/H)-максимальная длина пакетов (прием , передача)
  • MICON  — регистр MII  (rezet MII)
  • MICMD — регистр MII (управление , операции с PHY) .
  • MIREGADR-регистр MII(указатель регистра PHY с которым будем работать)
  • MIWR (L/H) — регистр MII (данные для записи  в  регистр PHY)
  • MIRD(L/H) — регистр MII ( чтение данных из регистра PHY)

Банк3

  • MAADR1 — MAC адрес , байт № 5 .
  • MAADR0 — MAC адрес , байт № 6
  • MAADR3 — MAC адрес , байт № 3
  • MAADR2 — MAC адрес , байт № 4
  • MAADR5 — MAC адрес , байт № 1
  • MAADR4 — MAC адрес , байт № 2
  • MISTAT  — регистр MII (проверка занятости PHY регистра….)
  • EREVID — номер ревизии enc28J60
  • ECOCON — управление CLKOUT

Как отмечалось ранее , прямого доступа к этим регистрам нет. Для того что бы сделать с ними какие либо действия необходимо обратиться к регистрам MII, которые и созданы как раз для этих целей .Процедура обращения к регистрам следующая:
Чтение:

  • Указываем адрес регистра к которому мы обращаемся в MIREGADR.
  • Устанавливаем бит MIIRD в регистре MICMD.
  • Ждем сброса бита BUSY в регистре MISTAT.
  • Сбрасываем бит MIIRD в регистре MICMD.
  • Читаем данные из регистров MIRDL и MIRDH

 

Запись:

  • Указываем адрес регистра к которому мы обращаемся в MIREGADR.
  • Записываем данные в регистры MIWRL (младший байт) и после младшего MIWRH (старший байт).
  • Ждем сброса бита BUSY в регистре MISTAT.

Регистры PHY:

  • 0х00  PHCON1 (управление режимом работы  PHY)
  • 0х01  PHSTAT  (статус PHY)
  • 0х02  PHID1    (идентификатор PHY)
  • 0х02  PHID2 (идентификатор PHY (остаток))
  • 0х10  PHCON2 (управление режимом  работы  PHY)
  • 0х11  PHSTAT2 (статус PHY)
  • 0х12  PHIE      (управления прерываниями PHY)
  • 0х12  PHIR      (флаги прерывания PHY)
  • 0x14  PHLCON (управление светодиодами)

С регистрами более менее понятно  , а что дальше ? Как с ними работать?

chipmk.ru

Подключение ENC28J60 + PIC к локальной сети .

Страница 1 из 3

1 часть.

 

Эта статья будет интересна в первую очередь тем, кто пишет программы  для микроконтроллеров на ассемблере и есть желание  собрать устройство , работающие в локальной сети или сети ethernet. Здесь будет применена связка  ethernet контроллер  enc28j60 и PIC18F46K20. Но можно применить и любой другой микроконтроллер , мне было просто удобно использовать именно этот , т.к. был  под рукой  и питание у обоих  3.3 вольта . 

 

 

 При использовании микроконтроллера с 5 вольтовым питанием  необходимо согласовать  уровни ,  на пример как показано в даташите.

   

 

  В  конечном итоге попробуем реализовать устройство удаленного управления и контроля (мониторинга) . В него предполагается внести функции контроля напряжения , температуры ,цифровые входа сигнализации и управления нагрузками. Все это будет работать по WEB интерфейсу , что в свою очередь очень удобно , нет необходимости в дополнительном ПО.

Сразу хочу определиться. Я не «крутой спец» в данной теме и практически сам постепенно разбираюсь в деталях , хотя и собирал различные конструкции (на СИ) в основном из  доработанных примеров. Так что прошу сильно не ругать. Но в любом случае все , что здесь будет написано (программа ) в начале проверяется  в «железе». Если будут замечания , или предложения , то пожалуйста на форум…

В этой части статьи мы дойдем  до приема пакетов, что уже позволит тем , кто более менее  разбирается в протоколах TCP/IP написать  ПП  для своей задачи.

Ну что ж начнем :

И начнем  с отладочной платы  , которую я использую для тестирования . Хотя это могут быть и другие платы или готовые модули на базе Ethernet контроллера NC28J60 (MM-ENC28J60 на пример ) или собственные , главное что бы они соответствовали рекомендаций производителя . Но лучше конечно собрать такую же плату, тем более что она не столько отладочная , сколько в конечном итоге должна стать законченным устройством.

 

 

 

 

 

Как видно из фотографий плата собрана из одностороннего текстолита и имеет минимальное количество деталей . Все свободные «пины» портов выведены на разъемы , к которым в последствии мы будем подключать различные датчики и управления нагрузками. Разъем RG-45 с интегрированными трансформаторами , полностью совместимый с контроллером enc28j60 . На плате установлен стабилизатор на 3.3 вольта , для питания как самого адаптера enc28j60 ,так и микроконтроллера PIC18F46K20 .Ток потребления enc28j60 приличный  — 250 мА . В начале я подумал , что мне попалась бракованная партия т.к.  сильно греются (температуру не измерял , думаю градусов 40 есть ) . Потом  выяснилось что это нормальное состояние для этой микросхемы .

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

Микросхемы enc28j60 выпускаются в разных корпусах  (DIP, SOIC и QFN) и назначение выводов могут отличаться. Я использовал в SOIC-28 , правда они чуть дороже чем DIP . Схему подключения , печатную плату можно будет скачать в конце статьи по ссылке ,  рассматривать технические характеристики будем частично , т.е. только то , что непосредственно нам необходимо . Ниже , на рисунке показана упрощенная архитектура ethernet-контроллера  и связь с PICом ,обмен данными   производится   по протоколу  SPI , прерывания не задействованы и соответственно в схеме не указаны .

 

 

  1. TX/RX Bufer -буфер , размером 8КБ , большая часть используется для приема пакетов ,другая  для передачи.
  2. MAC —  MAC (Medium Access Controller) модуль, который реализует IEEE 802.3 MAC-логики.
  3. PHY — (Physical Layer) модуль, для работы с витой парой (интерфейс , физический уровень) .

Организация памяти:

Вся память в ENC28J60 реализован в виде статической оперативной памяти. Есть три типа памяти в ENC28J60:

  • регистры управления
  • буфер Ethernet памяти
  • PHY регистры

 

 

Управляющие регистры — находятся в  4 банках , в каждом по 32 регистра (0х00-0x1F) ,  последние 5 регистров  в каждом банке одни и те же , т.е. при обращении к этим регистрам не нужно переключать банки.

Ethernet буфер (0х00-0FFF) — (8KB) буфер.

PHY регистры — регистры состояния, управления и конфигурирования модуля PHY . Прямого доступа к этим регистрам нет, к ним можно обращаться только через регистры Media Independent Interface (MII), реализованных в MAC.

 

Регистры управления.

На стадии «изготовления » программы нам необходимо постоянно «подглядывать»  где какой регистр расположен и за что отвечает, для удобства подкрасим регистры  и выделим по группам . Регистры прерывания и DMA использовать не будем , как и встроенный тест. По большей части к регистрам будем обращаемся только в процессе инициализации , когда настраиваем ENC28J60.

 

 

 

Повторюсь , что последними 5 регистрами можно работать не переключая банки .При обращении к другим регистрам в начале необходимо указать в каком банке они находиться . Разберем назначение отдельных регистров.

Банк0. 2 байта L и H (младший и старший).

  • ERDPT    (L/H) — указатель чтения буфера .      
  • EWRPT   (L/H) — указатель записи буфера.
  • ETXST (L/H) — начало  отправляемого пакета.
  • ETXND (L/H) — конец отправляемого пакета.
  • ERXST (L/H) — начало кольцевого буфера
  • ERXND (L/H) — конец кольцевого буфера.
  • ERXRDPT(L/H) — указатель кольцевого буфера .
  • ERXWRPT(L/H) — указатель кольцевого буфера .
  • ESTAT  — основной регистр (флаги)
  • ECON2 — основной регистр (авто инкрементирование указателей чтения и записи,уменьшение счётчика пакетов….)
  • ECON1 — основной регистр (выбор банка,разрешение прием данных ,разрешение отправка пакетов….)

Банк1

  • EPKTCNT — основной регистр (указатель (счетчик)принятых пакетов).

Банк2

  • MACON1- регистр MAC (управление потоком ,разрешение приема пакетов…)
  • MACON2- регистр MAC
  • MACON3- регистр MAC (режим работы,контрольная сумма,проверка длины фреймов…)
  • MACON4- регистр MAC
  • MABBIPG- регистр MAC (задержка между отправляемыми пакетами — 0x15 в полнодуплексном режиме)
  • MAIPGL — регистр MAC   (задержка между отправляемыми пакетами-0х12 рекомендация )
  • MAIPGH — регистр MAC  (задержка между отправляемыми пакетами-0х0C рекомендация )
  • MACLCON1 -регистр MAC (задержка  при возникновении коллизии= по умолчанию.)
  • MACLCON2 -регистр MAC (задержка  при возникновении коллизии= по умолчанию.)
  • MAMXF(L/H)-максимальная длина пакетов (прием , передача)
  • MICON  — регистр MII  (rezet MII)
  • MICMD — регистр MII (управление , операции с PHY) .
  • MIREGADR-регистр MII(указатель регистра PHY с которым будем работать)
  • MIWR (L/H) — регистр MII (данные для записи  в  регистр PHY)
  • MIRD(L/H) — регистр MII ( чтение данных из регистра PHY)

Банк3

  • MAADR1 — MAC адрес , байт № 5 .
  • MAADR0 — MAC адрес , байт № 6
  • MAADR3 — MAC адрес , байт № 3
  • MAADR2 — MAC адрес , байт № 4
  • MAADR5 — MAC адрес , байт № 1
  • MAADR4 — MAC адрес , байт № 2
  • MISTAT  — регистр MII (проверка занятости PHY регистра….)
  • EREVID — номер ревизии enc28J60
  • ECOCON — управление CLKOUT

Как отмечалось ранее , прямого доступа к этим регистрам нет. Для того что бы сделать с ними какие либо действия необходимо обратиться к регистрам MII, которые и созданы как раз для этих целей .Процедура обращения к регистрам следующая:
Чтение:

  • Указываем адрес регистра к которому мы обращаемся в MIREGADR.
  • Устанавливаем бит MIIRD в регистре MICMD.
  • Ждем сброса бита BUSY в регистре MISTAT.
  • Сбрасываем бит MIIRD в регистре MICMD.
  • Читаем данные из регистров MIRDL и MIRDH

 

Запись:

  • Указываем адрес регистра к которому мы обращаемся в MIREGADR.
  • Записываем данные в регистры MIWRL (младший байт) и после младшего MIWRH (старший байт).
  • Ждем сброса бита BUSY в регистре MISTAT.

Регистры PHY:

  • 0х00  PHCON1 (управление режимом работы  PHY)
  • 0х01  PHSTAT  (статус PHY)
  • 0х02  PHID1    (идентификатор PHY)
  • 0х02  PHID2 (идентификатор PHY (остаток))
  • 0х10  PHCON2 (управление режимом  работы  PHY)
  • 0х11  PHSTAT2 (статус PHY)
  • 0х12  PHIE      (управления прерываниями PHY)
  • 0х12  PHIR      (флаги прерывания PHY)
  • 0x14  PHLCON (управление светодиодами)

С регистрами более менее понятно  , а что дальше ? Как с ними работать?

chipmk.ru

Ethernet ENC28J60

Ethernet ENC28J60 -это «сетевая плата» для микроконтроллеров,подключается по шине SPI .Очень популярный и дешевый Ethernet модуль. 

Технические характеристики:
Питание модуля -3.3 в .
Скорость Etherneta 10мб/с.

При подключении напрямую к компьютеру необходим обратный (crossover) патчкорд !

Примерная цена 3.50$.

 

Подключение к Arduino:

ENC28J60Arduino
SO MISO
SCK SCK
RESET RESET
SI MOSI
CS 10*
GND GND

Питание 3.3в берем с соотвествествующего вывода на arduine или используем внешний стабилизатор. (рекомендуется)

Библиотека для работы в среде Arduina EtherCard.zip .Внутри архива имются примеры для работы с библиотекой.

*-Порт указывается в строке инициализации модуля:

  if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0) 

Подключение к Stellaris LM4F120 LaunchPad:

ENC28J60Stellaris
SO PB6
SCK PB4
RESET RST
SI PB7
CS PB5*
GND GND
INT PE4**

*-По умолчанию PB5,но может быть назначен другой.

**-Возможно не нужен.

Из-за слабого стабилизатора на Stellaris  LaunchPad нехобходимо отдельно ставить внешний стабилизатор на 3.3v ,например 78L33.

Библиотека для работы в среде energia EtherCard_v06.zip .Внутри архива имются примеры для работы с библиотекой.

 

homes-smart.ru

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

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