Форум по микроконтроллерам: Разработка устройства на enc28j60 - Форум по микроконтроллерам

Перейти к содержимому

  • 28 Страниц +
  • 1
  • 2
  • 3
  • 4
  • 5
  • Последняя »
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Разработка устройства на enc28j60

#41 Пользователь офлайн   nick14 

  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 465
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 21 Сентябрь 2012 - 10:19

Просмотр сообщенияVadimKHL (21 Сентябрь 2012 - 10:07) писал:

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


ERXWRPTx - Они указывают на адрес, по которому будет произведена запись следующего байта (начало следующего пакета). Доступны только для чтения.
0

#42 Пользователь офлайн   VadimKHL 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 238
  • Регистрация: 20 Сентябрь 12
  • ГородМосква

Отправлено 21 Сентябрь 2012 - 11:13

Теперь вроде в голове что то складывается, как принять пакет.
Как я понял, вектор статуса формирует сама ENC, где первые два байта и есть эти регистры (ERXWRPTx)?
Получается их можно не считывать (сами регистры).
Пока примерно так представляю обработку пакета:
1)Считываем первые два байта вектора статуса (начала следующего пакета), сохраняем их.
2)Считываем данные пакета, обрабатываем их.
3)Перемещаем регистры ERXRDPTx, на адресс начала следующего пакета (которые сохранили в п.1).
4)Делаем декремент счетчика пакетов EPKTCNT.

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

Сообщение отредактировал VadimKHL: 21 Сентябрь 2012 - 11:14

«Миллионы людей видели, как падают яблоки, но только Ньютон спросил почему»
0

#43 Пользователь офлайн   nick14 

  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 465
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 21 Сентябрь 2012 - 12:24

Просмотр сообщенияVadimKHL (21 Сентябрь 2012 - 11:13) писал:

Теперь вроде в голове что то складывается, как принять пакет.
Как я понял, вектор статуса формирует сама ENC, где первые два байта и есть эти регистры (ERXWRPTx)?
Получается их можно не считывать (сами регистры).
Пока примерно так представляю обработку пакета:
1)Считываем первые два байта вектора статуса (начала следующего пакета), сохраняем их.
2)Считываем данные пакета, обрабатываем их.
3)Перемещаем регистры ERXRDPTx, на адресс начала следующего пакета (которые сохранили в п.1).
4)Делаем декремент счетчика пакетов EPKTCNT.

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



  • Проверяем наличие пакетов в регистре EPKTCNT.
  • Первоначально адрес первого принятого пакета, хранится в регистрах ERXRDPT , считываем адрес из регистров ERXRDPT и сохраняем их.
  • Читаем заголовок принятого пакета и смотрим длину пакета, принимаем пакет.
  • Записываем сохраненные значения адреса нового пакета в ERXRDPT сделав его нечетным, (+1) т.е. инкремент.
  • Делаем декремент счетчика пакетов EPKTCNT.

По пункту 3:
Можно не читать заголовок , а принимать каждый раз максимальный пакет 1518 байт и обрабатывать его. (Я не пробовал). Но на мой взгляд проще посмотреть длину пакета в заголовке и принять то кол-во байт сколько содержит сам пакет.
0

#44 Пользователь офлайн   VadimKHL 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 238
  • Регистрация: 20 Сентябрь 12
  • ГородМосква

Отправлено 21 Сентябрь 2012 - 13:52

Спасибо. Вроде разобролась. Занялся написанием ПП для приема пакета.
Как что получиться, отпишусь.
«Миллионы людей видели, как падают яблоки, но только Ньютон спросил почему»
0

#45 Пользователь офлайн   nick14 

  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 465
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 21 Сентябрь 2012 - 14:27

Ок. Если что пишите.
0

#46 Пользователь офлайн   VadimKHL 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 238
  • Регистрация: 20 Сентябрь 12
  • ГородМосква

Отправлено 21 Сентябрь 2012 - 22:06

Написал программу приема пакетов, пока просто обрабатываю логику чтения буфера приемника.
Вывожу количество обработанных пакетов на ЖКИ. Все принятые данные пакета в некуда.
Подключил устройство крос кабелем к ноуту с WIN7. Счетчик быстро набирает количестово принятых пакетов до 30, потом медленнее и медленнее доходит до 60~64 принятых пакетов. Потом интервал приема нового пакета доходит аш до 1 минуты.
Если выдернуть кабель, снова подсоеденить, пакеты снова принимаются очень активно в устройство.

Вот теперь думаю как проверить правильность приема пакетов? Что посоветуете?

P.S.: По поводу указателя ERXRDPT, сделал как описанно в еррате, если указатель следующего пакета = ERXST, то ERXRDPT равен концу буфера ERXND.
Иначе ERXRDPT = указатель нового пакета - 1.
Конец буфера не четный адрес.

Пока писал это сообщение, принялось 102 пакетов.

Сообщение отредактировал VadimKHL: 21 Сентябрь 2012 - 22:07

«Миллионы людей видели, как падают яблоки, но только Ньютон спросил почему»
0

#47 Пользователь офлайн   nick14 

  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 465
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 21 Сентябрь 2012 - 22:40

В первую очередь необходимо скачать программу для визуального просмотра содержимого пакетов . Я делаю это при помощи WiresharkPortable, найти не составит труда. Там вы сразу увидите какие пакеты и их количество. Естественно первоначально идет много пакетов для установления связи, но лучше один раз увидеть...
0

#48 Пользователь офлайн   nick14 

  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 465
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 21 Сентябрь 2012 - 22:48

Цитата

P.S.: По поводу указателя ERXRDPT, сделал как описанно в еррате, если указатель следующего пакета = ERXST, то ERXRDPT равен концу буфера ERXND.
Иначе ERXRDPT = указатель нового пакета - 1.
Конец буфера не четный адрес.



Можно и так....
0

#49 Пользователь офлайн   VadimKHL 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 238
  • Регистрация: 20 Сентябрь 12
  • ГородМосква

Отправлено 22 Сентябрь 2012 - 00:24

Просмотр сообщенияnick14 (21 Сентябрь 2012 - 22:40) писал:

В первую очередь необходимо скачать программу для визуального просмотра содержимого пакетов . Я делаю это при помощи WiresharkPortable, найти не составит труда. Там вы сразу увидите какие пакеты и их количество. Естественно первоначально идет много пакетов для установления связи, но лучше один раз увидеть...


Эту прогу уже скачал. Там столько отображается пакетов, что не поймешь что к чему. Как я понял нахер этот ноут с Win7, там присутствует сеть WIFI, и куча включенных ПО которые лезут в сеть что бы обновиться. Еще мне кажется, т.к. он поддерживает сеть с IPv7 там лезут какие то дополнительные запросы по сети.
Подключил устройство к персональному ПК (через крос), выключил все возможные антивирусы и обновления. Выключил DHCP.
Устройство выключено, WinXP пишет кабель не подключен. Запускаю прогу WiresharkPortable тишена, нет передачи не одного пакета (по сравнению с ноутом).

Включаю питание на устройство, появляется линк ап, WIN пишет кабель подключен:

Изображение

Вот скрин окна проги:

Изображение

Уже результат лучше, принятых пакетов устройство показывает 41, а программа Wireshark 46. Но все равно не сходство.
Как я понимаю моё устройство должно принять все переданные пакеты от ПК, или нет?
Вот сижу и думаю, как на 100% проверить логику работы ПП приема пакетов.
Хотя даже пока еще не знаю, всели байты пакета она считывает.

Так как я понимаю Вы уже через все это прошли, подскажите, как это сделать.

P.S.: WinXP определеят подключение как 10 Мбит сеть.

Сообщение отредактировал VadimKHL: 22 Сентябрь 2012 - 02:47

«Миллионы людей видели, как падают яблоки, но только Ньютон спросил почему»
0

#50 Пользователь офлайн   VadimKHL 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 238
  • Регистрация: 20 Сентябрь 12
  • ГородМосква

Отправлено 22 Сентябрь 2012 - 02:03

