реклама на сайте
подробности

 
 
> Ethernet+TCP/IP, Самое дешевое решение
Rst7
сообщение Mar 5 2008, 11:51
Сообщение #201


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Решил поделиться с народом своим проектом. Положу в отдельную тему, а не в "Исходники...", потому как скорее всего надо будет обсудить wink.gif

Предыстория такова - давно хотел сделать дешевое и простое подключение своего устройства к Ethernet, естественно с поддержкой TCP/IP. Сначала рассматривались общеизвестные варианты типа RTL8019, Wiznet и т.д. - первый отпал по причине слишком уж камня большого, второй - дорого. Была попытка реализовать PHY-уровень при помощи USART в режиме SPI на Mega88/168, однако оказалось, что если с передачей нет проблем, с приемом все хуже - слишком уж сложной получается схема синхронизации тактовой частоты проца с синхросигналом, выделенном из манчестера, в единичном экземпляре оно конечно поднимается, но о серийном повторении - ну никак.
Потом взгляд переместился на микросхемы PHY, и, при внимательном изучении, оказалось, что довольно просто обеспечить работу с PHY при тактовой проца 20МГц. Да и со стоимостью нет вопросов - Realtek'овский RTL8201BL стоит всего около 1$ (как заметил zltigo, Realtek вообще славится экстремально дешевыми решениями в области Ethernet). Была сделана тестовая платка (схему и pcb прилагаю) и на ней все запущено. Не обошлось без подводных камней, но они были успешно обойдены wink.gif

.SCH и .PCB файлы в архиве - это схема и разводка тестовой платы. Проц используется ATMega168-20AI, PHY - уже упомянутый RTL8201BL, 74HCT547 - буферный регистр, заодно и преобразование уровней 3.3-5В (только не всех линий, по науке надо было еще кое-что преобразовать, но было лень. Вдруг будете использовать в более-менее серийном устройстве - не забудьте все выполнить как положено)

Сами исходники - под EWAVR5.10.
Код
          1 960 arp.h - заголовочник для ARP-пакетов
          6 404 eeprom_3.s90 - работа с троированным eeprom
          1 668 ethernet.h - заголовочник для Ethernet-пакетов
<DIR>          HTMLsource - каталог с исходными HTML-файлами и компрессором, который генерирует файл pages.c, запустите generate.cmd и посмотрите
            831 icmp.h - заголовочник для ICMP-пакетов
          2 400 ip.h - заголовочник для IP-пакетов
          3 487 mac.c - передатчик Ethernet-пакетов
          3 365 macros.m90 - вот не помню, файл из стандартного иаровского комплекта, зачем перенес в проект - хоть убейте не помню
          6 240 mac_rx.asm - прием Ethernet-пакетов
         21 591 main.c - HTTP-сервер
          4 188 md5cheat.c - MD5 для Digest-авторизации
         16 690 network.c - собственно TCP/IP-стек
            102 network_addr.h - адреса по умолчанию
          5 728 network_routines_avr.c - оптимизированные под AVR всякие процедурки, используемые стеком
         52 023 NikeE.ewp - проект
            159 NikeE.eww - воркспейс
          2 890 nike_e.h - заголовочник всего проекта
          4 993 pages.c - запакованные HTML-странички
          1 159 pages.h - заголовочник от страничек
<DIR>          PCAD - схема/плата
            204 prog.bat - прошиватель
          1 733 stdafx.h - типы данных
          2 731 stuff.asm - тут быстрый i2a (для AVR) и таблица CRC32
          6 256 tcp.h - заголовочник для TCP-пакетов


Заголовочники написаны на основе заголовочников из стека Prottoss'а, за что ему и спасибо.

Есть пара маленьких тонкостей - прием пакета написан на ассемблере, а вот передача - на Си, но я посматривал в листинг, посему исправления нужно вносить очень аккуратно, а вообще-то желательно переписать на ассемблере и посылку пакета. По простому можно заставить IAR сгенерить не листинг, а исходный текст (есть там галочка) и подключить его к проекту вместо mac.c.

На MAC-уровне реализовано управление входящим потоком при помощи метода, среднего между Back-pressure и Collision-Based. При переполненом внутреннем буфере на первый входящий пакет генерируется встречный пакет (как в Collision-Based) из 0x55, который оканчивается, когда буфер освобождается (Back-pressure).

Внутренние буфера 2*256 байт, поэтому, например, ICMP-пакет пинга с -l 209 дропается, а с -l 208 - нормально обрабатывается. Для TCP это не мешает (хотя, конечно, и падает скорость передачи), т.к. максимальный размер пакета регулируется окном.

