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

 
 
 
Reply to this topicStart new topic
> Сопряжение железа с ПК по Ethernet, Какие служебные протоколы необходимо реализовать
studert
сообщение Oct 9 2008, 07:06
Сообщение #1


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

Группа: Свой
Сообщений: 76
Регистрация: 6-03-05
Из: Новосибирск
Пользователь №: 3 121



Необходимо подружить железо (ПЛИС + Ethernet PHY) c ПК. В ПЛИС реализован МАС и генератор UDP пакетов. Какие служебные протоколы необходимо реализовать в железе, чтобы программа на ПК могла отправлять/принимать данные? Знаю только про ARP запросы, которые реализовать не составит труда, если же потребуется что-нибудь более сложное, тогда целесообразнее будет написать программу так чтобы она подключалась напрямую к карте и отправляла принимала пакеты из первых рук. Я в этом вопросе не силен, подскажите каким путем лучше пойти. Пишу программу на основе классов QT.
Go to the top of the page
 
+Quote Post
Aprox
сообщение Oct 10 2008, 07:35
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131



Цитата(studert @ Oct 9 2008, 11:06) *
Необходимо подружить железо (ПЛИС + Ethernet PHY) c ПК. В ПЛИС реализован МАС и генератор UDP пакетов. Какие служебные протоколы необходимо реализовать в железе, чтобы программа на ПК могла отправлять/принимать данные? Знаю только про ARP запросы, которые реализовать не составит труда, если же потребуется что-нибудь более сложное, тогда целесообразнее будет написать программу так чтобы она подключалась напрямую к карте и отправляла принимала пакеты из первых рук. Я в этом вопросе не силен, подскажите каким путем лучше пойти. Пишу программу на основе классов QT.

На мой взгляд, минимум в железе- это ARP и UDP. На ПК использовать компонент Билдера- UDP клиент, который и будет "дружить" с вашим железом.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 10 2008, 08:21
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Aprox @ Oct 10 2008, 09:35) *
На ПК использовать компонент Билдера- UDP клиент, который и будет "дружить" с вашим железом.

Не стоит поминать всякие "Билдеры" и "компоненты", ибо стандартный интерфейс сокетов самодостаточен, не зависит от "билдеров" и не нуждается в мутных никчемных обертках-"компонентах".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Aprox
сообщение Oct 10 2008, 14:11
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131



Цитата(zltigo @ Oct 10 2008, 12:21) *
Не стоит поминать всякие "Билдеры" и "компоненты", ибо стандартный интерфейс сокетов самодостаточен, не зависит от "билдеров" и не нуждается в мутных никчемных обертках-"компонентах".
Они не "мутные" и очень "кчемные". Потому, что экономят кучу времени новичку, производя все операции с сокетами автоматически, в совершенно прозрачном для юзера режиме.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 10 2008, 15:35
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Aprox @ Oct 10 2008, 16:11) *
Потому, что экономят кучу времени новичку...

После чего новичек в лучшем случае остается новичком, а скорее всего становится ламером, который чего-то типа "сделал" хотя и не понял что. Отчего возввышается в своих глазах, но в случае чего сразу начинает валить все на глюки Windows, компиляторов и любимым занятием становится разговоры о "глюках" и поиск "безглючных компонентов".
Дело в том, что именно интерфейс BSD Socket один из немногих sad.gif реально продуманных, ПРОСТЫХ и универсальных интерфейсов.
Надстройками его можно только изуродовать sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Aprox
сообщение Oct 11 2008, 07:00
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131



Цитата(zltigo @ Oct 10 2008, 19:35) *
После чего новичек в лучшем случае остается новичком, а скорее всего становится ламером, который чего-то типа "сделал" хотя и не понял что. Отчего возввышается в своих глазах, но в случае чего сразу начинает валить все на глюки Windows, компиляторов и любимым занятием становится разговоры о "глюках" и поиск "безглючных компонентов".
И тем не менее, факт остается фактом- Indy компоненты в Delphi-7 (они же в билдере) у меня работают четко и предсказуемо. Проблемы есть, - они в быстродействии не знаю уж чего, то ли в виндах, то ли в компонентах. Так например, программы с компонентами UDP-сервер или UDP-клиент не могут на моем лично ПК принимать потоки данных более, чем 54 Mbps. Происходит потеря пакетов, если пытаешься грузить быстрее. Думаю, дело в задержках на графику виндов. Я это выяснил с помощью снифера WireSharck, который точно также пропускает пакеты, если ему не отключить графическую прорисовку в реальном времени. Иными словами, дело не в компонентах и не в сокетах, а в GUI виндов.
Цитата(zltigo @ Oct 10 2008, 19:35) *
Дело в том, что именно интерфейс BSD Socket один из немногих sad.gif реально продуманных, ПРОСТЫХ и универсальных интерфейсов. Надстройками его можно только изуродовать sad.gif.
На счет простоты не соглашусь. Куча вызовов API типа accept, listen...- все это требует тщательнейшего осмысления, а запутаться, когда что вызывать и нужно ли вообще - ничего не стоит. Свежему человеку, который экономит свое время - не советую. Я уж не поминаю GUI виндов, который мгновенно сожрет все преимущества, которые были отжаты у сокетов.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Oct 11 2008, 08:09
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Aprox @ Oct 11 2008, 11:00) *
Проблемы есть, - они в быстродействии не знаю уж чего, то ли в виндах, то ли в компонентах. Так например, программы с компонентами UDP-сервер или UDP-клиент не могут на моем лично ПК принимать потоки данных более, чем 54 Mbps. Происходит потеря пакетов, если пытаешься грузить быстрее. Думаю, дело в задержках на графику виндов.
Вот только не стоит на зеркало на винду пенять... laughing.gif

По UDP через стандартный сокет Winsock2 и при подключении точка-точка через 100BASE-TX можно передавать поток RTP со скоростью ~100 Mbps. При этом производительности Pentium-4@3.4GHz хватает на декодирование MJPEG и отрисовку графики с помощью DirectX в реал-тайме. По TCP пробовал передавать через HTTP-сервер JPEG-картинки с отображением их в окне IE. Для четырех одновременно открытых сокетов скорость получалась ~94 Mbps, но думаю, это не предел.. С потерей пакетов не сталкивался ни разу:
[attachment=25680:attachment]
wink.gif

Сообщение отредактировал blackfin - Oct 11 2008, 08:13
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 11 2008, 08:29
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Aprox @ Oct 11 2008, 09:00) *
Иными словами, дело не в компонентах и не в сокетах, а в GUI виндов.

Увы, конкретно в случае использования борлондячины дело именно в той несораизмеримой плате за "удобство" ничего не знать которую Вы платите. И чистые сокеты и тем более чистый GUI опирающиеся на, как правило, драйвера выжимающие из железа почти все, в Windows очень хороши.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
studert
сообщение Oct 11 2008, 10:27
Сообщение #9


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

Группа: Свой
Сообщений: 76
Регистрация: 6-03-05
Из: Новосибирск
Пользователь №: 3 121



Спасибо всем откликнувшимся. Как я понял из вот этого примера http://astrosurf.com/cavadore/EthernetCont...er/sources.html, для работы UDP/IP необходимо реализовать обработку ARP и ICMP эхо (он же пинг) запросов и собственно сами UDP пакеты.
На данный момент остались следующие вопросы:
1. ARP запрос посылается при отправке пакета по IP адресу, для которого нет соответствующего MAC адреса в ARP таблице, и до этого момента со стороны железа не требуется отвечать на попытки ПК войти с ним в контакт?
2. В каких случаях посылается (и необходим ли вообще в моем случае) ping запрос?
3. Если на компьютере будет несколько сетевых карт, то ARP запрос пошлется во все сетевые подключения или в одно из них, если не во все то как можно выбрать в какую сетевуху его отправлять?
Планирую использовать классы библиотеки QT, поэтому средства от Borland или Microsoft не интересны.

Сообщение отредактировал studert - Oct 11 2008, 10:31
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 11 2008, 11:38
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(studert @ Oct 11 2008, 12:27) *
1. ARP запрос посылается при отправке пакета по IP адресу, для которого нет соответствующего MAC адреса в ARP таблице, и до этого момента со стороны железа не требуется отвечать на попытки ПК войти с ним в контакт?

Это не проблема железа - BCЕ, кто знает MAC, то должены входить вне зависимости от того, откуда они его знают.
Цитата
2. В каких случаях посылается (и необходим ли вообще в моем случае) ping запрос?

На Ваше усмотрение.
Цитата
3. Если на компьютере будет несколько сетевых карт, то ARP запрос пошлется во все сетевые подключения или в одно из них, если не во все то как можно выбрать в какую сетевуху его отправлять?

