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

 
 
 
Reply to this topicStart new topic
> Стек TCP IP, поделитесь кому не жалко
alexPec
сообщение Dec 12 2012, 20:18
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Добрый день всем!

Отладил эзернет на ниосе (ядроMAC с опенкорес). Пример vadimuzzz'а с обработкой arp и icmp ping работает. Хочу прикрутить TCP IP. Вот решил обратиться к сообществу, чтоб не изобретать велосипед...

Как вообще со стеками такими дела обстоят, не наглая моя просьба? sm.gif

Кому не жалко, на мыло пожалуйста киньте.

Стек можно наверно не полный, задача такая: установка соединения, гарантированная доставка и правильная последовательность пакетов, размер могу ограничить как надо будет.

Заранее благодарен.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Dec 12 2012, 21:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



А чем Вас LWIP свободный не устраивает?
Go to the top of the page
 
+Quote Post
alexPec
сообщение Dec 13 2012, 06:38
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Alex11 @ Dec 13 2012, 01:33) *
А чем Вас LWIP свободный не устраивает?

Да чето читал про него - говорят больше одного коннекта не поддерживает да и вообще говорят проект заброшен...
Или врут злые языки?
Go to the top of the page
 
+Quote Post
Дмитрий Мазунин
сообщение Dec 13 2012, 09:31
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 259
Регистрация: 19-09-05
Из: Екатеринбург
Пользователь №: 8 715



Все прекрасно работает. С некоторым допиливанием. (Xilinx)
Go to the top of the page
 
+Quote Post
akorud
сообщение Dec 15 2012, 17:16
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Присоединюсь.
Может путаете с uIP?
У нас LWIP прекрасно работает на microblaze и на arm. Наиболее полная реализация из бесплатных.
Количество соединений ограничено размером доступной памяти. Проект развивается - вроде уже есть поддержка IPv6. IP4v - там уже и развивать особо нечего sm.gif
Go to the top of the page
 
+Quote Post
wpost
сообщение Feb 2 2013, 14:51
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 1-04-10
Из: СПб
Пользователь №: 56 354



Цитата(Alex11 @ Dec 13 2012, 01:33) *
А чем Вас LWIP свободный не устраивает?


можно еще niche посмотреть. правда, я его больше года запускал, но я не профессиональный программист =)
Go to the top of the page
 
+Quote Post
gosu-art
сообщение Feb 2 2013, 15:25
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



интересно rolleyes.gif какую скорость удалось на Ниосе получит?
Go to the top of the page
 
+Quote Post
alexPec
сообщение Feb 3 2013, 08:21
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(gosu-art @ Feb 2 2013, 19:25) *
интересно rolleyes.gif какую скорость удалось на Ниосе получит?

Брал стек микрочипа за основу. Тестировал как раз на днях скорость, которая получилась - 4 мбит/с, ничего аппаратного выше MAC нет, все программно, все контрольные суммы, заголовки и т.д. Учитывая что мне надо 80 кбит/с - за глаза. Проц - ниос (средний, не помню букву), память внешняя асинхронная 16 бит, частота системы 80 мгц. Да, с отключенной оптимизацией, потому как с включенной начинается беда с железом - пишешь 3 раза ноль (например) по одному внешнему адресу (так надо железке), а он (оптимизатор) решает что смысла в этом нет и оставляет запись только одного нуля.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 4 2013, 02:46
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(alexPec @ Feb 3 2013, 15:21) *
Да, с отключенной оптимизацией, потому как с включенной начинается беда с железом - пишешь 3 раза ноль (например) по одному внешнему адресу (так надо железке), а он (оптимизатор) решает что смысла в этом нет и оставляет запись только одного нуля.

это в связи с этим вы заводили тему про отключение оптимизации в определенных функциях?
Go to the top of the page
 
+Quote Post
alexPec
сообщение Feb 4 2013, 05:19
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(vadimuzzz @ Feb 4 2013, 06:46) *
это в связи с этим вы заводили тему про отключение оптимизации в определенных функциях?