Поэксперементировал с подключением и отключением сетевого кабеля устройства с компом.
Смотрел просто через статус подключения по локальной сети, без проги. Что интересно, такая же информация, при подключении моего устройства отправлено 46 байт с компа, принято устройством 41. Снова разница 5 байт потереной информации. Причем сколько раз не пробовал дергать провод лан, включать выключать устройство, все равно 5 байт теряется. Николай если вы в этом разобрались, сможете мне это объяснить?

Сообщение отредактировал VadimKHL: 22 Сентябрь 2012 - 03:02

«Миллионы людей видели, как падают яблоки, но только Ньютон спросил почему»
0

#51 Пользователь офлайн   nick14 

  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 465
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 22 Сентябрь 2012 - 07:19

Главное что пакетов не больше чем передано, а меньше. Сейчас могу только предположить возможную фильтрацию ENC пакетов, т.е. не все пакеты проходят. Судя по фото фильтруются пакеты (строка зеленого цвета ) посланные на IP 239.255.255.250.
В этом ничего страшного нет, т.к. эти пакеты не нужны. Вообще нужны для первоначального соединения только пакеты ARP (первые три на фото ).

ENC28 работает на 10 Мбит .
0

#52 Пользователь офлайн   nick14 

  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 465
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 22 Сентябрь 2012 - 07:25

Цитата

Вот сижу и думаю, как на 100% проверить логику работы ПП приема пакетов.


Нужно принятый пакет(ы) записать в память данных микроконтроллера и сравнить с тем что передано...
0

#53 Пользователь офлайн   VadimKHL 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 238
  • Регистрация: 20 Сентябрь 12
  • ГородМосква

Отправлено 22 Сентябрь 2012 - 19:51

Просмотр сообщенияnick14 (22 Сентябрь 2012 - 07:25) писал:

Нужно принятый пакет(ы) записать в память данных микроконтроллера и сравнить с тем что передано...


Попробую сделать так, отпишусь что получилось.
Мне бы конечно хотелось посмотреть, правильно ли отрабатывается пакет, который не 1, а допустим 61, зная что он проходит через границу конца буфера.
А есть такие проги, которые могут сами посылать пакет, когда пользователь этого захочет? и блокировать передачу пакетов самой винды?

Забыл спросить, располежение байтов в заголовке такое?:
слудующий пакет, младший
слудующий пакет, старший
длинна пакета, младший
длинна пакета, старший

Сообщение отредактировал VadimKHL: 22 Сентябрь 2012 - 21:24

«Миллионы людей видели, как падают яблоки, но только Ньютон спросил почему»
0

#54 Пользователь офлайн   nick14 

  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 465
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 23 Сентябрь 2012 - 00:45

Цитата

Забыл спросить, располежение байтов в заголовке такое?:
слудующий пакет, младший
слудующий пакет, старший
длинна пакета, младший
длинна пакета, старший


Да расположение байтов такое.

Что касается пакетов в сети ....Даже между двумя устройствами первоначально идет обмен различными пакетами . К примеру как узнать какое устройство находиться в сети (его мас или IP ), для этого передается широковещательный пакет (всем), а уже устройства отвечают "Я здесь , мой адрес такой то " и в последующем сервер будет обращаться непосредственно к нему периодически контролируя его нахождение в сети.
Что бы посмотреть переход границы конца буфера нужно контролировать не номер пакета а его адрес. При подходе к концу буфера принимать пакет в память и проверять содержимое.

А проект на каком микроконтроллере делаете?
0

#55 Пользователь офлайн   VadimKHL 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 238
  • Регистрация: 20 Сентябрь 12
  • ГородМосква

Отправлено 23 Сентябрь 2012 - 00:54

Просмотр сообщенияnick14 (23 Сентябрь 2012 - 00:45) писал:

А проект на каком микроконтроллере делаете?


На PIC18F452.

Какие то возникают у меня проблемы при записи во флеш память. В Mplab все работает, а при чтении через PicKit3 там где
была произведена запись 0 во flash память, читается FF.
Разбираюсь в чем ошибка...
«Миллионы людей видели, как падают яблоки, но только Ньютон спросил почему»
0

#56 Пользователь офлайн   nick14 

  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 465
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 23 Сентябрь 2012 - 01:04

Просмотр сообщенияVadimKHL (23 Сентябрь 2012 - 00:54) писал:

Просмотр сообщенияnick14 (23 Сентябрь 2012 - 00:45) писал:

А проект на каком микроконтроллере делаете?


На PIC18F452.

Какие то возникают у меня проблемы при записи во флеш память. В Mplab все работает, а при чтении через PicKit3 там где
была произведена запись 0 во flash память, читается FF.
Разбираюсь в чем ошибка...


У меня на 46к20 , на работе где то лежит отладочная плата с 452. Так что если что, при необходимости смогу проверить на ней ваш проект.

Если читается FF , то скорей всего ничего не записано...
0

#57 Пользователь офлайн   VadimKHL 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 238
  • Регистрация: 20 Сентябрь 12
  • ГородМосква

Отправлено 23 Сентябрь 2012 - 02:57

Просмотр сообщенияnick14 (23 Сентябрь 2012 - 01:04) писал:

У меня на 46к20 , на работе где то лежит отладочная плата с 452. Так что если что, при необходимости смогу проверить на ней ваш проект.


Это хорошо, сможем вмести проверить работу в железе, если Вам это будет это интересно.

Разобрался с записью во флеш, пакеты принимается, байтов не каких не терятся.
Пакеты действительно не принимаются от отправителя начинающегося с IP 249, ENC их отбрасывает. Это объясняет разницу в НЕ приеме 5 пакетов.

Есть некоторые непонятки, я думаю Вы сможете мне их объяснить. Сил нет, спать хочется.
Позже разрисую что принимается, там и укажу в чем непонятка происходит.

А так почему незакончили свои статьи на портале? Вроде много народа ждут продолжения?
Пока я "вкурил" примерно половину даташита на ENC, понял что еще все в переди. Там все идут напоминания про модуль DMA,
Вы с ним работали?

Кстати, знание стека TCP/IP у меня такое же как и ENC, т.е. 0.
Наверно замучаю вас вопросами в дальнейшем.
«Миллионы людей видели, как падают яблоки, но только Ньютон спросил почему»
0

#58 Пользователь офлайн   nick14 

  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 465
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 23 Сентябрь 2012 - 08:26

Цитата


А так почему незакончили свои статьи на портале? Вроде много народа ждут продолжения?
Пока я "вкурил" примерно половину даташита на ENC, понял что еще все в переди. Там все идут напоминания про модуль DMA,
Вы с ним работали?

Кстати, знание стека TCP/IP у меня такое же как и ENC, т.е. 0.
Наверно замучаю вас вопросами в дальнейшем.


На момент написания третьей части статьи у меня уже была готова последняя часть. При реализации протокола TCP (он как раз нужен для открывания HTML странички ) возникли ошибки, причем не каждый раз. Разобраться до конца не успел, потерял данные. А потом отложил до лучших времен, предполагая что это ни куму не нужно.
А вопросы задавайте, мне самому интересен этот проект.
0

#59 Пользователь офлайн   nick14 

  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 465
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 23 Сентябрь 2012 - 08:49

Цитата

Там все идут напоминания про модуль DMA,
Вы с ним работали?

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

#60 Пользователь офлайн   VadimKHL 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 238
  • Регистрация: 20 Сентябрь 12
  • ГородМосква

Отправлено 23 Сентябрь 2012 - 19:11

И так, вот такой получился результат:

Изображение

Изображение

Картинка 1, там ARP запрос. Зеленым выделил те данные, которые реально передаются.
Последние четыре байта это контрольная сумма? А нули как я понял это автозаполнение до 60 байт. В итоге ARP пакет получается имеет общую длинну 64 байта. Картинка 2, там тоже какой то пакет, все байты сходятся. Два байта EEEE это я добавил разделитель между принятыми пакетами, для удобства.

Что скажите? ПП чтения пакетов вроде функционирует нормально.

Перехожу к изучению статьи 2, вашего проекта.
«Миллионы людей видели, как падают яблоки, но только Ньютон спросил почему»
0

Поделиться темой:


  • 28 Страниц +
  • 1
  • 2
  • 3
  • 4
  • 5
  • Последняя »
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей