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

 
 
> LwIP стек в STM32F217
Acvarif
сообщение Jan 12 2012, 09:42
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



На st имеется демка под LwIP на stm32f207 для PHY DP83848C (режим MII) (в демке реализованы почти все возможные варианты серверов и клиентов).
Поскольку у меня на столе имеется платка с stm32f217 + phy ks8721bl (режим RMII) пришлось демку LwIP переделать под нее (не поленился переделал все демки в том числе и под FREE RTOS). Все приложения работают без проблем. Вот ссылка на архив (большой ~47м ). (переделаны проекты для Keil, проекты под IAR переделываюся только сменой камня. Все работает также без проблем) Но остался вопрос.
Нормального понимания как работать с LwIP + stm32 пока нет. Дока на стек и демку не проясняет.
У кого есть опыт работы с LwIP + stm32 подсобите please для старта простым примером LwIP как принять одни данные по UDP и отправить другие.
В демке имеется UDP эхо сервер. Поможет даже подсказка как сделать так, чтобы сервер отправлял не эхо, а конкретные данные из конкретного буфера типа *my_buf.

Спасибо.

В main все начинается так:

Код
    /* check if any packet received */
    if (ETH_CheckFrameReceived())
    {
      /* process received ethernet packet */
      LwIP_Pkt_Handle();
    }


Функция ETH_CheckFrameReceived делает это:
CODE
/**
* @brief This function polls for a frame reception
* @param None
* @retval Returns 1 when a frame is received, 0 if none.
*/
uint32_t ETH_CheckFrameReceived(void)
{
/* check if last segment */
if(((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) == (uint32_t)RESET) &&
((DMARxDescToGet->Status & ETH_DMARxDesc_LS) != (uint32_t)RESET))
{
DMA_RX_FRAME_infos->LS_Rx_Desc = DMARxDescToGet;
DMA_RX_FRAME_infos->Seg_Count++;
return 1;
}

/* check if first segment */
else if(((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) == (uint32_t)RESET) &&
((DMARxDescToGet->Status & ETH_DMARxDesc_FS) != (uint32_t)RESET)&&
((DMARxDescToGet->Status & ETH_DMARxDesc_LS) == (uint32_t)RESET))
{
DMA_RX_FRAME_infos->FS_Rx_Desc = DMARxDescToGet;
DMA_RX_FRAME_infos->LS_Rx_Desc = NULL;
DMA_RX_FRAME_infos->Seg_Count = 1;
DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr);
}

/* check if intermediate segment */
else if(((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) == (uint32_t)RESET) &&
((DMARxDescToGet->Status & ETH_DMARxDesc_FS) == (uint32_t)RESET)&&
((DMARxDescToGet->Status & ETH_DMARxDesc_LS) == (uint32_t)RESET))
{
(DMA_RX_FRAME_infos->Seg_Count) ++;
DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr);
}
return 0;
}

Я так понимаю, что функция проверяет имеется ли что-то в DMA В частности если имеется фрейм и сегмент в фрейме последний, то возвращается 1.
Что такое последний сегмент? Понимаю, что можно послать меня на очередной мануал. Но мануалы меня уже сильно достали из за их непоследовательности и часто бесполезности.
Ответьте пожалуйста на русском коротко работу функции ETH_CheckFrameReceived(void) (функция почемуто всегда, послал я фрейм или нет, возвращает 1)
Дальше начинается кошмар по имени
Код
      /* process received ethernet packet */
      LwIP_Pkt_Handle();
который далее переходит в
Код
  /* Read a received packet from the Ethernet buffers and send it to the lwIP for handling */
  ethernetif_input(&netif);

и куда дальше попадают собственно данные посланного из компа UDP пакета, так, чтобы с ними можно было -бы поработать и как послать компу ответ в виде своего пакета (а не того же самого) не допираю.
Подсобите, кто сталкивался с этим.
Нашел пока это http://lwip.wikia.com/wiki/Raw/UDP
Всеравно не понятно как на базе LwIP послать на комп UDP пакет Ну допустим так:

Код
   struct udp_pcb *upcb;
   /* Create a new UDP control block  */
   upcb = udp_new();    
   /* Bind the upcb to the UDP_PORT port */
   /* Using IP_ADDR_ANY allow the upcb to be used by any local interface */
   udp_bind(upcb, IP_ADDR_ANY, 23);
  /* Connect to the remote client */
  udp_connect(upcb, addr, 23);

В каком виде нужно записать addr?
Похоже, что дальше можно
Код
udp_send(struct udp_pcb * pcb, struct pbuf * p)

тоесть
Код
udp_send(upcb, p);

Что такое struct pbuf * p

Сообщение отредактировал Acvarif - Jan 12 2012, 14:48
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Twen
сообщение Jan 17 2012, 12:38
Сообщение #2


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

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Аналогично использую МК stm32 + LwIp на FreeRTOS, при ключении прибора не всегда начинает пинговаться, после нескольких сбросов отвечает, хотя эзернет модуль принимает данные(проверено)...У кого нибудь возник еще такая проблема?
Хотя, когда прошил пример без ОС udp_echo_server, пингуется ставильно после вкл./выкл. питания.

Сообщение отредактировал Twen - Jan 17 2012, 13:04
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Acvarif   LwIP стек в STM32F217   Jan 12 2012, 09:42
- - kan35   Дока на lwIP существует, она вполне полезная, по к...   Jan 12 2012, 15:49
|- - Acvarif   Спасибо. Начало проясняться. Удалось послать ст...   Jan 13 2012, 06:43
- - kan35   Вы продолжаете работать на уровне pcb, я же предла...   Jan 13 2012, 07:33
|- - Acvarif   ЦитатаВы продолжаете работать на уровне pcb, я же ...   Jan 13 2012, 11:39
|- - Acvarif   Цитата(Acvarif @ Jan 13 2012, 15:39) Пыта...   Jan 13 2012, 13:03
|- - Acvarif   Все прояснилось. Мануал 2001 года подходит для LwI...   Jan 13 2012, 14:51
- - kan35   Чтобы активировать те или иные Api кроме того, что...   Jan 13 2012, 16:34
|- - Acvarif   Спасибо. Почти получилось... Портит картину netcon...   Jan 13 2012, 18:58
|- - Acvarif   RE: LwIP стек в STM32F217   Jan 14 2012, 13:40
- - kan35   opt.h - это настройки по умолчанию, их не стоит тр...   Jan 14 2012, 17:05
|- - Acvarif   Понял. Спасибо. Файл нашел. Можно ли подружить это...   Jan 14 2012, 18:17
- - kan35   Должен работать конечно, но нюансов не скажу, так ...   Jan 14 2012, 19:04
|- - Acvarif   Понял. Спасибо. С ОС стек компилится без проблем. ...   Jan 14 2012, 19:35
- - MK2   А чем вы с компьютера посылали пакеты?   Jan 15 2012, 18:20
|- - Acvarif   Цитата(MK2 @ Jan 15 2012, 22:20) А чем вы...   Jan 16 2012, 06:36
|- - Acvarif   В общем вроде все получилось. Использовал имеющийс...   Jan 16 2012, 13:23
|- - scifi   Цитата(Acvarif @ Jan 16 2012, 17:23) Все ...   Jan 16 2012, 13:36
|- - Acvarif   Цитата(scifi @ Jan 16 2012, 17:36) В MAC ...   Jan 16 2012, 14:52
|- - scifi   Цитата(Acvarif @ Jan 16 2012, 18:52) Но о...   Jan 16 2012, 19:43
||- - Acvarif   Цитата(scifi @ Jan 16 2012, 22:43) Пакет ...   Jan 16 2012, 20:16
||- - MALLOY2   Цитата(Acvarif @ Jan 16 2012, 22:16) Да, ...   Jan 17 2012, 08:45
||- - sparcmaster   Цитата(Acvarif @ Jan 17 2012, 00:16) Буду...   Jan 17 2012, 08:51
|- - =F8=   Цитата(Acvarif @ Jan 16 2012, 17:52) Но о...   Jan 17 2012, 09:11
|- - scifi   Цитата(=F8= @ Jan 17 2012, 13:11) Парамет...   Jan 17 2012, 11:10
|- - =F8=   Цитата(scifi @ Jan 17 2012, 14:10) Это из...   Jan 17 2012, 12:37
- - MALLOY2   ЦитатаБуду признателен, за подсказку - технологию ...   Jan 17 2012, 09:44
|- - Acvarif   Цитата(MALLOY2 @ Jan 17 2012, 12:44) Я по...   Jan 17 2012, 13:25
- - =F8=   Если кто не знает. В LwIP системма выдачи отладочн...   Jan 17 2012, 13:48
|- - Acvarif   Спасибо за полезную информацию. Что имеется ввиду...   Jan 17 2012, 14:12
||- - =F8=   Цитата(Acvarif @ Jan 17 2012, 18:12) Спас...   Jan 17 2012, 15:59
|- - Acvarif   Цитата(=F8= @ Jan 17 2012, 16:48) Если кт...   Jan 18 2012, 07:40
|- - =F8=   Цитата(Acvarif @ Jan 18 2012, 10:40) А эт...   Jan 18 2012, 11:25
|- - Acvarif   Цитата(=F8= @ Jan 18 2012, 14:25) Извиняю...   Jan 18 2012, 13:27
|- - =F8=   Прежде всего нужно переопределить макрос LWIP_DBG_...   Jan 18 2012, 13:57
|- - Acvarif   Сделано так LWIP_DBG_ON LWIP_DBG_LEVEL_ALL CODE/**...   Jan 18 2012, 14:29
- - kan35   Я бы не парился с этим режимом. лучше напишите сво...   Jan 18 2012, 08:11
|- - Acvarif   Цитата(kan35 @ Jan 18 2012, 11:11) Я бы н...   Jan 18 2012, 08:45
- - kan35   Все верно у тебя сделано. Чтобы printf куда-то вы...   Jan 18 2012, 10:16
- - MALLOY2   ЦитатаПолучается определяет функцию для выдачи соо...   Jan 18 2012, 10:44
- - =F8=   Глубина стека в задаче какая? printf довольно стек...   Jan 18 2012, 15:56
|- - Acvarif   Цитата(=F8= @ Jan 18 2012, 18:56) Глубина...   Jan 18 2012, 18:46
- - =F8=   Чтоб появились сообшения в настройках проекта укаж...   Jan 19 2012, 10:14
|- - Acvarif   Цитата(=F8= @ Jan 19 2012, 13:14) Чтоб по...   Jan 19 2012, 12:26
- - =F8=   Посмотрел код..... 1 Вы обявляете локальную переме...   Jan 19 2012, 13:04
|- - Acvarif   Цитата(=F8= @ Jan 19 2012, 16:04) Посмотр...   Jan 19 2012, 14:31
- - =F8=   А размер пакета(SIZE) увеличить не забыли? От этог...   Jan 19 2012, 14:50
|- - Acvarif   Цитата(=F8= @ Jan 19 2012, 17:50) А разме...   Jan 19 2012, 15:10
|- - Acvarif   Касательно этой темы: 1. Удержит ли LwIP+FreeRto...   Jan 20 2012, 15:52
- - MALLOY2   ЦитатаНапример работа с ADC, DAC, цифровая обработ...   Jan 20 2012, 16:05
|- - Acvarif   Цитата(MALLOY2 @ Jan 20 2012, 20:05) Стра...   Jan 20 2012, 17:58
- - Twen   Добрый день. Я разбираюсь с реализацией веб0сервер...   Jan 28 2012, 08:46
|- - Алллексей   Цитата(Twen @ Jan 28 2012, 12:46) Добрый ...   Aug 20 2013, 12:32
- - Log_in   Доброго времени суток. Пытаюсь разобраться с работ...   Dec 20 2013, 11:44
|- - Golikov A.   Цитата(Log_in @ Dec 20 2013, 15:44) Добро...   Dec 20 2013, 12:37
- - Log_in   Дело в том, что у меня F107, и в связи с этим в би...   Dec 20 2013, 12:50
- - Golikov A.   ОЙ блин! не,... надо ваще забыть про мое сообщ...   Dec 20 2013, 13:01
- - Log_in   Использовал функцию LwIP_Periodic_Handle, вызывающ...   Dec 23 2013, 11:40


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

 


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


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