Да, хоть 10 карт, но у них IP подсети разные - пойдет в соответствии с подсетью. И вообще это не проблема Вашей железки и не приложения на PC.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Aprox
сообщение Oct 11 2008, 19:21
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131



Цитата(blackfin @ Oct 11 2008, 12:09) *
По UDP через стандартный сокет Winsock2 и при подключении точка-точка через 100BASE-TX можно передавать поток RTP со скоростью ~100 Mbps. При этом производительности Pentium-4@3.4GHz хватает на декодирование MJPEG и отрисовку графики с помощью DirectX в реал-тайме.
Мой старенький ПК по сравнению с Вашим монстром- ничто. Я работаю на Pentium-4@800MHz. естественно, что винда у меня тормозит, а у Вас не тормозит на 100BASE-TX. Когда Вы перейдете на большие скорости, например 1000BASE-T, то и ваш ПК тоже начнет пропускать пакеты из-за отвлечения на GUI виндов.


Цитата(zltigo @ Oct 11 2008, 12:29) *
Увы, конкретно в случае использования борлондячины дело именно в той несораизмеримой плате за "удобство" ничего не знать которую Вы платите. И чистые сокеты и тем более чистый GUI опирающиеся на, как правило, драйвера выжимающие из железа почти все, в Windows очень хороши.

А еще круче WinCap, который работает вообще без драйверов и сокетов на уровне ядра виндов. Hо сколько стоит сил его завести!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 11 2008, 20:40
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Aprox @ Oct 11 2008, 21:21) *
....работает вообще без драйверов..

smile.gif Иногда лучше молчать, чем говорить ©....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
n.tru
сообщение Dec 12 2008, 12:48
Сообщение #13





Группа: Участник
Сообщений: 6
Регистрация: 23-10-06
Пользователь №: 21 596



Цитата(Aprox @ Oct 11 2008, 23:21) *
... Hо сколько стоит сил его завести!

... очень мало smile.gif
1. качаете WinPcap4.0.2 или WinPcap4.1beta4
2. качаете Developer's Pack для v4.0.2 или v4.1 beta4, соответсвенно.
3. устанавливаете то, что скачали в п.1
4. распаковываете то, что скачали в п.2. (папки - doc, examples(2), include, lib)

Открываем файл WpdPack\Examples-pcap\basic_dump\basic_dump.c - пример как принимать
Открываем файл WpdPack\Examples-pcap\sendpack\sendpack.c - пример как передавать

Код для сендера вообще смешной:
Код
#include <stdlib.h>
#include <stdio.h>
#include <pcap.h>

int main(int argc, char **argv)
{
    pcap_t *fp;
    char errbuf[PCAP_ERRBUF_SIZE];
    u_char packet[100];
    int i;
    
    /* Open the adapter */
    if ((fp = pcap_open_live(argv[1],    // name of the device
                 65536,    // portion of the packet to capture. It doesn't matter in this case
                 1,    // promiscuous mode (nonzero means promiscuous)
                 1000,    // read timeout
                 errbuf    // error buffer
                     )) == NULL)
    {
        fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", argv[1]);
        return 2;
    }

    /* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */
    packet[0]=1; packet[1]=1; packet[2]=1; packet[3]=1; packet[4]=1; packet[5]=1;
    /* set mac source to 2:2:2:2:2:2 */
    packet[6]=2; packet[7]=2; packet[8]=2; packet[9]=2; packet[10]=2; packet[11]=2;    
    /* Fill the rest of the packet */
    for(i=12;i<100;i++) {packet[i]=i%256;}
    /* Send down the packet */
    if (pcap_sendpacket(fp,    // Adapter
        packet,        // buffer with the packet
        100        // size
        ) != 0)
    {
        fprintf(stderr,"\nError sending the packet: \n", pcap_geterr(fp));
        return 3;
    }

    pcap_close(fp);    
    return 0;
}

... WinPCap на любителя, но для тестирования связки железо-ПК более чем достаточна, до и очень проста для программирования, про возможности даже говорить не буду - в доках прочтите или в нете.
У нас связка TMS320C6455(EMAC minidrv без NDK) <-> NoteBook (WinXP+WinPCap4.0.2) работала устойчиво, выжимали >90% 100-ки (гигабит не проверяли, т.к. DSK ограничен 100PHY)
Go to the top of the page
 
+Quote Post

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

 


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


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