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

 
 
> 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
 
Start new topic
Ответов
galjoen
сообщение Mar 13 2008, 11:10
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



А что вы всё в Модбас упёрлись? На мой взгляд это совершенно убогий протокол. Существует только из-за тяжёлого наследия. И тут ещё проблемка: пока мы весь пакет от ведомого не получим - работать с изернет не сможем. А 256 байт на скорости 115200 это более 20 милисекунд. Можно конечно извратится и чтение с USART в том-же цикле, что и чтение из изернет сделать, но это уж совсем большой изврат. Так и придётся для модбас 2й процессор ставить.
На мой взгляд переходник в CAN более перспективен. У CAN-то всё буферизировано. Да и у АВР с CAN - ОЗУ и FLASH поболее, хотя и дороже конечно.
Цитата(Rst7 @ Mar 5 2008, 14:51) *
приема - гдето под 4Мбита/с. Т.е. дропать пакеты он сможет именно с такой скоростью smile.gif (и даже быстрее, потому что сначала я проверяю, мой ли пакет, а только потом считаю CRC32, этот расчет выполняется медленнее приема пакета, тут ничего не попишешь)

Могу написать, как CRC32 за 14 тактов на байт считать (за счёт увеличения размера потребной FLASH конечно). А вообще-то с какой скоростью из изернета к нам байты валятся? Может удастся CRC32 на лету считать? Если глупость написал - не пинайте. В изернете я полный ноль. Кстати может подскажете, что про изернет почитать. Это я насчёт переходника изернет2CAN.

А ещё я у вас Rst7 заметил странный код на асме:
dec R16
tst R16
Это зачем так сделано? Если задержка нужна - нагляднее nop поставить. Хотя я может там чего не понимаю конечно.
Rst7 - если не трудно изложите идею чтения данных из изернета пожалуйста, так чтобы чайники вроде меня поняли.
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
|- - 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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