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

Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 13:32:25

Здравствуйте, уважаемые коты :) Сколько раз пытался взяться за изернет, но всё никак не мог собраться с силами. Но на этот раз решил этот вопрос довести до логического конца. Купил себе модуль ENC28J60-H от такой. Прочитал достаточно хорошие статьи здесь и и здесь. Сделал всё как написано и... ничего не работает :( Т. к. с Ethernet я до этого не работал, родилась целая куча вопросов, которые я надеюсь смогу здесь прояснить. Итак:
1) Допустим, я хочу произвести пинг своего устройства. Но когда я работаю с консолью в windows я лишь ввожу IP адрес узла получателя, а в Ethernet заголовке, как я понял, должен так же фигурировать его MAC адрес. Как PC узнает MAC моего устройства? Или во время пинга сначала отсылается ARP пакет?
2) Есть ли какое-нибудь приложение, с помощью которого можно отправить UDP пакет из PC на внешнее устройство. Нашёл утилитку hercules_3-2-8 и ещё вот такую. Но там опять-таки негде ввести MAC получателя.
Заранее спасибо.

Re: Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 20:11:07

Как PC узнает MAC моего устройства? Или во время пинга сначала отсылается ARP пакет?


Насколько я понимаю отсюда, в случае, если в локальной ARP-таблице отсутствует MAC-адрес, соответствующий интересующему IP-адресу, перед выполнением запроса по IP выполняется ARP-запрос. Впрочем, я не ручаюсь за точность своего вывода.

Есть ли какое-нибудь приложение, с помощью которого можно отправить UDP пакет из PC на внешнее устройство.


Для этого можно написать простенький скрипт на Python или Lua, например. Однако, насколько я знаю, в высокоуровневых API отсутствует возможность прямого указания MAC-адреса получателя. Похоже, что эта задача целиком решается на уровне железа и драйверов.

Re: Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 20:41:56

Т.е. если я хочу произвести пинг устройства, то я должен реализовать возможность принятия ARP пакетов? А ситуация выходит такая: PC отсылает ARP пакет с указанным IP адресом, далее получает от девайса MAC и лишь затем отправляет пакеты для пинга. Правильно?

Re: Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 20:51:51

YS писал(а):перед выполнением запроса по IP выполняется ARP-запрос.
Так и есть. Причем - отсылается несклько раз с таймаутом ожидания ответа.
Грендайзер писал(а):Т.е. если я хочу произвести пинг устройства, то я должен реализовать возможность принятия ARP пакетов?
Разумеется. И не только принятие ARP-запроса, но и формирование ARP-ответа.
Впрочем, никто не мешает локально создать свою статическую таблицу ARP-записей. Консольная команда "arp" тебе в помощь. :))

Грендайзер писал(а):Сделал всё как написано и... ничего не работает
Странно, по первой же ссылке: "Вот так будет выглядеть стек протоколов, который мы реализуем:" -- и сразу же четко видное ARP.
Выходит, не все сделал. :)
А ниже "ARP (Address Resolution Protocol) — вспомогательный протокол, позволяющий получить MAC-адрес узла по IP-адресу." -- там же всё написано!

Теперь даже не знаю что советовать - то ли у тебя ARP не сделано, а может и ICPM не реализован?

Re: Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 21:10:09

Теперь даже не знаю что советовать - то ли у тебя ARP не сделано, а может и ICPM не реализован?
:? Я как бы не понял... а что такое ICPM и зачем он мне нужен. Я подключил устройство к PC (напрямую) перекомпилировал проект отсюда ну и... не пингуется :(. Там в комментариях, автор написал, что подключается к PC через хаб или ещё что то... я же могу к нему (к PC) напрямую подключиться?

Re: Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 21:27:56

ICMP. Это официальное название протокола, по которому производится эхо-запрос.

При подключении к ПК напрямую необходимо установить у оного ПК статический IP-адрес.

Re: Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 21:28:26

Грендайзер писал(а):Я как бы не понял... а что такое ICPM и зачем он мне нужен.
Давай продолжим вместе читать статью по первой ссылке:
"ICMP (Internet Control Message Protocol) — вспомогательный протокол сетевого уровня, работающий «рядом» с IP. ICMP служит, в том числе, и для диагностики сети. Всем известная утилита ping использует ICMP Echo-запросы. Если мы хотим, чтобы девайс пинговался, можно добавить поддержку ICMP Echo-запросов."
Грендайзер писал(а):Я подключил устройство к PC (напрямую) перекомпилировал проект отсюда ну и... не пингуется :(.
Не понял фразы "напрямую к PC".
Если это то, о чем я подумал - а кабель-то какой применён?
И какой IP выставлен на компе?
И работает ли вообще ENC? Кто мешает почитать её статусные регистры и вывести хотя бы чрез UART?
А потом там же через UART вывести диагностику: приняли Ethernet-пакет такой-то, определили тип протокола, .....

Re: Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 21:56:59

Давай продолжим вместе читать статью по первой ссылке:

Звиняйте, к терминологии не привык :)))
Не понял фразы "напрямую к PC".
Если это то, о чем я подумал - а кабель-то какой применён?

