Oleg_IT 0 25 декабря, 2015 Опубликовано 25 декабря, 2015 (изменено) · Жалоба Собрал простую программу на STM32CubeMX с ETH и LWIP. Пытаюсь установить соединение, как показано в примерах err_t tcp_recv_cb(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) { return ERR_OK; } void tcp_err_cb(void *arg, err_t err) { Err = err; arg_ = arg; } err_t tcp_poll_cb(void *arg, struct tcp_pcb *tpcb) { return ERR_OK; } err_t tcp_accept_cb(void *arg, struct tcp_pcb *newpcb, err_t err) { tcp_arg(tcp_pcb_, tcp_pcb_); tcp_recv(tcp_pcb_,tcp_recv_cb); tcp_err(tcp_pcb_,tcp_err_cb); tcp_poll(tcp_pcb_, tcp_poll_cb, 10); return ERR_OK; } err_t tcp_connected_cb(void *arg, struct tcp_pcb *tpcb, err_t err) { return ERR_OK; } ………………………………………………………………… To_IP_ADDRESS[0] = 169; To_IP_ADDRESS[1] = 254; To_IP_ADDRESS[2] = 248; To_IP_ADDRESS[3] = 45; My_IP_ADDRESS[0] = 169; My_IP_ADDRESS[1] = 254; My_IP_ADDRESS[2] = 61; My_IP_ADDRESS[3] = 18; IP4_ADDR(&To_ipaddr, To_IP_ADDRESS[0], To_IP_ADDRESS[1], To_IP_ADDRESS[2], To_IP_ADDRESS[3]); IP4_ADDR(&My_ipaddr, My_IP_ADDRESS[0], My_IP_ADDRESS[1], My_IP_ADDRESS[2], My_IP_ADDRESS[3]); tcp_pcb_ = tcp_new(); tcp_setprio(tcp_pcb_,TCP_PRIO_NORMAL); Err = tcp_bind(tcp_pcb_,&My_ipaddr,2323); tcp_accept(tcp_pcb_,tcp_accept_cb); Err = tcp_connect(tcp_pcb_,&To_ipaddr,2324,tcp_connected_cb); while (1) { /* USER CODE END WHILE */ MX_LWIP_Process(); /* USER CODE BEGIN 3 */ } Результат смотрю и в Wireshark и в дебагере. Ни какая колбек функция не вызывается. ARP запрос и, соответствующий ответ поступают в Wireshark в тот момент, когда в программе на модуле соединение закрывается, tcp_pcb_.state равно CLOSED. Принимающая программа запущена, она работала с модулем на LPC с TCP_ARM_L.lib. Все примеры, которые я нашёл это или эхо клиент, сервер или протоколы высокого уровня, а мне нужно просто гонять бинарные буфера между модулем и компьютером. Помогите поднять соединение. Изменено 25 декабря, 2015 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 25 декабря, 2015 Опубликовано 25 декабря, 2015 · Жалоба А почему вы акцентируете внимание на отсутствии ОС? Надо писать промежуточный слой что для ОС, что для голого железа. Посмотрел свой код, не вижу у вас вызовов lwip_init() netif_add, sys_check_timeouts(). Также должны быть предоставлены внешние функции u32_t sys_now(void) и u32_t sys_jiffies(void). Вы это сделали? Время тикает? LWIP имеет развитую систему логов, попробуйте для начала их все включить и посмотреть, что происходит. Включите логи в вашем драйвере ethernet, пакеты приходят/уходят? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 25 декабря, 2015 Опубликовано 25 декабря, 2015 · Жалоба А почему вы акцентируете внимание на отсутствии ОС? Надо писать промежуточный слой что для ОС, что для голого железа. Посмотрел свой код, не вижу у вас вызовов lwip_init() netif_add, sys_check_timeouts(). Также должны быть предоставлены внешние функции u32_t sys_now(void) и u32_t sys_jiffies(void). Вы это сделали? Время тикает? LWIP имеет развитую систему логов, попробуйте для начала их все включить и посмотреть, что происходит. Включите логи в вашем драйвере ethernet, пакеты приходят/уходят? Большой кусок инициализации lwip строит STM32CubeMX, там все вызовы lwip_init() netif_add, ... sys_check_timeouts(), ethernetif_input() включены в MX_LWIP_Process(); С логами разберусь, надеюсь поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 25 декабря, 2015 Опубликовано 25 декабря, 2015 · Жалоба Собрал простую программу на STM32CubeMX с ETH и LWIP.Выкидывайте из головы все эти библиотеки - простите - этого говнокод. Пишите все свое. Столкнулся с МК от ST не так давно. Документация не всегда точная . Про библиотеки я сказал. Пишите свое, анализируя на первое и второе. Результат будет быстрее, чем спрашивать тех, кто пользуются этими либами - это очевидно. Кто ими пользуется могут ответить только - работает/не работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 25 декабря, 2015 Опубликовано 25 декабря, 2015 · Жалоба Выкидывайте из головы все эти библиотеки - простите - этого говнокод. Вы предлагаете самому переписать lwip или ...? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 25 декабря, 2015 Опубликовано 25 декабря, 2015 · Жалоба Вы предлагаете самому переписать lwip или ...? Нет -я не имел ввиду lwIP. Хотя я не использую его в своих проектах. Есть своя билиотека. Я имел ввиду библиотеки от ST. Они, на мой взгляд, не готовы для использования в серьезных проектах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanDrakes 1 25 декабря, 2015 Опубликовано 25 декабря, 2015 (изменено) · Жалоба А я так и не смог прикрутить LwIP. Наверное, у меня руки не из плеч немного.. Зато в HAL приём/отправка пакетов реализуются достаточно быстро. Можно как с прерываниями, так и без них. Как раз случай ТС - достаточно собственно, HAL библиотеки. Инициализировать только придётся самому содержимое пакетов. Либо забивать готовым дампом заголовки. Примерно, как это сделано в TCP/IP стэке здесь. Кстати, использую именно логику данного примера: ZeroCopy и сборку пакета по уровням. Последняя мысль к связи контроллера с сетью Ethernet без полного переписывания "родных" библиотек производителя: "О сколько грабель чудных готовит нам отладки час!". Собственно, минимум, что можно получить: - Не работают прерывания. - Прерывания работают, но не те. /HardFault?/ - Прерывания работают. Всё остальное не работает. - Работает!!!! А почему принимается только N пакетов? - Принимается!!!! А с передачей у нас что? - Хм... - А, вот! - А теперь-то что?! Как CRC? Куда оно делось? Почему пакетов два? - Ах вот ты какой, зелёный солнёнок... Но зачем? Изменено 26 декабря, 2015 пользователем AlanDrakes Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 25 декабря, 2015 Опубликовано 25 декабря, 2015 · Жалоба А я так и не смог прикрутить LwIP. А я смог. Перед эти был lwip на ColdFire. Драйвер сам сделал в обоих случаях. Переход был довольно безболезненным (обратите внимание, в том числе big endian --> little endian). После того, как влез в кишки lwip, и, слушая страдальцев по кубу, не верю, что наивные тыкатели в галочки куба смогут получить вменяемый Ethernet. Тут, пардон, надо разбираться в том, как эта штука работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 26 декабря, 2015 Опубликовано 26 декабря, 2015 · Жалоба А я смог. Перед эти был lwip на ColdFire. Драйвер сам сделал в обоих случаях. Переход был довольно безболезненным (обратите внимание, в том числе big endian --> little endian). После того, как влез в кишки lwip, и, слушая страдальцев по кубу, не верю, что наивные тыкатели в галочки куба смогут получить вменяемый Ethernet. Тут, пардон, надо разбираться в том, как эта штука работает. Я собственно этим и занимаюсь сейчас, лезу внутрь библиотеки, смотрю как оно там работает. А Куб, повторюсь, использую только для начального конфигурирования Есть у меня желание найти рабочий пример, такой как для LPC - LEDClient, с ним у меня сходу всё получилось. Примерно, как это сделано в TCP/IP стэке здесь. Нет на сервере странички по ссылке:( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanDrakes 1 26 декабря, 2015 Опубликовано 26 декабря, 2015 (изменено) · Жалоба А я смог. Перед эти был lwip на ColdFire. Драйвер сам сделал в обоих случаях. Переход был довольно безболезненным (обратите внимание, в том числе big endian --> little endian). После того, как влез в кишки lwip, и, слушая страдальцев по кубу, не верю, что наивные тыкатели в галочки куба смогут получить вменяемый Ethernet. Тут, пардон, надо разбираться в том, как эта штука работает. У меня просто проект не компилится с использованием arm-none-eabi-gcc. Возможно, недостаточно библиотек, возможно, что-то ещё. По сути - забил на либу, решив использовать другой вполне вменяемый, легковесный стэк. Сейчас вот допиливаю его. По будням.. Сейчас занят стабилизатором питания. ЗЫ: Извиняюсь, ссылка битая. Рабочая сслыка. Исправил. Изменено 26 декабря, 2015 пользователем AlanDrakes Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться