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

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


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

Группа: Модераторы
Сообщений: 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
- - A.l.e.x.   А не проще ли на ENC28J60, как реализовано здесь h...   Mar 5 2008, 12:01
|- - zltigo   Цитата(A.l.e.x. @ Mar 5 2008, 15:01) А не...   Mar 5 2008, 12:09
- - Rst7   ЦитатаА не проще ли на ENC28J60 Дороже и жрет бол...   Mar 5 2008, 12:05
|- - A.l.e.x.   Цитата(Rst7 @ Mar 5 2008, 14:05) Дороже и...   Mar 5 2008, 12:26
|- - alexander55   Цитата(A.l.e.x. @ Mar 5 2008, 15:26) Со с...   Mar 5 2008, 12:44
- - Rst7   Цитатана борту имеет... На борту еще имеет 6 стра...   Mar 5 2008, 12:15
|- - zltigo   Цитата(Rst7 @ Mar 5 2008, 15:15) На борту...   Mar 5 2008, 12:26
- - A.l.e.x.   Я слышал, что у каждого ethernet-устройства должен...   Mar 5 2008, 12:49
- - Rst7   ЦитатаА можно ли на этой плате сделать переходник ...   Mar 5 2008, 13:23
|- - defunct   Rst7 ЗачОт!   Mar 5 2008, 13:48
|- - Dog Pawlowa   Цитата(defunct @ Mar 5 2008, 17:48) Rst7 ...   Mar 5 2008, 14:51
- - bzx   Если вести разговор о самом дешёвом решении, то PI...   Mar 5 2008, 15:30
|- - defunct   Цитата(bzx @ Mar 5 2008, 17:30) Если вест...   Mar 5 2008, 16:26
- - Rst7   ЦитатаЦена вопроса ~4-5? Незащитано. Тут цена воп...   Mar 5 2008, 16:58
|- - Mc_off   RESPECT !!! Спасибо огромное !   Mar 5 2008, 17:33
- - aaarrr   На LPC и SAM портировать можно, но смысла большого...   Mar 5 2008, 17:25
- - Rst7   Цитатамладшие кристаллы с MAC стоят достаточно деш...   Mar 5 2008, 17:42
|- - zltigo   Цитата(Rst7 @ Mar 5 2008, 20:42) zltigo в...   Mar 5 2008, 22:15
|- - singlskv   Цитата(zltigo @ Mar 6 2008, 01:15) А прос...   Mar 5 2008, 22:30
|- - alexander55   Цитата(zltigo @ Mar 6 2008, 01:15) Что-то...   Mar 6 2008, 08:37
- - singlskv   Немного не по теме основного топика, но начал смот...   Mar 5 2008, 21:27
- - Rst7   Цитатану а потом просто понял что здесь 16бит защи...   Mar 6 2008, 06:10
- - GDI   Идея очень хорошая и ее по праву можно поставить в...   Mar 6 2008, 07:16
- - Rst7   ЦитатаPS. Если удастся подключать через OPC-драйве...   Mar 6 2008, 10:02
|- - alexander55   Цитата(Rst7 @ Mar 6 2008, 13:02) Я так по...   Mar 6 2008, 10:53
|- - A.l.e.x.   Цитата(Rst7 @ Mar 6 2008, 12:02) Я так по...   Mar 6 2008, 10:54
|- - alexander55   Цитата(A.l.e.x. @ Mar 6 2008, 13:54) Это...   Mar 6 2008, 11:49
|- - _Pasha   Цитата(A.l.e.x. @ Mar 6 2008, 13:54) Возм...   Mar 12 2008, 08:12
|- - defunct   Цитата(A.l.e.x. @ Mar 6 2008, 12:54) Макс...   Mar 12 2008, 15:07
|- - _Pasha   Цитата(defunct @ Mar 12 2008, 18:07) Отку...   Mar 12 2008, 16:08
|- - A.l.e.x.   Цитата(defunct @ Mar 12 2008, 17:07) Отку...   Mar 13 2008, 13:49
- - Erv&Sed   RST7 я вас правильно понял, у вас реализован в том...   Mar 6 2008, 17:48
- - Rst7   Цитатау вас реализован в том числе и HTTP протокол...   Mar 7 2008, 07:55
- - cornflyer   msp430 + ENC28J60   Mar 12 2008, 07:50
- - Rst7   Цитатаmsp430 + ENC28J60 Ну это ничем не отличаетс...   Mar 12 2008, 08:30
|- - _Pasha   Цитата(Rst7 @ Mar 12 2008, 11:30) Регистр...   Mar 12 2008, 08:48
- - Rst7   ЦитатаСторона, отправившая плохой пакет, должна зн...   Mar 12 2008, 09:31
|- - _Pasha   Цитата(Rst7 @ Mar 12 2008, 12:31) Чето я ...   Mar 12 2008, 10:53
- - Rst7   ЦитатаТ.е. application layer нужен? Ну не целиком...   Mar 12 2008, 11:06
|- - _Pasha   Цитата(Rst7 @ Mar 12 2008, 14:06) Хотя, а...   Mar 12 2008, 11:35
- - Rst7   ЦитатаПоговорили. Я этот случай и имел ввиду. Объ...   Mar 12 2008, 12:26
- - Rst7   Падаждытэ Насколько я понимаю, есть спецификация...   Mar 13 2008, 06:13
- - sensor_ua   Цитатаесть спецификация Modbus over TCP это не пов...   Mar 13 2008, 06:42
- - Rst7   ЦитатаРечь же вроде шла о туннелировании пакетов M...   Mar 13 2008, 06:49
- - sensor_ua   Хм... думаю, что речь всё же шла об туннелировании...   Mar 13 2008, 07:49
- - _Pasha   Цитата(sensor_ua @ Mar 13 2008, 11:49) Хм...   Mar 13 2008, 10:47
|- - defunct   Цитата(_Pasha @ Mar 13 2008, 12:47) Хочет...   Mar 13 2008, 11:29
|- - Rst7   Цитата(_Pasha @ Mar 13 2008, 12:47) Хочет...   Mar 13 2008, 13:23
- - galjoen   А что вы всё в Модбас упёрлись? На мой взгляд это ...   Mar 13 2008, 11:10
|- - Rst7   Цитата(galjoen @ Mar 13 2008, 13:10) И ту...   Mar 13 2008, 15:03
|- - galjoen   Цитата(Rst7 @ Mar 13 2008, 18:03) Могу на...   Mar 13 2008, 16:30
|- - _Pasha   Цитата(galjoen @ Mar 13 2008, 20:30) В ZH...   Mar 13 2008, 22:22
|- - galjoen   Цитата(_Pasha @ Mar 14 2008, 01:22) Пока ...   Mar 13 2008, 23:24
|- - galjoen   Цитата(_Pasha @ Mar 14 2008, 01:22) Бухга...   Mar 15 2008, 12:06
|- - _Pasha   Цитата(galjoen @ Mar 15 2008, 16:06) ... ...   Mar 15 2008, 21:34
|- - galjoen   Цитата(_Pasha @ Mar 16 2008, 00:34) А есл...   Mar 16 2008, 13:49
- - _Pasha   Цитата(galjoen @ Mar 13 2008, 15:10) А чт...   Mar 13 2008, 11:45
|- - AlexG   Цитата(_Pasha @ Mar 13 2008, 17:45) Слухи...   Mar 13 2008, 19:26
- - SasaVitebsk   А для меня, было бы интересно COM порт виртуальный...   Mar 13 2008, 20:59
- - Rst7   Цитата1. Какое преимущество даст подсчет CRC32 на ...   Mar 15 2008, 14:08
- - _Pasha   Цитата(galjoen @ Mar 16 2008, 16:49) Быст...   Mar 16 2008, 14:42
|- - galjoen   Цитата(_Pasha @ Mar 16 2008, 17:42) Дык э...   Mar 16 2008, 15:05
|- - _Pasha   Цитата(galjoen @ Mar 16 2008, 18:05) мы п...   Mar 16 2008, 16:55
- - Rst7   Цитатаrxc_isr:              sei Вот так делать нел...   Mar 16 2008, 17:58
- - _Pasha   MODBUS over serial line specification and implemen...   Mar 16 2008, 18:24
- - Rst7   ЦитатаЯ понял, что Вы про RXC в первую очередь. Д...   Mar 16 2008, 19:18
|- - _Pasha   Цитата(Rst7 @ Mar 16 2008, 22:18) А не до...   Mar 16 2008, 19:38
||- - alexander55   Цитата(_Pasha @ Mar 16 2008, 22:38) Я в P...   Mar 18 2008, 06:06
|- - galjoen   Цитата(Rst7 @ Mar 16 2008, 22:18) Да там ...   Mar 17 2008, 12:12
||- - prottoss   Цитата(galjoen @ Mar 17 2008, 19:12) Где ...   Mar 17 2008, 12:16
||- - _Pasha   Цитата(galjoen @ Mar 17 2008, 15:12) С пр...   Mar 17 2008, 15:15
|- - galjoen   Цитата(_Pasha @ Mar 17 2008, 18:15) Особе...   Mar 18 2008, 08:12
|- - _Pasha   Цитата(galjoen @ Mar 18 2008, 11:12) Не 3...   Mar 18 2008, 11:24
|- - alexander55   Цитата(galjoen @ Mar 18 2008, 11:12) А ту...   Mar 18 2008, 12:07
|- - zltigo   Цитата(alexander55 @ Mar 18 2008, 15:07) ...   Mar 18 2008, 19:09
|- - alexander55   Цитата(zltigo @ Mar 18 2008, 22:09) Не га...   Mar 20 2008, 05:59
|- - alexander55   Для автора темы. Варианты конвертора Ethernet-RS48...   Mar 27 2008, 06:02
|- - MrYuran   Цитата(alexander55 @ Mar 27 2008, 09:02) ...   Mar 27 2008, 06:11
|- - alexander55   Цитата(MrYuran @ Mar 27 2008, 09:11) Насч...   Mar 27 2008, 06:32
|- - MrYuran   Цитата(alexander55 @ Mar 27 2008, 09:32) ...   Mar 27 2008, 07:03
|- - alexander55   Цитата(MrYuran @ Mar 27 2008, 10:03) На ...   Mar 27 2008, 08:00
- - Rst7   ЦитатаА мне кажется, что наилучшим тестером для эт...   Mar 18 2008, 08:33
|- - galjoen   Цитата(Rst7 @ Mar 18 2008, 11:33) Не, не ...   Mar 18 2008, 09:05
- - Rst7   ЦитатаНапример, IP обеспесчивает правильность прин...   Mar 18 2008, 12:21
|- - alexander55   Цитата(Rst7 @ Mar 18 2008, 15:21) Не гара...   Mar 20 2008, 05:34
- - Rst7   ЦитатаIP - интернет прококол. Содержит IP адреса п...   Mar 20 2008, 05:47
- - Rst7   ЦитатаДля автора темы. Варианты конвертора Etherne...   Mar 27 2008, 12:00
|- - alexander55   Цитата(Rst7 @ Mar 27 2008, 15:00) Хоть уб...   Mar 27 2008, 12:20
- - prottoss   Не помню сайт, откуда скачивал Еще бы посоветов...   Mar 27 2008, 12:15
- - Rst7   ЦитатаЕще бы посоветовал, для отладки со стороны с...   Mar 27 2008, 12:44
|- - alexander55   Цитата(Rst7 @ Mar 27 2008, 15:44) О да, б...   Mar 27 2008, 13:21
||- - galjoen   Под Win невозможно слейв сделать (или какой-то стр...   Mar 27 2008, 14:33
|- - A.l.e.x.   Цитата(Rst7 @ Mar 27 2008, 14:44) О да, б...   Mar 27 2008, 14:59
- - sensor_ua   В NModbus был эмулятор слейва   Mar 27 2008, 13:15
- - Rst7   ЦитатаВ NModbus был эмулятор слейва А можно мордо...   Mar 27 2008, 13:51
|- - alexander55   Цитата(Rst7 @ Mar 27 2008, 16:51)   Mar 27 2008, 14:06
- - sensor_ua   www.nmodbus.com   Mar 27 2008, 13:55
- - sensor_ua   Цитатаесли слейв СРАЗУ-ЖЕ отвечать начнёт Зачем-то...   Mar 27 2008, 14:48
- - galjoen   Цитата(sensor_ua @ Mar 27 2008, 17:48) За...   Mar 27 2008, 15:10
3 страниц V   1 2 3 >


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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:44
Рейтинг@Mail.ru


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