Ага, пока что решения не нашел sm.gif Хотелось прочувствовать оптимальность оптимизатора...
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 4 2013, 06:05
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(alexPec @ Feb 4 2013, 12:19) *
Ага, пока что решения не нашел sm.gif Хотелось прочувствовать оптимальность оптимизатора...

мне кажется, тут есть несколько вариантов. покажите, что за железка (с точки зрения SOPC - tri-state-bridge?), тайминги и фрагмент кода (можно с ассемблером для наглядности)
Go to the top of the page
 
+Quote Post
alexPec
сообщение Feb 5 2013, 04:48
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(vadimuzzz @ Feb 4 2013, 10:05) *
мне кажется, тут есть несколько вариантов. покажите, что за железка (с точки зрения SOPC - tri-state-bridge?), тайминги и фрагмент кода (можно с ассемблером для наглядности)


Ну да, почти. Проблема возникла с SD-card контроллером, цеплял его на avalon-MM, правда без tristate - не нужен он там. Организация там такая: регистр статуса, данных, управления и еще что-то. При инициализации (в частности) надо три раза записать в регистр данных 0. Эти три нуля уходят в фифо и потом последовательно на SD. Тайминги пока наверно лишнее. Понятно все на уровне кода вроде.
Это проблема с одним из компонентов, дальше (если ее решить) похожее наверняка с остальными какими-нибудь будет.

на С:
Код
     SD_REG(CONTROLL)=1;
     SD_REG(CONTROLL)=0;

     //Reset SD Card. CMD 0, Arg 0.
     //No response, wait for timeout
     SD_REG(TX_CMD_FIFO)=0x40;
     SD_REG(TX_CMD_FIFO)=0x00;
     SD_REG(TX_CMD_FIFO)=0x00;
     SD_REG(TX_CMD_FIFO)=0x00;
     SD_REG(TX_CMD_FIFO)=0x00;

     while ( SD_REG(TIMER_REG) != 0){}


ASM без оптимизации:

Код
     /* initialise the MMC card into SD-Bus mode, is performed in HW*/
     SD_REG(CONTROLL)=1;
200c568:    00c18034     movhi    r3,1536
200c56c:    18c42504     addi    r3,r3,4244
200c570:    00800044     movi    r2,1
200c574:    18800005     stb    r2,0(r3)
     SD_REG(CONTROLL)=0;
200c578:    00818034     movhi    r2,1536
200c57c:    10842504     addi    r2,r2,4244
200c580:    10000005     stb    zero,0(r2)

     //Reset SD Card. CMD 0, Arg 0.
     //No response, wait for timeout
     SD_REG(TX_CMD_FIFO)=0x40;
200c584:    00c18034     movhi    r3,1536
200c588:    18c42004     addi    r3,r3,4224
200c58c:    00801004     movi    r2,64
200c590:    18800005     stb    r2,0(r3)
     SD_REG(TX_CMD_FIFO)=0x00;
200c594:    00818034     movhi    r2,1536
200c598:    10842004     addi    r2,r2,4224
200c59c:    10000005     stb    zero,0(r2)
     SD_REG(TX_CMD_FIFO)=0x00;
200c5a0:    00818034     movhi    r2,1536
200c5a4:    10842004     addi    r2,r2,4224
200c5a8:    10000005     stb    zero,0(r2)
     SD_REG(TX_CMD_FIFO)=0x00;
200c5ac:    00818034     movhi    r2,1536
200c5b0:    10842004     addi    r2,r2,4224
200c5b4:    10000005     stb    zero,0(r2)
     SD_REG(TX_CMD_FIFO)=0x00;
200c5b8:    00818034     movhi    r2,1536
200c5bc:    10842004     addi    r2,r2,4224
200c5c0:    10000005     stb    zero,0(r2)

     while ( SD_REG(TIMER_REG) != 0){}
