|
|
  |
STM32F107 + RTL8201 + lwip-1.4.0, драйвер PHY для lwip |
|
|
|
Nov 23 2013, 12:40
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Nov 26 2013, 17:46
|
Гуру
     
Группа: Свой
Сообщений: 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") Как цивилизованно выйти из ситуации?
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
Nov 26 2013, 20:26
|
Гуру
     
Группа: Свой
Сообщений: 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 раза объявляется... файлы библиотеки считать основными, ваши файлы вторыми...
|
|
|
|
|
Nov 27 2013, 16:07
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
у меня как то так функция которую вызываю в цикле постоянно только коменты по кривому вставляются  , так что без них Код 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, для расчета таймаута и опроса не нашел ли он айпишник.
|
|
|
|
|
Dec 4 2013, 17:30
|

Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|