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

 
 
12 страниц V  « < 4 5 6 7 8 > »   
Reply to this topicStart new topic
> STM32F107 + RTL8201 + lwip-1.4.0, драйвер PHY для lwip
smk
сообщение Nov 14 2013, 08:32
Сообщение #76


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Nov 13 2013, 23:13) *
ну тогда остается только свои функции - заглушки написать.

Двигаюсь в соответствии с постом №68. Пока удачно. В целом начинать с простого это самое то, что нужно. Т.к. с езернетом до этого дел не имел. Так что для лучшего понимания нужно пройти все шаги.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Pasha_a13
сообщение Nov 23 2013, 12:40
Сообщение #77


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

Группа: Участник
Сообщений: 166
Регистрация: 8-09-09
Из: Украина
Пользователь №: 52 244



Добрый день!

Прошу совета.
Вкратце опишу суть вопроса.

В своих устройствах использую микроконтроллеры различных семейств(PIC, MSP430, планирую для более сложных проектов перейти на STM32).
В основном устройства не очень сложные.
Сейчас возникла необходимость в разработке устройств с web-интерфейсом(для конфигурирования, просмотра логов и т.п.) а также устройства должны будут складывать данные на удаленный сервер, обновлять прошивку удаленно и т.п.

Смотрел на микросхему W5100 со встроенным TCP/IP стеком.
Запустить не ней простой web-интерфейс , насколько я понял, будет довольно несложно, однако смущает ее дороговизна и не сильно широкое растространение (я так понимаю ввиду ограниченности возможностей ее стека?).
В результате этого пришел к выводу что все-таки предпочтительнее использовать софтверный стек внутри контроллера и простую физику снаружи(в случае PIC18F97J60 и подобных еще дешевле все получается, т.к. физика внутри контроллера).

Уважаемые специалисты, посоветуйте пожалуйста новичку какой из стеков (lwip, или от microchip, или еще какой-то) мне лучше выбрать чтобы, так сказать, он был более универсальным, т.е. при необходимости его можно было портировать на разные семейства контроллеров?
Или же предпочтительно остановиться на каком-то одном семействе для работы с ethernet?

Сообщение отредактировал Pasha_a13 - Nov 23 2013, 12:44
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 24 2013, 13:49
Сообщение #78


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Ну вобщем-то с текущими проблемами разобрался. Хотелось бы идти дальше. Физику читает/пишет.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
psL
сообщение Nov 24 2013, 18:48
Сообщение #79


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



Цитата(Pasha_a13 @ Nov 23 2013, 16:40) *
какой из стеков (lwip, или от microchip, или еще какой-то) мне лучше выбрать чтобы, так сказать, он был более универсальным, т.е. при необходимости его можно было портировать на разные семейства контроллеров?
Или же предпочтительно остановиться на каком-то одном семействе для работы с ethernet?

Для переносимости лучше написать обертку над сокетами/протосокетами/... конкретной реализации tcp/ip, тогда приложение можно будет хоть на x86 запускать. А еще лучше вместо микростеков использовать полноценные стеки и соответствующие микроконтроллеры. Какой-нибудь TL-MR3020 уже 500 рублей в розницу...
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 25 2013, 17:47
Сообщение #80


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



С физикой все более-менее понятно. Хотелось бы уже и попинговать попробовать. Как собственно запустить кейловский стек? Состояние RTL8201CP сподключенным кабелем привожу на картинке.
Прикрепленное изображение


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 25 2013, 19:29
Сообщение #81


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



init_TcpNet ();

а потом в цикле вызывайте
main_TcpNet();

не забудьте заполнить
tcpip_user.с

вроде на пинг после этого должен начать отвечать

потом сделаете сокеты, и пропишите функции обменов

Go to the top of the page
 
+Quote Post
smk
сообщение Nov 26 2013, 17:46
Сообщение #82


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Nov 25 2013, 21:29) *
init_TcpNet ();

а потом в цикле вызывайте
main_TcpNet();

не забудьте заполнить
tcpip_user.с

вроде на пинг после этого должен начать отвечать

потом сделаете сокеты, и пропишите функции обменов

Может имеет смысл подключить библиотеку от кейла и нужные файлы?

Попытался скомпилировать с библиотекой и файлами Net_Config.c / Net_Config.h
Получил ошибку:

Код
F:\Program\Keil454\ARM\RV31\Inc\RTL.h(37): error:  #256: invalid redeclaration of type name "S8" (declared at line 31 of "type.h")


Как цивилизованно выйти из ситуации?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 26 2013, 20:26
Сообщение #83


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(smk @ Nov 26 2013, 21:46) *
Может имеет смысл подключить библиотеку от кейла и нужные файлы?

Попытался скомпилировать с библиотекой и файлами Net_Config.c / Net_Config.h
Получил ошибку:

Код
F:\Program\Keil454\ARM\RV31\Inc\RTL.h(37): error:  #256: invalid redeclaration of type name "S8" (declared at line 31 of "type.h")


Как цивилизованно выйти из ситуации?


ну подключать библиотеку и нужные файлы само собой разумелось.


проверить что все файлы, а в честности type.h защищены
#ifndef header_name
#define header_name

#endif