Интерфейс стека с пользовательским софтом выполнен как вызов CallBack-функции, которая должна обрабатывать события TCP_EVENT_CONREQ (запрос соединения), TCP_EVENT_CONNECTED (соеденино), TCP_EVENT_CLOSE (закрыто), TCP_EVENT_ABORT (прервано), TCP_EVENT_ACK (подтверждение ранее переданных данных), TCP_EVENT_DATA (принята новая порция данных), TCP_EVENT_REGENERATE (повтор посылки с начала), TCP_EVENT_SEND (посылка следующей порции). Непосредственно разбор этих сообщений выполняется в HTTP_hook, который вызывает HTTP_hook_DATA_RX для обработки новых данных (например, собственно запроса GET/POST) и HTTP_hook_DATA_TX (генерация данных для передачи).

На данный момент реализованы только слушающие (серверные) сокеты, но нетрудно сделать и клиентские.

В HTTP-сервере реализована digest-авторизация. Соответственно пришлось пободаться с MD5 в плане уменьшения занимаемого места, удалось поместить его в 1100 байт, больше его под AVR не ужмешь видимо (хотя, конечно, пару байт всегда можно сэкономить, я имею в виду глобальное ужимание).

Само наполнение HTTP-сервера сейчас банальное - управление портом С, вывод значений АЦП и отдельная страничка настроек IP/MAC-адресов и задания новых login/pass.


Ну а вот так выглядит спаяное устройство
Прикрепленное изображение


