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

 
 
> 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
18 страниц V  « < 10 11 12 13 14 > »   
Start new topic
Ответов (165 - 179)
Rst7
сообщение May 4 2009, 10:11
Сообщение #166


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

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



Цитата
Так ведь 164 дороже раза в два


Ладно. Посмотрю как-нибудь...


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


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(Rst7 @ May 4 2009, 11:49) *
Лень, честно говоря. Есть же 164/324/644.

Дык они эта,вроде тоже до 16Мгц тока cranky.gif


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Rst7
сообщение May 4 2009, 13:47
Сообщение #168


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

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



Цитата
Дык они эта,вроде тоже до 16Мгц тока


Сплошной -20AU, например


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


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-02-07
Пользователь №: 25 578



Цитата(Rst7 @ May 4 2009, 14:11) *
Ладно. Посмотрю как-нибудь...

А в чём принципиальная разница в работе данного TCP/IP на 16 МГц?
Меньше это ведь не больше cool.gif


--------------------
Мужество есть лишь у тех, кто ощутил сердцем страх!
В. Кипелов, Беги за солнцем.
Go to the top of the page
 
+Quote Post
Rst7
сообщение May 14 2009, 07:59
Сообщение #170


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

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



Цитата
А в чём принципиальная разница в работе данного TCP/IP на 16 МГц?


В работе TCP/IP разницы нет. В работе с PHY-уровнем - разница большая. Тут же MAC софтовый. При 20МГц имеем 8 тактов на тетраду входных/выходных, при 16 - 6.4 такта. Надо успеть принять/передать. И еще кое-какие вещи на ходу проверить, например, переполнение буфера пакета.


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


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-02-07
Пользователь №: 25 578



Цитата(Rst7 @ May 14 2009, 11:59) *
В работе TCP/IP разницы нет. В работе с PHY-уровнем - разница большая. Тут же MAC софтовый. При 20МГц имеем 8 тактов на тетраду входных/выходных, при 16 - 6.4 такта.

Не, с реалтеком я так глубоко не копал. Вам проще в этом вопросе 05.gif


--------------------
Мужество есть лишь у тех, кто ощутил сердцем страх!
В. Кипелов, Беги за солнцем.
Go to the top of the page
 
+Quote Post
dimka76
сообщение May 18 2009, 08:45
Сообщение #172


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Вопрос к RST7.

А почему вы не использовали SNI вместо MII, ведь все равно 10Mbps mode используете ? Тогда бы можно было бы использовать аппаратный SPI и меньше программных расходов на прием передачу.

Или я нелостаточно с RTL8201 разобрался и SNI для приема/передачи не применим, а только для управления RTL используется ?


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Rst7
сообщение May 18 2009, 08:48
Сообщение #173


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

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



Цитата
Тогда бы можно было бы использовать аппаратный SPI и меньше программных расходов на прием передачу.


Как Вы себе это видите? Во-первых, RTL8201 - мастер. Как Вы предлагаете запускать SPI в режиме slave с битовой скоростью F/2 без синхронизации тактов ATMega/RTL. Ставить битовое FIFO?

Для управления там отдельный интерфейс. Я его не пользую, все режимы выставленны подтягивающими резисторами.


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


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Rst7 @ May 18 2009, 12:48) *
Как Вы себе это видите? Во-первых, RTL8201 - мастер. Как Вы предлагаете запускать SPI в режиме slave с битовой скоростью F/2 без синхронизации тактов ATMega/RTL.

Почему F/2 ? Частота тактов при 10Mbps mode составляет 2.5 МГц => Fcpu/8. Это один бит. Fcpu/8/8 это один быйт. И того частота прихода байта Fcpu/64. Т.е. контроллер 64 такта может заниматься обработкой принятых данных. В отличии от ваших Fcpu/8, где фактически только приемом и может заниматься.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Rst7
сообщение May 18 2009, 09:26
Сообщение #175


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

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



Цитата
Частота тактов при 10Mbps mode составляет 2.5 МГц => Fcpu/8. Это один бит.

Поплакал.

Считаем вместе. Скорость линка 10 МБит в секунду. Частота бит на SNI/SPI - 10МГц.


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


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Rst7 @ May 18 2009, 13:26) *
Поплакал.

Считаем вместе. Скорость линка 10 МБит в секунду. Частота бит на SNI/SPI - 10МГц.



Извиняюсь. 2.5 МГц это для MII. Но даже если 10 МБит/сек SPI это Fcpu/2/8 уже 16 тактов на байт против ваших 8 на половину байта.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Rst7
сообщение May 18 2009, 09:42
Сообщение #177


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

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



Цитата
16 тактов на байт против ваших 8 на половину байта.


Не поверите, но это одно и тоже. 16/1=8/0.5. Правда еще накладные расходы на изготовление байта из двух тетрад. Но это все мелочи. Невозможно заставить SPI у AVR работать с тактовой частотой F/2 в режиме slave с произвольным тактовым сигналом (вырожденные случаи типа самотактирования тут смысла рассматривать нет)


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


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



теперь все ясно biggrin.gif


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
RA3WUM
сообщение Jun 3 2009, 09:40
Сообщение #179


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-02-07
Пользователь №: 25 578



Уважаемый Rst7, как же там продвигается дело с 16-ти мегагерцовой версией стека? wink.gif


--------------------
Мужество есть лишь у тех, кто ощутил сердцем страх!
В. Кипелов, Беги за солнцем.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jun 3 2009, 09:49
Сообщение #180


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

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



Цитата
как же там продвигается дело с 16-ти мегагерцовой версией стека?


Не дошел ход. Обещаю в ближайшее время решить вопрос smile.gif


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

18 страниц V  « < 10 11 12 13 14 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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