ну а дальше править файлы, где у вас один тип по 2 раза объявляется...
файлы библиотеки считать основными, ваши файлы вторыми...
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 27 2013, 07:55
Сообщение #84


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Разобрался с проблемой. Скомпилировалось. Хочу спросить, если применять библиотеку TCP_CM3.lib, то нужен ли SysTick?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 27 2013, 12:17
Сообщение #85


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



да, без тика жизни нет...

в ТСР стэке есть время зависимые функции. ДХЦП например обрабатывается с интервалами, таймауты считать для работы модулей тоже...

Go to the top of the page
 
+Quote Post
smk
сообщение Nov 27 2013, 14:33
Сообщение #86


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Nov 27 2013, 14:17) *
да, без тика жизни нет...

в ТСР стэке есть время зависимые функции. ДХЦП например обрабатывается с интервалами, таймауты считать для работы модулей тоже...

А что нужно сделать/дописать?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 27 2013, 16:07
Сообщение #87


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



у меня как то так
функция которую вызываю в цикле постоянно
только коменты по кривому вставляютсяsad.gif, так что без них

Код
void TCP_IP_Process(void)
{
   int16_t i; //ïàðàìåòð öèêëà
   timer_poll (); //îïðàøèâàåì òàéìåð, ôîðìèðóåì íåîáõîäèìûå äëÿ ðàáîòû ÒÑÐ òèêè
   main_TcpNet(); //îñíîâíàÿ ôóíêöèÿ ðàáîòû ÒÑÐ ñòýêà
   dhcp_check (); //ïðîâåðÿåì DHCP
        
   //îòïðàâêà ãîòîâûõ äàííûõ UDP
   SendUDPdata(&UdpSock);
    
  //ïðîâåðÿåì äëÿ êàêèõ ñîêåòîâ âîçìîæíî î÷èñòèòü îêíî è îòïðàâëÿåì ãîòîâûå äàííûå åñëè åñòü
  for(i = 0; i < TCP_SOCKET_NUMBER; i++)//öèêë ïî âñåì ñîêåòà
   {
    SendTCPdata(&(TcpSock[i])); //îòïðàâêà ãîòîâûõ äàííûõ
    if( GetFIFOBufferSize(TcpSock[i].InputBufferStr) >= TcpSock[i].FreeWindowSize) //åñëè â áóôåðå åñòü äîñòàòî÷íî ìåñòà
      tcp_reset_window(TcpSock[i].SocketNumber);    //î÷èùàåì îêíî äàííîãî ñîêåòà
   }
  tick = __FALSE; //ñáðàñûâàåì òèê åñëè ïîÿâèëñÿ, åñëè íåò, íè÷åãî ñòðàøíîãî
}



SendTCP, SendUDP - это мои функции отправки ТСР и UDP сообщений из моих буферов, GetFIFOBufferSize - это тоже моя для проверки места в буфере, чтобы понять можно окно ТСР отпускать или еще нет.

и вот функция таймера что тики выставляет
Код
char Tcp100mSec = 0;
static void timer_poll ()
{
  /* System tick timer running in poll mode */
  if (SysTick->CTRL & 0x10000)  
  {
    if ( Tcp100mSec++ >= 100  )
    {
      Tcp100mSec = 0;
      /* Timer tick every 100 ms */
      timer_tick();
      tick = __TRUE;
    }
  }
}

в этой функции ставиться глобальный tick тот что в dhcp у меня используется, а timer_tick() - это функция стэка

а tick  используется в DHCP, для расчета таймаута и опроса не нашел ли он айпишник.
Go to the top of the page
 
+Quote Post
smk
сообщение Dec 4 2013, 16:34
Сообщение #88


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Наконец-то вернулся к своей теме. Результаты такие: дописал SysTick из примера от кейл. Дописал вызовы функций из того же примера. Скомпилировал. Пинга нет. Что нехватает? Прошу помочь. Проект прилагаю.
Прикрепленный файл  ETH_keil.zip ( 680.54 килобайт ) Кол-во скачиваний: 56


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
bzx
сообщение Dec 4 2013, 17:30
Сообщение #89


Местный
***

Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528



1. Ваш Phy чип определяется?
Цитата
/* Check if this is a RTL8201CP PHY. */
id1 = read_PHY (PHY_REG_IDR1);
id2 = read_PHY (PHY_REG_IDR2);

что в регистрах id1 и id2, т.е. идентификатор для RTL8201 определяется корректно? Пробегитись с отладчиком, после указанных строк в if попадаете?

2. Где 'Net_lib.c'?


--------------------
Для связи email: info собака qbit.su
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 4 2013, 17:38
Сообщение #90


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



init_ethernet() - вроде вызывать не надо, оно само вызовется в init_TcpNet ();

дальше все вроде верно выглядит

Пингуете из той же под сети?
Аутонеготинация прошла?
DHCP выключили не забыли? или вы по нему IP получаете?
dhcp_disable (); до этого момента заданный в netconfig IP адрес не присвоится, а без него IP 0.0.0.0, а этот айпи запрещен, он служебный


Go to the top of the page
 
+Quote Post

12 страниц V  « < 4 5 6 7 8 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 13:39
Рейтинг@Mail.ru


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