smk 0 14 ноября, 2013 Опубликовано 14 ноября, 2013 · Жалоба ну тогда остается только свои функции - заглушки написать. Двигаюсь в соответствии с постом №68. Пока удачно. В целом начинать с простого это самое то, что нужно. Т.к. с езернетом до этого дел не имел. Так что для лучшего понимания нужно пройти все шаги. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
User1285 0 23 ноября, 2013 Опубликовано 23 ноября, 2013 (изменено) · Жалоба Добрый день! Прошу совета. Вкратце опишу суть вопроса. В своих устройствах использую микроконтроллеры различных семейств(PIC, MSP430, планирую для более сложных проектов перейти на STM32). В основном устройства не очень сложные. Сейчас возникла необходимость в разработке устройств с web-интерфейсом(для конфигурирования, просмотра логов и т.п.) а также устройства должны будут складывать данные на удаленный сервер, обновлять прошивку удаленно и т.п. Смотрел на микросхему W5100 со встроенным TCP/IP стеком. Запустить не ней простой web-интерфейс , насколько я понял, будет довольно несложно, однако смущает ее дороговизна и не сильно широкое растространение (я так понимаю ввиду ограниченности возможностей ее стека?). В результате этого пришел к выводу что все-таки предпочтительнее использовать софтверный стек внутри контроллера и простую физику снаружи(в случае PIC18F97J60 и подобных еще дешевле все получается, т.к. физика внутри контроллера). Уважаемые специалисты, посоветуйте пожалуйста новичку какой из стеков (lwip, или от microchip, или еще какой-то) мне лучше выбрать чтобы, так сказать, он был более универсальным, т.е. при необходимости его можно было портировать на разные семейства контроллеров? Или же предпочтительно остановиться на каком-то одном семействе для работы с ethernet? Изменено 23 ноября, 2013 пользователем Pasha_a13 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 24 ноября, 2013 Опубликовано 24 ноября, 2013 · Жалоба Ну вобщем-то с текущими проблемами разобрался. Хотелось бы идти дальше. Физику читает/пишет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
psL 0 24 ноября, 2013 Опубликовано 24 ноября, 2013 · Жалоба какой из стеков (lwip, или от microchip, или еще какой-то) мне лучше выбрать чтобы, так сказать, он был более универсальным, т.е. при необходимости его можно было портировать на разные семейства контроллеров? Или же предпочтительно остановиться на каком-то одном семействе для работы с ethernet? Для переносимости лучше написать обертку над сокетами/протосокетами/... конкретной реализации tcp/ip, тогда приложение можно будет хоть на x86 запускать. А еще лучше вместо микростеков использовать полноценные стеки и соответствующие микроконтроллеры. Какой-нибудь TL-MR3020 уже 500 рублей в розницу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 25 ноября, 2013 Опубликовано 25 ноября, 2013 · Жалоба С физикой все более-менее понятно. Хотелось бы уже и попинговать попробовать. Как собственно запустить кейловский стек? Состояние RTL8201CP сподключенным кабелем привожу на картинке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 25 ноября, 2013 Опубликовано 25 ноября, 2013 · Жалоба init_TcpNet (); а потом в цикле вызывайте main_TcpNet(); не забудьте заполнить tcpip_user.с вроде на пинг после этого должен начать отвечать потом сделаете сокеты, и пропишите функции обменов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 26 ноября, 2013 Опубликовано 26 ноября, 2013 · Жалоба 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") Как цивилизованно выйти из ситуации? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 26 ноября, 2013 Опубликовано 26 ноября, 2013 · Жалоба Может имеет смысл подключить библиотеку от кейла и нужные файлы? Попытался скомпилировать с библиотекой и файлами 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 раза объявляется... файлы библиотеки считать основными, ваши файлы вторыми... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 27 ноября, 2013 Опубликовано 27 ноября, 2013 · Жалоба Разобрался с проблемой. Скомпилировалось. Хочу спросить, если применять библиотеку TCP_CM3.lib, то нужен ли SysTick? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 27 ноября, 2013 Опубликовано 27 ноября, 2013 · Жалоба да, без тика жизни нет... в ТСР стэке есть время зависимые функции. ДХЦП например обрабатывается с интервалами, таймауты считать для работы модулей тоже... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 27 ноября, 2013 Опубликовано 27 ноября, 2013 · Жалоба да, без тика жизни нет... в ТСР стэке есть время зависимые функции. ДХЦП например обрабатывается с интервалами, таймауты считать для работы модулей тоже... А что нужно сделать/дописать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 27 ноября, 2013 Опубликовано 27 ноября, 2013 · Жалоба у меня как то так функция которую вызываю в цикле постоянно только коменты по кривому вставляются:(, так что без них 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, для расчета таймаута и опроса не нашел ли он айпишник. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 4 декабря, 2013 Опубликовано 4 декабря, 2013 · Жалоба Наконец-то вернулся к своей теме. Результаты такие: дописал SysTick из примера от кейл. Дописал вызовы функций из того же примера. Скомпилировал. Пинга нет. Что нехватает? Прошу помочь. Проект прилагаю. ETH_keil.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bzx 0 4 декабря, 2013 Опубликовано 4 декабря, 2013 · Жалоба 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'? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 4 декабря, 2013 Опубликовано 4 декабря, 2013 · Жалоба init_ethernet() - вроде вызывать не надо, оно само вызовется в init_TcpNet (); дальше все вроде верно выглядит Пингуете из той же под сети? Аутонеготинация прошла? DHCP выключили не забыли? или вы по нему IP получаете? dhcp_disable (); до этого момента заданный в netconfig IP адрес не присвоится, а без него IP 0.0.0.0, а этот айпи запрещен, он служебный Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться