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

 
 
> 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

Сообщений в этой теме
- 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
- - Twen   Аналогично использую МК stm32 + LwIp на FreeRTOS, ...   Jan 17 2012, 12:38
- - =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 Текстовая версия Сейчас: 19th July 2025 - 00:02
Рейтинг@Mail.ru


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