Easyelectronics.ru

Электроника для всех
Текущее время: 22 янв 2021, 12:18

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: STM32F7 LWIP RAW TCP LAN8742A
СообщениеДобавлено: 20 окт 2020, 10:30 
Старожил
Аватара пользователя

Зарегистрирован: 04 фев 2016, 12:43
Сообщения: 216
Откуда: BELARUS
Интересуют примеры передачи больших файлов.Я видел, что у некоторых получалось передавать 700 кило за 100 мс.Сейчас получается передавать на сервер пакеты размером 1460 не быстрее чем рас в 500 мс.Ну и примеры настройки стека под это дело. Конкретнее 32 килобайта требуется разово предавать.Таких посылок в секунду будет от 15...

Понятно увеличить tcp_snd_buf и tcp_send_wnd ...

_________________
#ElectroHobby


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F7 LWIP RAW TCP LAN8742A
СообщениеДобавлено: 22 окт 2020, 14:31 
Старожил
Аватара пользователя

Зарегистрирован: 04 фев 2016, 12:43
Сообщения: 216
Откуда: BELARUS
Удалось разогнать до 1 мегабита.Для полного счастья нужна 10точка.Есть ошибки при передаче, типа "TCP Dup ACK" но их мало на фоне основного трафика.Все зависит от периодичности вызова sys_check_timeouts();, ethernetif_input(&gnetif);
Если просто вызывать в основном while(1),то завалит ошибками,нужно подбирать.

_________________
#ElectroHobby


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F7 LWIP RAW TCP LAN8742A
СообщениеДобавлено: 07 ноя 2020, 14:08 
Старожил
Аватара пользователя

Зарегистрирован: 04 фев 2016, 12:43
Сообщения: 216
Откуда: BELARUS
В кубе включил TCM interface для flash.ART Accelerator,instruction perfetch настройки адреса flash изменил вручную т.к. куб не прописывает для KEIL почему то.Потребление камня заметно возросло производительность тоже.
Использую DMA оно вроде как и FLASH( по умолчанию) работает через шину AHB->AXI и там вроде как могут пробыть проблемы если включить кэш команд и данных.Поэтому сделал как написал выше.

В планах разместись стек и кучу и FIFO буфер в DTCM и обработчики прерываний в ITCM.

Работаю без RTOS RAW API.Проблема в том, ЧТО Я НЕ МОГУ ПОЛУЧИТЬ нормальные 10 Мегабит не говоря уже о 10 Мегабайтах в секунду о которых https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=112927 здесь пишут.

Передаю пакеты размером 16Кило след. образом.
Код:
while(ETH_TXBUF_SIZE > get_tcp_sndbuf_free(&CI))
   MX_LWIP_Process();
tcp_write(CI.tcp_client_pcb,ETH_TX_buf,ETH_TXBUF_SIZE, 1);                     
tcp_output(CI.tcp_client_pcb);


