Перейти к содержанию
    

ну тогда остается только свои функции - заглушки написать.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день!

 

Прошу совета.

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

 

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

В основном устройства не очень сложные.

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

 

Смотрел на микросхему W5100 со встроенным TCP/IP стеком.

Запустить не ней простой web-интерфейс , насколько я понял, будет довольно несложно, однако смущает ее дороговизна и не сильно широкое растространение (я так понимаю ввиду ограниченности возможностей ее стека?).

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

 

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

Или же предпочтительно остановиться на каком-то одном семействе для работы с ethernet?

Изменено пользователем Pasha_a13

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Или же предпочтительно остановиться на каком-то одном семействе для работы с ethernet?

Для переносимости лучше написать обертку над сокетами/протосокетами/... конкретной реализации tcp/ip, тогда приложение можно будет хоть на x86 запускать. А еще лучше вместо микростеков использовать полноценные стеки и соответствующие микроконтроллеры. Какой-нибудь TL-MR3020 уже 500 рублей в розницу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

post-3446-1385401482_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

init_TcpNet ();

 

а потом в цикле вызывайте

main_TcpNet();

 

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

tcpip_user.с

 

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

 

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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")

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Попытался скомпилировать с библиотекой и файлами 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 раза объявляется...

файлы библиотеки считать основными, ваши файлы вторыми...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня как то так

функция которую вызываю в цикле постоянно

только коменты по кривому вставляются:(, так что без них

 

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, для расчета таймаута и опроса не нашел ли он айпишник.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

ETH_keil.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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'?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Пингуете из той же под сети?

Аутонеготинация прошла?

DHCP выключили не забыли? или вы по нему IP получаете?

dhcp_disable (); до этого момента заданный в netconfig IP адрес не присвоится, а без него IP 0.0.0.0, а этот айпи запрещен, он служебный

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...