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

 
 
> Продолжаю мучить изернет для STM32F417 без ОС.
Oleg_IT
сообщение Dec 25 2015, 11:34
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Собрал простую программу на STM32CubeMX с ETH и LWIP. Пытаюсь установить соединение, как показано в примерах
CODE
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.
Все примеры, которые я нашёл это или эхо клиент, сервер или протоколы высокого уровня, а мне нужно просто гонять бинарные буфера между модулем и компьютером. Помогите поднять соединение.

Сообщение отредактировал IgorKossak - Dec 25 2015, 18:57
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AlanDrakes
сообщение Dec 25 2015, 16:51
Сообщение #2


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

Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474



А я так и не смог прикрутить LwIP. Наверное, у меня руки не из плеч немного.. Зато в HAL приём/отправка пакетов реализуются достаточно быстро. Можно как с прерываниями, так и без них.
Как раз случай ТС - достаточно собственно, HAL библиотеки. Инициализировать только придётся самому содержимое пакетов. Либо забивать готовым дампом заголовки.
Примерно, как это сделано в TCP/IP стэке здесь.
Кстати, использую именно логику данного примера: ZeroCopy и сборку пакета по уровням.

Последняя мысль к связи контроллера с сетью Ethernet без полного переписывания "родных" библиотек производителя: "О сколько грабель чудных готовит нам отладки час!".
Собственно, минимум, что можно получить:
- Не работают прерывания.
- Прерывания работают, но не те. /HardFault?/
- Прерывания работают. Всё остальное не работает.
- Работает!!!! А почему принимается только N пакетов?
- Принимается!!!! А с передачей у нас что?
- Хм...
- А, вот!
- А теперь-то что?! Как CRC? Куда оно делось? Почему пакетов два?
- Ах вот ты какой, зелёный солнёнок... Но зачем?

Сообщение отредактировал AlanDrakes - Dec 26 2015, 11:25
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 25 2015, 19:11
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(AlanDrakes @ Dec 25 2015, 19:51) *
А я так и не смог прикрутить LwIP.

А я смог. Перед эти был lwip на ColdFire. Драйвер сам сделал в обоих случаях. Переход был довольно безболезненным (обратите внимание, в том числе big endian --> little endian). После того, как влез в кишки lwip, и, слушая страдальцев по кубу, не верю, что наивные тыкатели в галочки куба смогут получить вменяемый Ethernet. Тут, пардон, надо разбираться в том, как эта штука работает.
Go to the top of the page
 
+Quote Post
AlanDrakes
сообщение Dec 26 2015, 11:23
Сообщение #4


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

Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474



Цитата(scifi @ Dec 26 2015, 01:11) *
А я смог. Перед эти был lwip на ColdFire. Драйвер сам сделал в обоих случаях. Переход был довольно безболезненным (обратите внимание, в том числе big endian --> little endian). После того, как влез в кишки lwip, и, слушая страдальцев по кубу, не верю, что наивные тыкатели в галочки куба смогут получить вменяемый Ethernet. Тут, пардон, надо разбираться в том, как эта штука работает.

У меня просто проект не компилится с использованием arm-none-eabi-gcc. Возможно, недостаточно библиотек, возможно, что-то ещё. По сути - забил на либу, решив использовать другой вполне вменяемый, легковесный стэк. Сейчас вот допиливаю его. По будням.. Сейчас занят стабилизатором питания.

ЗЫ: Извиняюсь, ссылка битая. Рабочая сслыка.

Исправил.

Сообщение отредактировал AlanDrakes - Dec 26 2015, 11:25
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 05:33
Рейтинг@Mail.ru


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