Проблема в том что пришлось выкрутить TCP_TMR_INTERVAL в 1 вместо 250?
Если включить вывод отладочной инфы помощью stats_display();
    LINK
    xmit: 0
    recv: 0
    fw: 0
    drop: 0
    chkerr: 0
    lenerr: 0
    memerr: 0
    rterr: 0
    proterr: 0
    opterr: 0
    err: 0
    cachehit: 0

    ETHARP
    xmit: 4
    recv: 48
    fw: 0
    drop: 0
    chkerr: 0
    lenerr: 0
    memerr: 0
    rterr: 0
    proterr: 0
    opterr: 0
    err: 0
    cachehit: 54832

    IP
    xmit: 54833
    recv: 28589
    fw: 0
    drop: 0
    chkerr: 0
    lenerr: 0
    memerr: 0
    rterr: 0
    proterr: 0
    opterr: 0
    err: 0
    cachehit: 0

    ICMP
    xmit: 0
    recv: 0
    fw: 0
    drop: 0
    chkerr: 0
    lenerr: 0
    memerr: 0
    rterr: 0
    proterr: 0
    opterr: 0
    err: 0
    cachehit: 0

    TCP
    xmit: 54833
    recv: 28328
    fw: 0
    drop: 0
    chkerr: 0
    lenerr: 0
    memerr: 0
    rterr: 0
    proterr: 0
    opterr: 0
    err: 0
    cachehit: 28328

    MEM HEAP
    avail: 131072
    used: 7720
    max: 35600
    err: 0

    MEM UDP_PCB
    avail: 1
    used: 0
    max: 0
    err: 0

    MEM TCP_PCB
    avail: 2
    used: 1
    max: 1
    err: 0

    MEM TCP_PCB_LISTEN
    avail: 2
    used: 0
    max: 0
    err: 0

    MEM TCP_SEG
    avail: 256
    used: 5
    max: 24
    err: 0

    MEM REASSDATA
    avail: 5
    used: 0
    max: 0
    err: 0

    MEM FRAG_PBUF
    avail: 15
    used: 0
    max: 0
    err: 0

    MEM SYS_TIMEOUT
    avail: 3
    used: 3
    max: 3
    err: 0

    MEM PBUF_REF/ROM
    avail: 32
    used: 0
    max: 0
    err: 0

    MEM PBUF_POOL
    avail: 32
    used: 0
    max: 2
    err: 0
    send_buf free 28300

Тут ошибок нет в течении длительного времени.
Кому какой скорости передачи удавалось добиться используя lwip?
Сейчас удается передать поток 5 мегабит с камеры, есть tcp retransmission,tcp dup ACK.

_________________
#ElectroHobby


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F7 LWIP RAW TCP LAN8742A
СообщениеДобавлено: 09 ноя 2020, 19:35 
Старожил
Аватара пользователя

Зарегистрирован: 04 фев 2016, 12:43
Сообщения: 216
Откуда: BELARUS
Вернулся к ошибкам при передаче.Создал новый проект чисто lwip без RTOS, плюс uart для отладки(2000000бод). Кэш не включал.Тестовый код .
Код:
  while (1)
  {
      MX_LWIP_Process();
      time_ms = HAL_GetTick();
      if(time_ms - last_time_ms_task1 > 1000){
         send_buf_frspace = get_tcp_sndbuf_free(&CI);
         printf("send_buf_frspace %d\n\r",send_buf_frspace);
         stats_display();    
         printf("-----------------------------------------\n\r");
         if (CI.conn_status == S_ESTABLISHED)
            if(ETH_TXBUF_SIZE < send_buf_frspace){
               ret_err = tcp_write(CI.tcp_client_pcb,ETH_TX_buf,ETH_TXBUF_SIZE, 1);                     
               if(ret_err != ERR_OK)printf("tcp_write err %d\n\r",ret_err);
               ret_err = tcp_output(CI.tcp_client_pcb);
               if(ret_err != ERR_OK)printf("tcp_output err %d\n\r",ret_err);
            }
       last_time_ms_task1 = time_ms;
      }



Прилепляю лог статистики для нового чистого проекта только с lwip отправка рас в секунду 16 кило, как отправляю указал выше.Обнаружил есть ошибки ERR_USE после вызова tcp_output(); в текстовом файле они можно найти по строке "tcp_output err -8". Могу скинуть проект если кому это поможет.Пакеты передаются, но много ошибок в wireshark писал выше.Даже если не отсылать принудительно т.е. без использования tcp_output (); то ошибки будут если установить брейкпоинт на строку ошибки или выводить отладочное сообщение с этой строчки.

Ошибки ERR_USE появляются в функции low_level_output() находится в файле ethernetif.c строки :

Код:
      /* Is this buffer available? If not, goto error */
      if((DmaTxDesc->Status & ETH_DMATXDESC_OWN) != (uint32_t)RESET)
      {
        errval = ERR_USE;
        goto error;
      }


Тут похожее https://community.st.com/s/question/0D5 ... it-problem

Но у меня кэш не включен и __DSB() пробовал не помогает.

КАК БЫТЬ ????!!!!


Вложения:
statistic.txt [193.45 Кб]
Скачиваний: 14

_________________
#ElectroHobby
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB