Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: быстрый TCP/IP-стек для STR912
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
EKirshin
Нужна пропускная способность по протоколу TCP/IP порядка 1-2 МБайт/с.

Нужно передавать данные с контроллера на PC (в одну сторону). Размер пакета не важен (видимо, нужен большой для высокой пропускной способности). Нужно только одно соединение.

+ хочется использовать стек без операционки.

Рассматривался uIP. Но, как видно, он больше оптимизирован для 8-битных контроллеров. Настроить его на большую пропускную способность пока не удалось. Примеры на его основе - в основном, web-сервера, не требующие большой пропускной способности канала. Когда они переделываются на передачу данных, выясняется, что пропускная способность всего несколько килобайт/c. sad.gif

Есть вариант с использованием операционки. Например, тот же RTX Kernel со стеком. Вопрос, какую пропускную способность эта связка сможет обеспечить и какая загрузка процессора будет при требуемой пропускной способности в 1-2 Мбайт/с.
AlexandrY
На STR91x стек TCP/IP от Micrium дает 2.3 Мбайта в секунду c длиной пакетов 1024 байта.
У них на сайте выложен для STR91x весь проект включая TCP стек, RTOS и исходники тестирующей программы.
Проект для IAR EWB, легко переносится и на RVDK.

Цитата(EKirshin @ Feb 27 2007, 20:29) *
Нужна пропускная способность по протоколу TCP/IP порядка 1-2 МБайт/с.
KRS
Если все в локалке ( в одном сегменте ) можно использовать UDP ( плюс простая проверка потерянных пакетов, которых по идее быть не должно если сеть правильно настроена).
Тогда можете сами формировать пакеты и не надо никакого стека.
AlexandrY
Потеряете большинство пакетов, либо будете изобретать вилосипед.
PC слишком быстро отправляет UDP один за другим. Контроллер все потеряет кроме первого.

Цитата(KRS @ Feb 27 2007, 22:35) *
Если все в локалке ( в одном сегменте ) можно использовать UDP ( плюс простая проверка потерянных пакетов, которых по идее быть не должно если сеть правильно настроена).
Тогда можете сами формировать пакеты и не надо никакого стека.
KostyantynT
Цитата(EKirshin @ Feb 27 2007, 18:59) *
Нужна пропускная способность по протоколу TCP/IP порядка 1-2 МБайт/с.

Нужно передавать данные с контроллера на PC (в одну сторону). Размер пакета не важен (видимо, нужен большой для высокой пропускной способности). Нужно только одно соединение.

+ хочется использовать стек без операционки.

Рассматривался uIP. Но, как видно, он больше оптимизирован для 8-битных контроллеров. Настроить его на большую пропускную способность пока не удалось. Примеры на его основе - в основном, web-сервера, не требующие большой пропускной способности канала. Когда они переделываются на передачу данных, выясняется, что пропускная способность всего несколько килобайт/c. sad.gif

Есть вариант с использованием операционки. Например, тот же RTX Kernel со стеком. Вопрос, какую пропускную способность эта связка сможет обеспечить и какая загрузка процессора будет при требуемой пропускной способности в 1-2 Мбайт/с.


LWIP - 3 мбайта в секунду, очень быстрый и хороший стек. Можно и больше , еслт оптимизировать CRC и драйвер
KRS
Цитата(AlexandrY @ Feb 27 2007, 21:29) *
Потеряете большинство пакетов, либо будете изобретать вилосипед.
PC слишком быстро отправляет UDP один за другим. Контроллер все потеряет кроме первого.

Цитата(KRS @ Feb 27 2007, 22:35) *

Если все в локалке ( в одном сегменте ) можно использовать UDP ( плюс простая проверка потерянных пакетов, которых по идее быть не должно если сеть правильно настроена).
Тогда можете сами формировать пакеты и не надо никакого стека.



Требовалось то передавать данные как раз в сторону PC!
И потом то что контроллер потеряет все пакеты, кроме 1 - это не так!
Можно несколько пакетов в очереди держать...

И потом когда данные идут пакетами и в одной сети ( нет марщрутизации, мостов и каналов с разной скоростью... ) гораздо эффективнее использовать UDP (можно вытащить из любого стека)
Dopler
Цитата(KRS @ Feb 28 2007, 00:59) *
Требовалось то передавать данные как раз в сторону PC!
И потом то что контроллер потеряет все пакеты, кроме 1 - это не так!
Можно несколько пакетов в очереди держать...

И потом когда данные идут пакетами и в одной сети ( нет марщрутизации, мостов и каналов с разной скоростью... ) гораздо эффективнее использовать UDP (можно вытащить из любого стека)



Соглавсен с вами. Если есть устройство, которое напрямую подключается к компьютеру через Ethernet (у нас было именно так), UDP прекрасно справляется. Реализация UDP в разы проще, в хороших Emac он поддерживается почти аппаратно, нужно только заголовок сформировать, да ввести поле номера пакета, для возможного контроля пропавших (хотя за период тестирования устройства ни одного пропавшего пакета замечено не было). Даже контрольную сумму UDP можно не считать (даже нужно не считать, так как смысла нет). Реализация UDP с нуля займет примерно неделю.
SpiritDance
Цитата(КонстантинТ @ Feb 28 2007, 00:46) *
LWIP - 3 мбайта в секунду, очень быстрый и хороший стек. Можно и больше , еслт оптимизировать CRC и драйвер

Очень интересно. можно подробнее? Использовали ОС или без нее обошлись? Что за оптимизация такая хитрая? Если использовали uC/OS не поделитесь портом?
KostyantynT
Цитата(SpiritDance @ Feb 28 2007, 10:01) *
Цитата(КонстантинТ @ Feb 28 2007, 00:46) *

LWIP - 3 мбайта в секунду, очень быстрый и хороший стек. Можно и больше , еслт оптимизировать CRC и драйвер

Очень интересно. можно подробнее? Использовали ОС или без нее обошлись? Что за оптимизация такая хитрая? Если использовали uC/OS не поделитесь портом?

Наибольшие тормоза вызывают функция подсчета CRC и драйвер передачи данных.
Я взял готовую неоптимизированную функцию написанную на С .
В драйвере можно эффективно использовать DMA, те предавать указатель на сегмент данных со сформированным пакетом( а не прегружать в отдельную область и оттуда по DMA слать в сеть, как я сделал для простоты). По прерыванию DMA освобождать память. Если в процессе передачи сформировался новый пакет, то его ставить в очередь на передачу.
IgorKossak
Цитата(AlexandrY @ Feb 27 2007, 18:55) *
На STR91x стек TCP/IP от Micrium дает 2.3 Мбайта в секунду c длиной пакетов 1024 байта.
У них на сайте выложен для STR91x весь проект включая TCP стек, RTOS и исходники тестирующей программы.

Имелся в виду порт для STR91x или что?
EKirshin
Порт Micrium uC/OS-II со стеком TCP/IP на STR912 нашел. Есть примеры для IAR для платы от ST.
По описанию внутри этого архива видно (на скриншотах), что у них TCP/IP на тесте передачи из контроллера в PC дает даже 2.9 Мбайт/с.
Глянул исходники - они используют оптимизированную ассемблерную функцию вычисления контрольной суммы. + реализация всяких вещей TCP таких как окно на много сегментов.

Сделано, конечно, профессионально. куча комментариев, которые пронумерованы, ..., документация...
Но уж очень большой исходник у них.

Хочется взять какой-нибудь стек без наворотов и "добавить" в уже существующий проект без операционки, чтоб не переписывать уже написанный код под эту операционку.
AlexandrY
У вас нет выбора. Это единственный нормальный стек доступный в исходниках и реально безопасный в многопоточных приложениях.
Быстрые стеки однозначно требуют операционку.
Открытые стеки типа uIP и lwIP очень кривые. Взять к примеру блокирующиеся сокеты без таймаута в lwIP, это гемороя на месяц не меньше чтоб обойти связанные с этим проблемы. И так по мелочи там много проблем.


Цитата(EKirshin @ Feb 28 2007, 19:40) *
Порт Micrium uC/OS-II со стеком TCP/IP на STR912 нашел. Есть примеры для IAR для платы от ST.
По описанию внутри этого архива видно (на скриншотах), что у них TCP/IP на тесте передачи из контроллера в PC дает даже 2.9 Мбайт/с.
Глянул исходники - они используют оптимизированную ассемблерную функцию вычисления контрольной суммы. + реализация всяких вещей TCP таких как окно на много сегментов.

Сделано, конечно, профессионально. куча комментариев, которые пронумерованы, ..., документация...
Но уж очень большой исходник у них.

Хочется взять какой-нибудь стек без наворотов и "добавить" в уже существующий проект без операционки, чтоб не переписывать уже написанный код под эту операционку.
Velund
Цитата(EKirshin @ Feb 28 2007, 18:10) *
Порт Micrium uC/OS-II со стеком TCP/IP на STR912 нашел.


А может кто нибудь на фтп это добро выложит? Что то на микриуме стали пароли с логинами спрашивать... blink.gif
Alex B._
>> Что то на микриуме стали пароли с логинами спрашивать...
Угу, причем еще и не регистрируют =(
Shamil
Цитата(Velund @ Mar 1 2007, 11:48) *
А может кто нибудь на фтп это добро выложит? Что то на микриуме стали пароли с логинами спрашивать... blink.gif


Положил в /upload/TcpStacks/Micrium-uC-TCP-IP.exe

Зарегистрироваться мне удалось только с нормального почтового ящика.
С ящиком на mail.ru мой запрос на регистрацию был проигнорирован.

To AlexandrY - большой a14.gif за наводку.
KostyantynT
Цитата(AlexandrY @ Feb 28 2007, 20:18) *
У вас нет выбора. Это единственный нормальный стек доступный в исходниках и реально безопасный в многопоточных приложениях.
Быстрые стеки однозначно требуют операционку.
Открытые стеки типа uIP и lwIP очень кривые. Взять к примеру блокирующиеся сокеты без таймаута в lwIP, это гемороя на месяц не меньше чтоб обойти связанные с этим проблемы. И так по мелочи там много проблем.


Цитата(EKirshin @ Feb 28 2007, 19:40) *

Порт Micrium uC/OS-II со стеком TCP/IP на STR912 нашел. Есть примеры для IAR для платы от ST.
По описанию внутри этого архива видно (на скриншотах), что у них TCP/IP на тесте передачи из контроллера в PC дает даже 2.9 Мбайт/с.
Глянул исходники - они используют оптимизированную ассемблерную функцию вычисления контрольной суммы. + реализация всяких вещей TCP таких как окно на много сегментов.

Сделано, конечно, профессионально. куча комментариев, которые пронумерованы, ..., документация...
Но уж очень большой исходник у них.

Хочется взять какой-нибудь стек без наворотов и "добавить" в уже существующий проект без операционки, чтоб не переписывать уже написанный код под эту операционку.



Безапеляционность ваших суждений иногда поражает. Вы бы для начала посмотрели списки рассылок (они очень большие) по LWIP. Что касается таймера - это не кривизна, а поведение стека в точном соответствии со стандартом (в рассылок это не раз перетиралось и обходится парой строчек кода в вашем рабочем приложении). Что такое по мелочи? Конкретнее, плиз. У нас этот стек работает на нескольких разных процессорах и никогда проблем не возникало. Слабое место его - документация, но там все сделано очень просто и иинтуитивно понятно. Операционка для него необязательна. Можно писать свои приложения на callback функциях, можно стандартно на сокетах.
Uip - очень простой стек ориентированный на 8 битники и его рассматривать вообще не стоит.
AlexandrY
Да нет Констнатин, эт ваши посты навеивают странные подозрения.
Выложите свой LWIP и тогда посмотрим что у вас там действительно работает.
Я так понял вы химичите со стеком и юзерам позволяете работать только через свою прокладку на PC для обмена с дивайсами.
Еще кстати хотел у вас спросить как это вы Wiggler в CrossWorks подключаете к STR91x если на официальном сайте macraigor.com сказано, что он не поддерживает ядро ARM966?


Цитата(КонстантинТ @ Mar 1 2007, 14:44) *
Безапеляционность ваших суждений иногда поражает. Вы бы для начала посмотрели списки рассылок (они очень большие) по LWIP.
SpiritDance
Насчет подключений - тут наверно дело в том, что кроссворкс использует собственные драйвера для вигглера.
KostyantynT
Цитата(AlexandrY @ Mar 1 2007, 13:27) *
Да нет Констнатин, эт ваши посты навеивают странные подозрения.
Выложите свой LWIP и тогда посмотрим что у вас там действительно работает.
Я так понял вы химичите со стеком и юзерам позволяете работать только через свою прокладку на PC для обмена с дивайсами.
Еще кстати хотел у вас спросить как это вы Wiggler в CrossWorks подключаете к STR91x если на официальном сайте macraigor.com сказано, что он не поддерживает ядро ARM966?


Цитата(КонстантинТ @ Mar 1 2007, 14:44) *

Безапеляционность ваших суждений иногда поражает. Вы бы для начала посмотрели списки рассылок (они очень большие) по LWIP.



Ок в теле сообщения скомпилированные библиотеки, напрямую подключаетсяк кроссворку и файл opt.h с настройками, с которыми она компилировлась (работает на STR912).

Что значит химичу со стеком и юзерами, не понял.

Вам скриншот подключенного вигглера к STR912? И причем тут macraigor.com если кроссворк работает через свои библиотеки?

Далее для кросворка я уже выкладывал loader.exe. Могу повторить, и рассказать по настройкам. Могу и нашу программу аналог глючного caps которая все это делает через вигглер.

По LWIP проверял PING FLOOD потерь пакетов не было (в отлиичии от других стеков.).
AlexandrY
CrossWorks официально не поддерживает STR91x. Его нет у них в списке BSP и с реальным Wiggler-ом CrossWorks и STR91x не контачат, проверено.
Еcли вы всетаки штатными средствами CrossWorks, смогли подключить wiggler к STR91x, то где делаются эти настройки?
Если же это ваше фирменное решение, то вопрос конечно отпадает.


Цитата(КонстантинТ @ Mar 1 2007, 16:05) *
Ок в теле сообщения скомпилированные библиотеки, напрямую подключаетсяк кроссворку и файл opt.h с настройками, с которыми она компилировлась (работает на STR912).
boez
Цитата(КонстантинТ @ Mar 1 2007, 13:35) *
Далее для кросворка я уже выкладывал loader.exe. Могу повторить, и рассказать по настройкам. Могу и нашу программу аналог глючного caps которая все это делает через вигглер.


Константин, пожалуйста - можно сюда программу-аналог капса? А то у нас наконец-то через недельку появится долгожданная платка с STR, а из жтагов только вигглеры smile.gif
SpiritDance
Цитата(КонстантинТ @ Mar 1 2007, 14:35) *
Далее для кросворка я уже выкладывал loader.exe. Могу повторить, и рассказать по настройкам. Могу и нашу программу аналог глючного caps которая все это делает через вигглер.

А можна повторить и рассказать по настройкам, и аналог CAPS, вернее тот кусок который через виглер работает? rolleyes.gif blush.gif
Ткоа скажите а какая у вас текущая версия Croosworksa?
AlexandrY
Есть решение более гибкое.
Берете и делаете FlashLINK как в фирменном мануале от ST.
Потом скачиваете H-JTAG http://twentyone.blogchina.com/
В настройках H-JTAG выставляете ноги так как они сделаны во FlashLINK
И получаете сразу и фирменный программатор и JTAG отладчик.
Причем, я проверил, H-JTAG с STR91x работает и в Keil и в IAR! (правда делал это через wiggler biggrin.gif )
Ну конечно не забыть надо сделать коротенький инициализационный скрипт, и все готово для нормальной работы.

Цитата(boez @ Mar 1 2007, 17:03) *
Константин, пожалуйста - можно сюда программу-аналог капса? А то у нас наконец-то через недельку появится долгожданная платка с STR, а из жтагов только вигглеры smile.gif
SpiritDance
Лично мне например использовать h-jtag, особенно на производстве, не импонирует.
KostyantynT
Цитата(AlexandrY @ Mar 1 2007, 15:24) *
CrossWorks официально не поддерживает STR91x. Его нет у них в списке BSP и с реальным Wiggler-ом CrossWorks и STR91x не контачат, проверено.
Еcли вы всетаки штатными средствами CrossWorks, смогли подключить wiggler к STR91x, то где делаются эти настройки?
Если же это ваше фирменное решение, то вопрос конечно отпадает.


Цитата(КонстантинТ @ Mar 1 2007, 16:05) *

Ок в теле сообщения скомпилированные библиотеки, напрямую подключаетсяк кроссворку и файл opt.h с настройками, с которыми она компилировлась (работает на STR912).



В кроссворке (с версии 1.6) есть утилиты с помощью которых вы можете создавать BSP для любых процов и подключать. В старых версиях с помощью правки двух XML файлов вы можете добавлять тоже любой проц. На самом деле в этом одна из замечательных его сторон - гибкость и кофигурирование.

Во вложении - архив (для версии 1,5). Киньте его в папку targets и разархивируйте его. В визарде появится новый проц. И спокойно работайте и шейте STR и вигглером и JLINK и Crossconnecом.

CAPS или его аналог нужен для установки конфигурационных битов и работы напрямую с флешем 32 кб.

Правильным считать архив меньшего размера (первый включил по ошибке и не могу удалить :-))

Что касается аналога CAPS - сейчас я достаю программера, чтобы он сделал нормальное оформление для него и тогда выложу. Работает с вигглером через WinIO дарйвер.
AlexandrY
Спасибо, заработало.
Но вы делаете довольно специфичное изделие как я увидел.
Вам не нужен многоинтерфейсный стек, вам не нужен PPP, у вас один коннект на всю сессию, данные идут на PC в основном. Вы не держите WEB и FTP серверов на своем устройстве.
Вы себе можете позволить использовать мягко говоря сомнительный стек.

Но вот еще мы на lwIP обнаружили некорректное поведение серверных сокетов. Открытый сокет на определенном порту становится доступным всем желающим кто захочет соединения с этим портом. Т.е. на один сокет на сервере могут приходить данные от разных клиентов.
Что на это скажете?


Цитата(КонстантинТ @ Mar 1 2007, 19:17) *
В кроссворке (с версии 1.6) есть утилиты с помощью которых вы можете создавать BSP для любых процов и подключать. В старых версиях с помощью правки двух XML файлов вы можете добавлять тоже любой проц. На самом деле в этом одна из замечательных его сторон - гибкость и кофигурирование.
KostyantynT
Цитата(AlexandrY @ Mar 1 2007, 20:41) *
Спасибо, заработало.
Но вы делаете довольно специфичное изделие как я увидел.
Вам не нужен многоинтерфейсный стек, вам не нужен PPP, у вас один коннект на всю сессию, данные идут на PC в основном. Вы не держите WEB и FTP серверов на своем устройстве.
Вы себе можете позволить использовать мягко говоря сомнительный стек.

Но вот еще мы на lwIP обнаружили некорректное поведение серверных сокетов. Открытый сокет на определенном порту становится доступным всем желающим кто захочет соединения с этим портом. Т.е. на один сокет на сервере могут приходить данные от разных клиентов.
Что на это скажете?


Цитата(КонстантинТ @ Mar 1 2007, 19:17) *

В кроссворке (с версии 1.6) есть утилиты с помощью которых вы можете создавать BSP для любых процов и подключать. В старых версиях с помощью правки двух XML файлов вы можете добавлять тоже любой проц. На самом деле в этом одна из замечательных его сторон - гибкость и кофигурирование.



В LWIP есть PPP но я его не подключал. Есть и FTP приложение и HTTP, и Telnet, но я их не включал в эту библиотеку. По поводу доступности сокета, есть в файле opt.h дефайн для вашего случая. Кстати вышла версия 1.2.0 я изменения еще не смотрел. В этом устройстве я использую максимум до 4 параллельных соединений (можете посмотреть в opt.h).


Далее, для написания приложений в лвип есть два механизма - на базе сокетов и callback функций. Мне больше нравится второй вариант. Вы по какому варианту пробовали свои приложения?
defunct
Цитата(AlexandrY @ Feb 27 2007, 20:29) *
Потеряете большинство пакетов, либо будете изобретать вилосипед.
PC слишком быстро отправляет UDP один за другим. Контроллер все потеряет кроме первого.

Это касается только Str9xx или я чего-то не понял?
SpiritDance
КонстантинТ
у так как насчет програмки, которая вместо капса? rolleyes.gif Хоть в каком виде?

all
Люди а есть ли у st включаемые файлы для работы из под ассемблера?
AlexandrY
Не, мы callback не применяем. Тогда рушится вся философия переносимости протоколов верхнего уровня на разные стеки.
Lwip только и интересен тем, что реализует API BSD-сокетов.

Цитата(КонстантинТ @ Mar 1 2007, 22:41) *
Далее, для написания приложений в лвип есть два механизма - на базе сокетов и callback функций. Мне больше нравится второй вариант. Вы по какому варианту пробовали свои приложения?



Кстати, обнаружил проблемы в Micrium-овском драйвере NIC для STR91x.
На скоростях около 2 Мбайт в сек и более драйвер пропускает прерывания и стек сильно тормозит или вообще сбивается. Если следуют фрагментированные IP пакеты по 1460 и более байт сбой происходит сразу.
Почти такая же ситуация и в драйвере от Keil-а для ихней демки со стеком uIP.
SpiritDance
Хм.
В кроссворксе почему-то не работают бреакпоинты через виглер, а mt-link вообще грузить кристалл отказывается, после строчки erase вываливается с руганью по таймауту(IAR+j-link вроде работают нормально). sad.gif Интересно где собака порылась? (fw44). Будем проверять плату.
boez
Константин, тут еще не перевелись люди, которым интересна конфигурационная программка "вместо CAPS" для вигглера. Пожалуйста, хотя бы и в "неудобном" виде - лишь бы понятно было.

И еще вопрос не совсем по теме, ко всем. У STR9 на SPI нет таких приколов с использованием ноги SS как отдельный GPIO, как у некоторых филипсов? То есть, можно ли работать по SPI тремя ногами, а SS пользоваться независимо как GPIO? Не сталкивались случайно?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.