Ну и о скорости. wget в зависимости от погоды показывает 130-160 КБайт/с (порядка 1 Мбита/с). Теоретический предел приема - гдето под 4Мбита/с. Т.е. дропать пакеты он сможет именно с такой скоростью smile.gif (и даже быстрее, потому что сначала я проверяю, мой ли пакет, а только потом считаю CRC32, этот расчет выполняется медленнее приема пакета, тут ничего не попишешь)
Прикрепленные файлы
Прикрепленный файл  NikeE.zip ( 106.73 килобайт ) Кол-во скачиваний: 11119
 


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Rst7   Ethernet+TCP/IP   Mar 5 2008, 11:51
- - alewka   Закидываю PCB в архиве: test.DXF (возможно открыт...   Oct 11 2009, 14:50
- - Rst7   ЦитатаЗакидываю PCB в архиве Посмотрел. Во-первых...   Oct 11 2009, 15:32
|- - alewka   Цитата(Rst7 @ Oct 11 2009, 18:32) Посмотр...   Oct 11 2009, 15:54
- - Rst7   ЦитатаКак кстати подобрать эти катушки? Это не ка...   Oct 11 2009, 16:06
|- - alewka   Цитата(Rst7 @ Oct 11 2009, 19:06) Это не ...   Oct 11 2009, 16:18
- - Duhas   ferrite bead или beard   Oct 11 2009, 16:07
- - Rst7   Цитатаferrite bead Именно так, только еще есть и ...   Oct 11 2009, 16:12
- - Rst7   ЦитатаЯ так понял что это ферритовый фильтр? Он с...   Oct 11 2009, 16:21
- - Duhas   такое живет на старых звуковухах... в т.ч. ИСАшных...   Oct 11 2009, 16:26
- - alewka   Ребята, вобщем теперь на PWFBIN (8pin) 2,25в и на ...   Oct 11 2009, 17:09
- - Rst7   ЦитатаСейчас буду думать чтоб сделать такого ) Пр...   Oct 11 2009, 17:18
- - BIBOSS   Подскажите пожалуйста кроме RTL 8201BL или 8201C...   Jan 18 2010, 13:04
- - Rst7   ЦитатаПодскажите пожалуйста кроме RTL 8201BL или 8...   Jan 18 2010, 13:27
- - BIBOSS   Дело не в цене просто в моем городе их нужно заказ...   Jan 18 2010, 15:32
|- - RA3WUM   Цитата(BIBOSS @ Jan 18 2010, 18:32) Дело ...   Jan 18 2010, 17:09
|- - defunct   Цитата(BIBOSS @ Jan 18 2010, 17:32) Дело ...   Jan 21 2010, 16:24
- - Laptop   Разбирался тут с RTL8201CP. Решил заодно и на эту ...   Jan 18 2010, 21:51
- - Rst7   Может и перепутаны. В современном мире это не влия...   Jan 19 2010, 06:34
- - _Pasha   ENC28j60 уже 3 бакса. Mega8 против 168-й на 2 ба...   Jan 22 2010, 05:05
|- - zltigo   Цитата(_Pasha @ Jan 22 2010, 08:05) ENC28...   Jan 22 2010, 08:18
|- - _Pasha   Цитата(zltigo @ Jan 22 2010, 11:18) повто...   Jan 22 2010, 12:50
|- - zltigo   Цитата(_Pasha @ Jan 22 2010, 15:50) Не по...   Jan 22 2010, 14:19
|- - RA3WUM   Цитата(zltigo @ Jan 22 2010, 17:19) все о...   Jan 24 2010, 12:24
|- - zltigo   Цитата(RA3WUM @ Jan 24 2010, 15:24) Спаси...   Jan 24 2010, 13:27
|- - defunct   Цитата(RA3WUM @ Jan 24 2010, 14:24) Тепер...   Jan 26 2010, 00:29
|- - zltigo   Цитата(defunct @ Jan 26 2010, 03:29) Рабо...   Jan 26 2010, 09:09
|- - defunct   Цитата(zltigo @ Jan 26 2010, 11:09) да...   Jan 26 2010, 16:18
|- - zltigo   Цитата(defunct @ Jan 26 2010, 19:18) а ле...   May 11 2010, 15:16
- - uriy   Цена у них похоже совсем не детская. Добавив пару ...   Jan 26 2010, 07:00
- - gena_p1   Простите чайника, но возникло несколько вопросов п...   May 11 2010, 14:14
- - Rst7   Цитата1) МК запитан от 5В для максимальной произво...   May 11 2010, 15:20
- - ArtemDement   Цитата(Rst7 @ Mar 5 2008, 15:51) Ну а вот...   May 15 2010, 07:52
- - Rst7   Цитатав качестве отладочной платы ? Страна какая?...   May 15 2010, 10:27
|- - ArtemDement   Цитата(Rst7 @ May 15 2010, 14:27) Страна ...   May 17 2010, 03:35
- - sensor_ua   ЦитатаКстати, документированной процедуры восстано...   May 15 2010, 12:05
|- - zltigo   Цитата(sensor_ua @ May 15 2010, 15:05) По...   May 15 2010, 12:12
|- - LightElf   Цитата(zltigo @ May 15 2010, 16:12) Ну, д...   May 26 2010, 17:52
|- - gena_p1   у меня очередной вопрос по схеме назрел: 3) диоды ...   Jun 8 2010, 11:12
- - Rst7   ЦитатаСтрана - Россия. Не годится.   May 17 2010, 08:55
- - Rst7   Цитатано зачем? Для RTL8201CP с нетолерантными к ...   Jun 8 2010, 12:14
- - Rst7   ЦитатаUDP хотя-бы, и проще возможно. Зачем? Цита...   Jun 18 2010, 09:14
- - BarsMonster   Наткнулся на тему, поковырял доноров на предмет PH...   Jun 19 2010, 01:19
- - Rst7   QUOTE Насколько трудно может быть переделать на од...   Jun 19 2010, 10:16
- - algidim   А если два таких устройства подключить к хабу – во...   Jun 21 2010, 07:43
- - Rst7   QUOTE А если два таких устройства подключить к хаб...   Jun 22 2010, 12:37
- - skyled   Rst7, спасибо за Вашу разработку. Мне сейчас нужно...   Jul 19 2010, 07:26
- - Rst7   QUOTE Можно ли будет передать пакет от ПК в USART ...   Jul 19 2010, 07:45
- - skyled   ЦитатаМожно. Но трудозатраты зависят от того, кака...   Jul 19 2010, 08:06
|- - ksa   Цитата(skyled @ Jul 19 2010, 11:06) Сейча...   Jul 29 2010, 13:06
- - Rst7   QUOTE В исходниках из настроек усарта я нашел толь...   Jul 19 2010, 08:11
- - skyled   ЦитатаИ вообще, я бы на Вашем месте поставил бы в ...   Jul 19 2010, 08:43
- - Rst7   "Генеральский эффект" - это немного друг...   Jul 19 2010, 08:57
- - skyled   Вот если бы изготовить это самое "намного про...   Jul 19 2010, 09:58
- - Rst7   QUOTE С помощью Вашей разработки я смогу обмениват...   Jul 19 2010, 10:06
- - skyled   Ну если намекнете куда девать исходящие байты и гд...   Jul 19 2010, 11:27
- - Rst7   Для скорости 115200 там все не так просто. Пакет E...   Jul 19 2010, 11:32
- - plus   Rst7, нескромный вопрос можно задать? Вместо RTL82...   Jul 29 2010, 21:45
- - Rst7   Даташит на CL в студию, глянем. CP используется ле...   Jul 30 2010, 07:48
- - plus   Цитата(Rst7 @ Jul 30 2010, 11:48) Даташит...   Jul 30 2010, 14:28
- - Rst7   Да вроде пойдет. Кстати, он 5V-Tolerant. Только во...   Jul 31 2010, 07:51
- - plus   Заказал мегу168. через пару недель придёт. Если вд...   Aug 2 2010, 20:08
- - barabashka.yury   Всем доброго времени суток! Бегло прочел топи...   Aug 26 2010, 19:26
- - GDI   ЦитатаИ еще, сложностей с переносом исходников на ...   Aug 27 2010, 09:30
|- - barabashka.yury   Цитата(GDI @ Aug 27 2010, 12:30) Будут об...   Aug 27 2010, 18:41
- - GDI   А вы поройтесь в теме, вроде кто-то уже просил и к...   Aug 30 2010, 13:29
- - AndyDev   Хотелось бы несколько реанимировать тему, и задать...   Aug 16 2013, 12:12
3 страниц V  < 1 2 3


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 07:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01445 секунд с 7
ELECTRONIX ©2004-2016