|
|
  |
Стек TCP IP для LPC2478 |
|
|
|
Jul 16 2011, 07:33
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688

|
Цитата(haker_fox @ Jul 14 2011, 05:51)  Вы читали ссылки, которые я приводил? У меня тоже KS8721 и я имел некоторое количество мучений с ней. А вот на счет "до сих пор" Вы не правы. KS8721 - устаревший чип. Ссылки - это ветка "Olimex/Startetkit LPC23/4 + RMII KS8721BL, Баги в схеме :" ? Похоже читал, когда оно только началось и когда у меня были проблемы. Допустим, KS8721 - устаревший чип, тогда всё равно редиски, потому как кроме DP83848C ничего другого не знают.
|
|
|
|
|
Jul 17 2011, 22:18
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688

|
Цитата(haker_fox @ Jul 16 2011, 16:43)  Ну так я там же написал, что нужно поправить в примерах Кейла, чтобы стек заработал с BS8721. кхе-кхе как оно может работать при наличии if (((id1 << 16) | (id2 & 0xFFF0)) == DP83848C_ID) { - совершенно непонятно я кажется уже где постил, не могу найти где, повторю тут Вариант для SK-MLPC1768, для SK-MLPC-237 делается аналогично в EMAC.h добавляем #define KS8721B_ID 0x00221610 /* PHY Identifier ks8721b */ в EMAC.c меняем void Init_EMAC(void) на int Init_EMAC(int mode) Код #define MCFG_CLK_DIV20 0x00000038 /* MDC = hclk / 20 */
// configure port-pins for use with LAN-controller, // reset it and send the configuration-sequence //mode = 0 - slow mode, 1 - fast int Init_EMAC(int mode) { // Keil: function modified to access the EMAC // Initializes the EMAC ethernet controller unsigned int regv,regv1,tout,id1,id2, moduleid, model=0, twait;
twait = 0x100000; if(mode) twait = 0x10000;
/* Power Up the EMAC controller. */ LPC_SC->PCONP |= 0x40000000; /* Enable P1 Ethernet Pins. */ LPC_PINCON->PINSEL2 = 0x50150105;
#ifdef __LPC175x /* LPC175x devices, use software MII management. */ LPC_PINCON->PINSEL4 &= ~0x000F0000; LPC_GPIO2->FIODIR |= MDC; #else /* LPC176x devices, no MDIO, MDC remap. */ LPC_PINCON->PINSEL3 = (LPC_PINCON->PINSEL3 & ~0x0000000F) | 0x00000005; #endif /* Reset all EMAC internal modules. */ LPC_EMAC->MAC1 = MAC1_RES_TX | MAC1_RES_MCS_TX | MAC1_RES_RX | MAC1_RES_MCS_RX | MAC1_SIM_RES | MAC1_SOFT_RES; LPC_EMAC->Command = CR_REG_RES | CR_TX_RES | CR_RX_RES | CR_PASS_RUNT_FRM; /* A short delay after reset. */ for (tout = 100; tout; tout--);
/* Initialize MAC control registers. */ LPC_EMAC->MAC1 = MAC1_PASS_ALL; LPC_EMAC->MAC2 = MAC2_CRC_EN | MAC2_PAD_EN;
LPC_EMAC->MAXF = ETH_MAX_FLEN; LPC_EMAC->CLRT = CLRT_DEF; LPC_EMAC->IPGR = IPGR_DEF;
/*PCLK=18MHz, clock select=6, MDC=18/6=3MHz */ /* Enable Reduced MII interface. */ LPC_EMAC->MCFG = MCFG_CLK_DIV20 | MCFG_RES_MII; for (tout = 100; tout; tout--); LPC_EMAC->MCFG = MCFG_CLK_DIV20;
regv = read_PHY (PHY_REG_BMSR); regv1= read_PHY (PHY_REG_STS);
/* Enable Reduced MII interface. */ LPC_EMAC->Command = CR_RMII | CR_PASS_RUNT_FRM;
/* Put the DP83848C in reset mode */ write_PHY (PHY_REG_BMCR, 0x8000);
/* Wait for hardware reset to end. */ for (tout = 0; tout < 0x100000; tout++) { regv = read_PHY (PHY_REG_BMCR); if (!(regv & 0x8000)) { /* Reset complete */ break; } }
/* Check if this is a DP83848C PHY. */ id1 = read_PHY (PHY_REG_IDR1); id2 = read_PHY (PHY_REG_IDR2);
moduleid = ((id1 << 16) | (id2 & 0xFFF0)); if ( moduleid == DP83848C_ID ) model=1; else if ( moduleid == KS8721B_ID ) model=2;
/* Use autonegotiation about the link speed. */ write_PHY (PHY_REG_BMCR, PHY_AUTO_NEG);
/* Wait to complete Auto_Negotiation. 0x10000*/ for (tout = 0; tout < twait; tout++) { regv = read_PHY (PHY_REG_BMSR); if (regv & 0x0020) { /* Autonegotiation Complete. */ break; } if (tout > 0x100 && (LPC_EMAC->MIND & MIND_NOT_VAL)) break; }
if (regv & 0x0020) { /* Autonegotiation Complete. */ } else { return 1; /* Ωαßσδⁿ φσ ∩εΣΩδ■≈σφ */ }
/* Check the link status. */ for (tout = 0; tout < 0x10000; tout++) { // regv = read_PHY (PHY_REG_STS); // if (regv & 0x0001) { // /* Link is on. */ // break; // } regv = read_PHY (PHY_REG_BMSR); if (regv & 0x0004) { /* Link is on. */ break; }
}
/*****************/ if(model == 2) { regv = read_PHY (PHY_REG_STS2); regv=(regv>>2)&7; if ((regv==5)||(regv==6)) {/* Full duplex is enabled. */ LPC_EMAC->MAC2 |= MAC2_FULL_DUP; LPC_EMAC->Command |= CR_FULL_DUP; LPC_EMAC->IPGT = IPGT_FULL_DUP; } else { /* Half duplex mode. */ LPC_EMAC->IPGT = IPGT_HALF_DUP; }
/* Configure 100MBit/10MBit mode. */ if ((regv==1)||(regv==5)) {/* 10MBit mode. */ LPC_EMAC->SUPP = 0; } else { /* 100MBit mode. */ LPC_EMAC->SUPP = SUPP_SPEED; } /*****************/ } else { regv = read_PHY (PHY_REG_STS);
/* Configure Full/Half Duplex mode. */ if (regv & 0x0004) { /* Full duplex is enabled. */ LPC_EMAC->MAC2 |= MAC2_FULL_DUP; LPC_EMAC->Command |= CR_FULL_DUP; LPC_EMAC->IPGT = IPGT_FULL_DUP; } else { /* Half duplex mode. */ LPC_EMAC->IPGT = IPGT_HALF_DUP; }
/* Configure 100MBit/10MBit mode. */ if (regv & 0x0002) { /* 10MBit mode. */ LPC_EMAC->SUPP = 0; } else { /* 100MBit mode. */ LPC_EMAC->SUPP = SUPP_SPEED; } } /*****************/
/* Set the Ethernet MAC Address registers */ LPC_EMAC->SA0 = (MYMAC_1 << 8) | MYMAC_2; LPC_EMAC->SA1 = (MYMAC_3 << 8) | MYMAC_4; LPC_EMAC->SA2 = (MYMAC_5 << 8) | MYMAC_6;
/* Initialize Tx and Rx DMA Descriptors */ rx_descr_init (); tx_descr_init ();
/* Receive Broadcast and Perfect Match Packets */ LPC_EMAC->RxFilterCtrl = RFC_BCAST_EN | RFC_PERFECT_EN;
/* Enable EMAC interrupts. */ LPC_EMAC->IntEnable = INT_RX_DONE | INT_TX_DONE;
/* Reset all interrupts */ LPC_EMAC->IntClear = 0xFFFF;
/* Enable receive and transmit mode of MAC Ethernet core */ LPC_EMAC->Command |= (CR_RX_EN | CR_TX_EN); LPC_EMAC->MAC1 |= MAC1_REC_EN;
return 0; }
Сообщение отредактировал evgen2 - Jul 17 2011, 22:20
|
|
|
|
|
Jul 19 2011, 07:19
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 20-06-11
Из: Ленино
Пользователь №: 65 788

|
В кейловском стеке есть функция создания сокета: Код U8 tcp_get_socket ( U8 type, /* Type of TCP socket. */ U8 tos, /* Type Of Service. */ U16 tout, /* Idle timeout period before disconnecting. */ U16 (*listener)( /* Function to call when a TCP event occurs. */ U8 socket, /* Socket handle of the local machine. */ U8 event, /* TCP event such as connect, or close. */ U8* ptr, /* Pointer to IP address of remote machine, */ /* or to buffer containing received data. */ U16 par )); /* Port number of remote machine, or length */ /* of received data. */ U16 tout - время в секундах перед разъеденением. Т.е. если он 60, то через минуту сокета не станет. Мне нужно, чтобы сокет жил "вечно". Кто знает, как этого добиться? -1 не подходит.
|
|
|
|
|
Jul 20 2011, 18:38
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 20-06-11
Из: Ленино
Пользователь №: 65 788

|
Цитата(evgen2 @ Jul 18 2011, 01:18)  Код /*PCLK=18MHz, clock select=6, MDC=18/6=3MHz */ /* Enable Reduced MII interface. */ LPC_EMAC->MCFG = MCFG_CLK_DIV20 | MCFG_RES_MII; for (tout = 100; tout; tout--); LPC_EMAC->MCFG = MCFG_CLK_DIV20; } Какие PCLK=18MH, Вы о чем? Делите Вы не частоту тактирования периферии, а частоту внешнего генератора для PHY.
Сообщение отредактировал Slowhan - Jul 20 2011, 18:39
|
|
|
|
|
Jul 21 2011, 07:31
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 20-06-11
Из: Ленино
Пользователь №: 65 788

|
Цитата(haker_fox @ Jul 20 2011, 04:57)  Насколько я понял, это таймаут по "неиспользованию" сокета. Т.е. если Вы в течение времени tout не используете сокет, то он "растворяется". Используйте почаще, и он будет существовать  Чудеса прямо, вчера отвечал в этой ветке - Вашего вопроса не видел! Или форум чудит, или я)) Тоже пришел к такому мнению, что надо использовать почаще, счас поставил 3600) У меня такой вопрос - какую скорость можно развить на кейловском стеке и LPC23xx? Мне 3 МБайта надо, а пока и мегабайт не выходит.
Сообщение отредактировал Slowhan - Jul 21 2011, 07:32
|
|
|
|
|
Jul 25 2011, 21:05
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 22-02-07
Пользователь №: 25 578

|
Нет желания плодить темы, поэтому сдесь спрошу. Посоветуйте tcp-ip стек на мелкий чип вроде lpc1114 или lpc1343.
--------------------
Мужество есть лишь у тех, кто ощутил сердцем страх! В. Кипелов, Беги за солнцем.
|
|
|
|
|
Jul 26 2011, 05:05
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(RA3WUM @ Jul 26 2011, 01:05)  Нет желания плодить темы, поэтому сдесь спрошу. Посоветуйте tcp-ip стек на мелкий чип вроде lpc1114 или lpc1343. uIP наверное.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Jul 26 2011, 07:26
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
Цитата Посоветуйте tcp-ip стек на мелкий чип вроде lpc1114 или lpc1343. А что вы от стека ходите ??? я так понимаю вам нужен PPP ? так как мак контроллеров нету ? или будет МАС c SPI ?, может лучше WizNET ?
|
|
|
|
|
Jul 26 2011, 20:34
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 22-02-07
Пользователь №: 25 578

|
Цитата(MALLOY2 @ Jul 26 2011, 10:26)  А что вы от стека ходите ??? я так понимаю вам нужен PPP ? так как мак контроллеров нету ? или будет МАС c SPI ?, может лучше WizNET ? Хочу mp3-аудиопоток по http запихивать в декодер VS1053, скорость соответственно 64-192 кБит\с. Если говорить о физическом уровне то это wi-fi модуль с SPI.
Сообщение отредактировал RA3WUM - Jul 26 2011, 20:35
--------------------
Мужество есть лишь у тех, кто ощутил сердцем страх! В. Кипелов, Беги за солнцем.
|
|
|
|
|
Jul 29 2011, 07:23
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 7-06-08
Пользователь №: 38 119

|
Посоветуйте, плиз, литературу по прикручиванию lwip к юкосу. все ссылки, которые вроде как полезные - недоступны(((. А на тех, что доступны - только общая информация, мало мне подходящая. Мне хотя бы одним глазком на код взглянуть...))) и то хлеб. был на саванне, lwip.wikia.com, родной странице lwip. Да и столкнулся с проблемой источников - их раз-два и обчелся(((
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|