|
|
  |
Стек TCP IP, поделитесь кому не жалко |
|
|
|
Dec 12 2012, 20:18
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Добрый день всем! Отладил эзернет на ниосе (ядроMAC с опенкорес). Пример vadimuzzz'а с обработкой arp и icmp ping работает. Хочу прикрутить TCP IP. Вот решил обратиться к сообществу, чтоб не изобретать велосипед... Как вообще со стеками такими дела обстоят, не наглая моя просьба? Кому не жалко, на мыло пожалуйста киньте. Стек можно наверно не полный, задача такая: установка соединения, гарантированная доставка и правильная последовательность пакетов, размер могу ограничить как надо будет. Заранее благодарен.
|
|
|
|
|
Dec 15 2012, 17:16
|
Местный
  
Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842

|
Присоединюсь. Может путаете с uIP? У нас LWIP прекрасно работает на microblaze и на arm. Наиболее полная реализация из бесплатных. Количество соединений ограничено размером доступной памяти. Проект развивается - вроде уже есть поддержка IPv6. IP4v - там уже и развивать особо нечего
|
|
|
|
|
Feb 2 2013, 14:51
|

Участник

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

|
Цитата(Alex11 @ Dec 13 2012, 01:33)  А чем Вас LWIP свободный не устраивает? можно еще niche посмотреть. правда, я его больше года запускал, но я не профессиональный программист =)
|
|
|
|
|
Feb 3 2013, 08:21
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Цитата(gosu-art @ Feb 2 2013, 19:25)  интересно  какую скорость удалось на Ниосе получит? Брал стек микрочипа за основу. Тестировал как раз на днях скорость, которая получилась - 4 мбит/с, ничего аппаратного выше MAC нет, все программно, все контрольные суммы, заголовки и т.д. Учитывая что мне надо 80 кбит/с - за глаза. Проц - ниос (средний, не помню букву), память внешняя асинхронная 16 бит, частота системы 80 мгц. Да, с отключенной оптимизацией, потому как с включенной начинается беда с железом - пишешь 3 раза ноль (например) по одному внешнему адресу (так надо железке), а он (оптимизатор) решает что смысла в этом нет и оставляет запись только одного нуля.
|
|
|
|
|
Feb 5 2013, 04:48
|
Профессионал
    
Группа: Свой
Сообщений: 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>
|
|
|
|
|
Feb 5 2013, 10:37
|
Местный
  
Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842

|
Цитата(alexPec @ Feb 4 2013, 06:19)  Ага, пока что решения не нашел  Хотелось прочувствовать оптимальность оптимизатора... Код 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; }
|
|
|
|
|
Feb 5 2013, 20:23
|
Профессионал
    
Группа: Свой
Сообщений: 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;
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|