Ну как... обычный UTP 5cat.
И работает ли вообще ENC?

Да... как мне кажется тут всё работает... Я читал ревизию микросхемы (в режиме отладки глядел - ревизия 6).
А потом там же через UART вывести диагностику: приняли Ethernet-пакет такой-то, определили тип протокола

Вот тут то и затыка, взял за образец проект вот этой статьи... Такое чувство, что микросхема вообще не ловит пакеты. С компа отправляю пакеты с IP который указал в заголовочном файле lan.h (#define IP_ADDR inet_addr(192,168,2,222)). Правда не знаю какую маску подсети указывать... шлюзы какие то... голова пухнет :( :shock:

Re: Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 22:06:55

Ну как... обычный UTP 5cat.


В смысле кросс или прямой.

Re: Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 22:11:17

Грендайзер писал(а):Ну как... обычный UTP 5cat.
Я так и подумал. Для начала намекну:
У Ethernet-кабеля 10/100 используются две дифференциальные пары: передатчик и приемник. Очень-очень грубо это как у UART - провод RX и TX. Догадываешься?
Грендайзер писал(а):Такое чувство, что микросхема вообще не ловит пакеты.
Во-во, тебе очень нужен кросс-кабель, ибо ENC не умеет автоматически переключать вход/выход.
А вообще очень стоит подключать и комп и устройство через хаб - сразу будет видно хотя бы наличие линка. Да и факт передачи пакета можно увидеть.
Грендайзер писал(а):Да... как мне кажется тут всё работает...
Статус "линк" ENC выдаёт?
Грендайзер писал(а):С компа отправляю пакеты с IP который указал в заголовочном файле
Я спросил - какой IP-адрес выставлен у компа, а не куда отправляется. Без правильного адреса, маски (шлюз тпока не нужен) - работать и не будет!
Грендайзер писал(а):Правда не знаю какую маску подсети указывать... шлюзы какие то... голова пухнет :( :shock:
может начать с чтения документации и азов TCP/IP?

Re: Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 22:21:39

Во-во, тебе очень нужен кросс-кабель, ибо ENC не умеет автоматически переключать вход/выход.

А вот тут можно поподробнее... Не совсем понял о чём речь...
может начать с чтения документации и азов TCP/IP?

Да тут как бы... начитался вообщем в своё время... надолго интерес к ethernet отпал... вот боюсь если много читать про него начну опять заброшу...

Re: Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 22:38:31

Грендайзер писал(а):А вот тут можно поподробнее... Не совсем понял о чём речь...
С UART работал? Знаешь, что нужно подключать выход передатчика устройства 1 со входом приемника устройства 2 и наоборот?

У Ethernet всё то же самое, только не 1 провод RX или TX, а дифф-пара. http://www.hardware.zp.ua/docs/ether10.htm
Современные сетевые карты в компе умеют автоматически переключать вход и выход - им всё равно какой кабель: прямой или кросс. Но это не про ENC!
Грендайзер писал(а):Да тут как бы... начитался вообщем в своё время... надолго интерес к ethernet отпал...
Без отсутствия понимая азов и документации в сетевых протоколах делать нечего. А в случае с низкоуровневым программированием сети - ещё более необходимо знать матчасть.
Я настойчиво рекомендую начать с доков - они рулез.

Re: Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 22:41:10

А дайте какую нибудь ссылочку про эти кросс кабели...

Re: Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 22:45:54

Грендайзер писал(а):кросс кабели...
ссылочка

Re: Ethernet. Вопросы по интерфейсу и реализации

Вт апр 19, 2016 22:48:34

:)) :)) Спасибо большое за помощь. Нужно информацию переварить теперь.

Re: Ethernet. Вопросы по интерфейсу и реализации

Ср апр 20, 2016 16:35:05

Вообщем сделал кабель как сказал mas123 и решил ещё раз протестить этот проект. В итоге периодически выскакивает ерунда как на картинке. 192.168.1.76 - IP компьютера, а 192.168.1.25 - IP ENC28J60. Отключил питание - картина не поменялась. Вообщем всё перезагрузил. Картина изменилась. Стал писать, что пакеты пропадают... Опять включил ENC картина повторилась... Периодически повторялась картина с картинки... иногда пакеты пропадали. Смотрел в Ваер Шарке... ARP запрос с PC шёл, а ответа нет. Вообщем уже разочаровался, но тут при очередном пинге потеряно было не 100% и не 0% а 75%. Посмотрел в ваер шарке - ОТВЕТ! И в ответе мак который я задал в проекте. Вообщем оказалось, что контроллер всё же отвечает на ARP но очень неохотно и редко... Что тут может быть?
Вложения
ping.jpg
(52.5 KiB) Скачиваний: 333

Re: Ethernet. Вопросы по интерфейсу и реализации

Ср апр 20, 2016 18:35:40