200c5c4:    00818034     movhi    r2,1536
200c5c8:    10842604     addi    r2,r2,4248
200c5cc:    10800003     ldbu    r2,0(r2)
200c5d0:    1005003a     cmpeq    r2,r2,zero
200c5d4:    1000011e     bne    r2,zero,200c5dc <mmc_init+0x90>
200c5d8:    003ffa06     br    200c5c4 <mmc_init+0x78>



ASM с оптимизацией:

Код
     /* initialise the MMC card into SD-Bus mode, is performed in HW*/
     SD_REG(CONTROLL)=1;
     SD_REG(CONTROLL)=0;
20073f4:    10bfff04     addi    r2,r2,-4
20073f8:    10000005     stb    zero,0(r2)

     //Reset SD Card. CMD 0, Arg 0.
     //No response, wait for timeout
     SD_REG(TX_CMD_FIFO)=0x40;
     SD_REG(TX_CMD_FIFO)=0x00;
     SD_REG(TX_CMD_FIFO)=0x00;
     SD_REG(TX_CMD_FIFO)=0x00;
     SD_REG(TX_CMD_FIFO)=0x00;
20073fc:    10bffb04     addi    r2,r2,-20
2007400:    10000005     stb    zero,0(r2)
2007404:    1807003a     cmpeq    r3,r3,zero

     while ( SD_REG(TIMER_REG) != 0){}
2007408:    183fff26     beq    r3,zero,2007408 <mmc_init+0x3c>
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 5 2013, 08:48
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



SD_REG - это макрос для доступа к регистру? можно его код? мне кажется вам стоит глянуть в сторону инструкции sync и добавить ее в этот макрос
Go to the top of the page
 
+Quote Post
akorud
сообщение Feb 5 2013, 10:37
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Цитата(alexPec @ Feb 4 2013, 06:19) *
Ага, пока что решения не нашел sm.gif Хотелось прочувствовать оптимальность оптимизатора...


Код
void set_some_reg(uint32_t value)
{
    *((volatile uint32_t*)(REG_ADDR)) = value;
}

Ключевое слово volatile
Если не хочеться функции, пишем в .h
Код
static inline void set_some_reg(uint32_t value)
{
    *((volatile uint32_t*)(REG_ADDR)) = value;
}
Go to the top of the page
 
+Quote Post
alexPec
сообщение Feb 5 2013, 20:23
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(vadimuzzz @ Feb 5 2013, 12:48) *
SD_REG - это макрос для доступа к регистру? можно его код? мне кажется вам стоит глянуть в сторону инструкции sync и добавить ее в этот макрос


#define SD_REG(REG) *((unsigned char*)(SD_PORT_0_BASE+REG))

Вобщем, для процессора это ячейка памяти по некоторому адресу на шине авалон.

akorud, спасибо за совет. Вроде прокатило:

Код
     SD_REG(CONTROLL)=1;
20073f0:    00c18034     movhi    r3,1536
20073f4:    18c42504     addi    r3,r3,4244
20073f8:    00800044     movi    r2,1
20073fc:    18800005     stb    r2,0(r3)
     SD_REG(CONTROLL)=0;
2007400:    18000005     stb    zero,0(r3)

     //Reset SD Card. CMD 0, Arg 0.
     //No response, wait for timeout
     SD_REG(TX_CMD_FIFO)=0x40;
2007404:    00818034     movhi    r2,1536
2007408:    10842004     addi    r2,r2,4224
200740c:    00c01004     movi    r3,64
2007410:    10c00005     stb    r3,0(r2)
     SD_REG(TX_CMD_FIFO)=0x00;
2007414:    10000005     stb    zero,0(r2)
     SD_REG(TX_CMD_FIFO)=0x00;
2007418:    10000005     stb    zero,0(r2)
     SD_REG(TX_CMD_FIFO)=0x00;
200741c:    10000005     stb    zero,0(r2)
     SD_REG(TX_CMD_FIFO)=0x00;

Go to the top of the page
 
+Quote Post

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

 


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


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