Грендайзер писал(а):ARP запрос с PC шёл, а ответа нет.
Отдели мух от котлет - должен быть один успешный ARP-запрос/ответ, далее комп запоминает данные в ARP-таблице на... вполне длительный срок.
А вот "потеряно 75%" - это уже ICMP-запросы.
Таки шо у тебя теряется и "неохотно отвечается" - ARP или ICMP?
Грендайзер писал(а):но очень неохотно и редко... Что тут может быть?
Видимо что-то неисправно. :)))
Может быть кабель - обжатый плохо или неправильно (не по стандартным цветам проводов) может "терять" пакеты.
Ты вот даже не сообщил - а доходят ли все пакеты до ENC....

Далее... А далее я всегда смотрю диагностику из устройства. Подключаю консольку по UART и вывожу туда данные и события:
- приняли Ethernet-пакет
- распарсили, получили успешный/нет пакет
- получили IP / ARP / ICMP пакет
- сформировали ответ и передали его в ENC
- успешно передали пакет в линию...
И разумеется вывожу диагностику работоспособности устройства - отмечаю каждый или там каждый 10-й вызов функции ***_poll() у стека.
А так же вывожу состояние и изменение статусов ENC.
И проблема легко дебажится.

Re: Ethernet. Вопросы по интерфейсу и реализации

Ср апр 20, 2016 19:42:41

Ну на консольку то вывести дело не хитрое... правда у меня из железа сейчас только МК, макетка и ENC... где то надо UART модуль подрезать... впрочем к делу! Решил я проверится на проектике из первой статьи. Прошил... запустил пинг - ответ на ARP есть... пакеты все пропали... ещё несколько раз запускаю пинг... ни ответа ни привета... И тут в голове промелькнуло: А ЧТО? А ВДРУГ! :))) :))) Перепрошил, ещё раз пингую - есть ответ на ARP, пока виндовс не забыл мой MAC ещё раз перепрошиваю МК и пингую - один из 4-х отправленных пакетов вернулся (ответ на ICMP)... задержка там что то вроде 1мс... Остальные пакеты пропали. Где затык?! Учитывая, что я с Ethernet не очень... Да и с Си на Вы, как отловить баг ума не приложу :dont_know: Подскажите, с чего начать то?

Re: Ethernet. Вопросы по интерфейсу и реализации

Ср апр 20, 2016 20:01:59

Грендайзер писал(а):Подскажите, с чего начать то?
Мне казалось, я дал вполне ясный и подробный алгоритм отладки устройства.
Не, можно конечно оправдываться отсутствием необходимых инструментов для отладки.
Я вот тоже - всё ленюсь прикупить осцилл домой, поэтому приходится извращаться при отладке различных 1ware и всяких там i2c.

Можно перепрошивать по 33 раза один и тот же файл в контроллер. Только в чем смысл? У тебя что, биты в контроллере изгибаются и портятся?
Единственный полезный момент от перепрошивки - это перезапуск устройства, соответственно и полная инициализация ENC.
Ходят слухи, что можно перезапустить и как-то иначе... :tea:

Не хочешь вешать UART-консоль.... Ну, подключи LCD-экран и выводи туда диагностику.
Да хоть подключи 42 светодиода на все свободные ноги контроллера, и ими индицируй текущее состояние системы.
Грендайзер писал(а):Учитывая, что я с Ethernet не очень... Да и с Си на Вы
Вообще-то вот это - идеальный случай хорошо изучить работу Ethernet и TCP/IP.
Также изучить всё особенности работы PHY, как и поднять скилл чтения даташитов. А читая код uIP - можно и знания С подтянуть.

Грендайзер писал(а):пока виндовс не забыл мой MAC
Т.е. мой совет изучить консольную команду "arp" и прописать статическую ARP-связь тоже был полностью проигнорирован.... Шикарно! :facepalm:

Re: Ethernet. Вопросы по интерфейсу и реализации

Ср апр 20, 2016 20:16:16

Т.е. мой совет изучить консольную команду "arp" и прописать статическую ARP-связь тоже был полностью проигнорирован.... Шикарно! :facepalm:

Нет... про это я хорошо помнил... только в тот момент под рукой тырнета не было... ну а как этим "arp" я прочесть не успел :roll:
Я вот тоже - всё ленюсь прикупить осцилл домой, поэтому приходится извращаться при отладке различных 1ware и всяких там i2c.

Вообщем всё понятно... Придётся таки какого нибудь инженер/радиолюбителя убить и завладеть его UART модулем... не охота конечно... но что делать :(
mas123
,YS, большое спасибо за помощь. Буду дальше копаться... пока не появится очередная конкретика в вопросах.
P.S.
Кстати по поводу конкретики: вот почитываю тут разное про Ethernet но нигде найти не могу: представим ситуацию - я взял и соединил 2 PC между собой с помощью UTP кабеля по Ethernet. Что будет дальше то? Кто из них первый разговаривать то с соседом начнёт? Или они будут одновременно кричать пока кто то не сдастся?
Ответить