|
STM32F107 + RTL8201 + lwip-1.4.0, драйвер PHY для lwip |
|
|
|
 |
Ответов
|
Nov 13 2013, 08:23
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
БЛИН! прошу прощения, я вас полностью обманул... вызова этих функций найти нельзя он внутри библиотеки, а сами эти функции должны быть созданы.... у меня к LPC есть еще файлик EMAC_LPC17xx.c - там описаны все патроха управления емаком, инициализируются прерывания и мак контроллер в нем есть эта функция CODE void init_ethernet (void) { /* Initialize the EMAC ethernet controller. */ uint32_t regv,tout,id1,id2; DBG_PHY(""); DBG_PHY("\r\nDBG_PHY: Starting Init Physic"); /* Power Up the EMAC controller. */ LPC_SC->PCONP |= 0x40000000;
/* Configure PHY */ LPC_GPIO4 -> FIOSET |= 1<<29; LPC_GPIO4 -> FIODIR |= 1<<29; LPC_GPIO1 -> FIOCLR |= 1<<14; LPC_GPIO1 -> FIODIR |= 1<<14; LPC_GPIO1 -> FIOCLR |= 1<<8; LPC_GPIO1 -> FIODIR |= 1<<8;
/* Power doun/up Reset PHY for strapping */ LPC_GPIO4 -> FIOCLR |= 1<<29; for(tout=0;tout<1000000;tout++); LPC_GPIO4 -> FIOSET |= 1<<29; for(tout=0;tout<1000000;tout++);
/* Enable P1 Ethernet Pins. */ LPC_PINCON->PINSEL2 = 0x50150105; /* LPC176x devices, no MDIO, MDC remap. */ LPC_PINCON->PINSEL3 = (LPC_PINCON->PINSEL3 & ~0x0000000F) | 0x00000005;
/* 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 */ LPC_EMAC->MCFG = MCFG_CLK_DIV28 | MCFG_RES_MII; for (tout = 100000; tout; tout--); LPC_EMAC->MCFG = MCFG_CLK_DIV28; for (tout = 100000; tout; tout--);
/* Enable Reduced MII interface. */ LPC_EMAC->Command = CR_RMII | CR_PASS_RUNT_FRM; //LPC_EMAC->Command = CR_RMII | CR_PASS_RUNT_FRM | CR_PASS_RX_FILT;
/* Reset Reduced MII Logic. */ LPC_EMAC->SUPP = SUPP_RES_RMII; for (tout = 100; tout; tout--); LPC_EMAC->SUPP = 0; //PHY_ADDR = 0; DBG_PHY("\r\nDBG_PHY: Starting Scan PHY address:\r\n"); //while(1) for(PHY_ADDR = 0; PHY_ADDR<32;PHY_ADDR++) { DBG_PHY("."); /* Put the PHY in reset mode */ write_PHY (PHY_REG_BMCR, 0x8000); for (tout = 10000; tout; tout--);
/* Wait for hardware reset to end. */ for (tout = 0; tout < 0x100; tout++) { regv = read_PHY (PHY_REG_BMCR); if (!(regv & 0x8000)) { /* Reset complete */ break; } } if (tout < 0x100) break; else ; //PHY_ADDR++; //PHY_ADDR&=0x1f; } if(PHY_ADDR<31) { DBG_PHY("\r\nDBG_PHY: Found at PHY_ADDR = %d",PHY_ADDR); } else { DBG_PHY_ERR("\r\nDBG_PHY_ERR: PHY_ADDR Error"); return; }
/* Check if this is a kz8721 PHY. */ id1 = read_PHY (PHY_REG_IDR1); id2 = read_PHY (PHY_REG_IDR2); DBG_PHY("\r\nDBG_PHY: ID1-0x%04X, ID2-0x%04X",id1, id2);
if (((id1 << 16) | (id2 & 0xFFF0)) != 0x221610) { DBG_PHY_ERR("\r\nDDBG_PHY_ERR: Not a KS8721 PHY - ID1-0x%04X, ID2-0x%04X",id1, id2); return; } else { DBG_PHY("\r\nDBG_PHY: KS8721 PHY - Sucñess"); }
/* Configure the PHY device */ #if defined (_10MBIT_) /* Connect at 10MBit */ write_PHY (PHY_REG_BMCR, PHY_FULLD_10M); #elif defined (_100MBIT_) /* Connect at 100MBit */ write_PHY (PHY_REG_BMCR, PHY_FULLD_100M); #else DBG_PHY("\r\nDBG_PHY: Starting AutoNegotiation Process\r\n"); /* Use autonegotiation about the link speed. */ write_PHY (PHY_REG_BMCR, PHY_AUTO_NEG); /* Wait to complete Auto_Negotiation. */ for (tout = 0; tout < 0x30000; tout++) { regv = read_PHY (PHY_REG_BMSR); if( !(tout%3000) ) DBG_PHY("."); if (regv & 0x0020) { DBG_PHY("\r\nDBG_PHY: AutoNegotiation Sucñess tout = %d Counts",tout); /* Autonegotiation Complete. */ break; } } #endif if (tout >= 0x30000) { DBG_PHY_ERR("\r\nDBG_PHY_ERR: AutoNegotiation failed."); DBG_PHY_ERR("\r\nDBG_PHY:Possibly Cable Unplugget"); DBG_PHY_ERR("\r\nDBG_PHY:Manual Assign: Full duplex - 100 Mbit Mode"); write_PHY (PHY_REG_BMCR, PHY_FULLD_100M); //return; // auto_neg failed }
/* Check the link status. */ for (tout = 0; tout < 0x10000; tout++) { regv = read_PHY (PHY_REG_BMSR); if (regv & 0x0004) { /* Link is on. */ DBG_PHY("\r\nDBG_PHY: Link is ON"); break; } }
if (tout >= 0x10000) { DBG_PHY("\r\nDBG_PHY: Link is OFF"); }
regv = ((read_PHY (0x1f))>>2)&0x7;
/* Configure Full/Half Duplex mode. */
if ((regv==0x0005)||(regv==0x0006)) { /* Full duplex is enabled. */ LPC_EMAC->MAC2 |= MAC2_FULL_DUP; LPC_EMAC->Command |= CR_FULL_DUP; LPC_EMAC->IPGT = IPGT_FULL_DUP; DBG_PHY("\r\nDBG_PHY: Full duplex is enabled."); }
if ((regv==0x0001)||(regv==0x0002)) { /* Half duplex mode. */ LPC_EMAC->IPGT = IPGT_HALF_DUP; DBG_PHY("\r\nDBG_PHY: Half duplex is enabled."); }
if ((regv==0x0005)||(regv==0x0001)) { /* 10MBit mode. */ LPC_EMAC->SUPP = 0; DBG_PHY("\r\nDBG_PHY: 10MBit mode."); } if ((regv==0x0006)||(regv==0x0002)) { /* 100MBit mode. */ LPC_EMAC->SUPP = SUPP_SPEED; DBG_PHY("\r\nDBG_PHY: 100MBit mode."); }
#ifdef DEBUG regv = read_PHY (PHY_REG_BMCR); DBG_PHY("\r\nDBG_PHY: Register 0h - Basic Control = 0x%X",regv); regv = read_PHY (PHY_REG_BMSR); DBG_PHY("\r\nDBG_PHY: Register 1h - Basic Status = 0x%X",regv);
regv = read_PHY (PHY_REG_ANAR); DBG_PHY("\r\nDBG_PHY: Register 4h - Auto-Negotiation Advertisement = 0x%X",regv); regv = read_PHY (PHY_REG_ANLPAR); DBG_PHY("\r\nDBG_PHY: Register 5h - Auto-Negotiation Link Partner Ability = 0x%X",regv); regv = read_PHY (PHY_REG_ANER); DBG_PHY("\r\nDBG_PHY: Register 6h - Auto-Negotiation Expansion = 0x%X",regv); regv = read_PHY (PHY_REG_ANNPTR); DBG_PHY("\r\nDBG_PHY: Register 7h - Auto-Negotiation Next Page = 0x%X",regv); regv = read_PHY (PHY_REG_LPNPA); DBG_PHY("\r\nDBG_PHY: Register 8h - Link Partner Next Page Ability = 0x%X",regv); #endif { /* Using Device Serial Number For Define Last 3 MAC Address */ uint32_t p0,p1,p2,p3,s; DBG_PHY("\r\nDBG_PHY: Reading Device Serial Number:"); u32IAP_ReadSerialNumber(&p0, &p1, &p2, &p3); //óïàêóåì ñåðèéíûé íîìåð â 32 áèòà s = p0 + p1 + p2 + p3; //32 áèòà óïàêóåì â 24, ÷òîáû èñïîëüçîâàòü äëÿ ìàê àäðåñà s = s&0xFF + s>>8; DBG_PHY("\r\nDBG_PHY: Chip Serial Number = 0x%08X 0x%08X 0x%08X 0x%08X",p0,p1,p2,p3); DBG_PHY("\r\nDBG_PHY: Chip Summ Serial = 0x%08X ",s); DBG_PHY("\r\nDBG_PHY: Device Hardware Address:" ); own_hw_adr[3] = ( (s>>16) & 0xFF); own_hw_adr[4] = ( (s>>8 ) & 0xFF); own_hw_adr[5] = ( (s ) & 0xFF); DBG_PHY("\r\nDBG_PHY: %02X %02X %02X %02X %02X %02X", own_hw_adr[0], own_hw_adr[1], own_hw_adr[2], own_hw_adr[3], own_hw_adr[4], own_hw_adr[5] ); } /* Set the Ethernet MAC Address registers */ LPC_EMAC->SA0 = ((uint32_t)own_hw_adr[5] << 8) | (uint32_t)own_hw_adr[4]; LPC_EMAC->SA1 = ((uint32_t)own_hw_adr[3] << 8) | (uint32_t)own_hw_adr[2]; LPC_EMAC->SA2 = ((uint32_t)own_hw_adr[1] << 8) | (uint32_t)own_hw_adr[0];
/* Initialize Tx and Rx DMA Descriptors */ rx_descr_init (); tx_descr_init ();
/* Receive Broadcast, Multicast and Perfect Match Packets */ LPC_EMAC->RxFilterCtrl = RFC_MCAST_EN | RFC_BCAST_EN | RFC_PERFECT_EN; /* 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;
DBG_PHY("\r\nDBG_PHY: PHY Config Done\r\n" ); return; }
посылка фрейма там же CODE void send_frame (OS_FRAME *frame) { /* Send frame to EMAC ethernet controller */ uint32_t idx,len; uint32_t *sp,*dp;
idx = LPC_EMAC->TxProduceIndex; sp = (uint32_t *)&frame->data[0]; dp = (uint32_t *)Tx_Desc[idx].Packet;
/* Copy frame data to EMAC packet buffers. */ for (len = (frame->length + 3) >> 2; len; len--) { *dp++ = *sp++; } Tx_Desc[idx].Ctrl = (frame->length-1) | (TCTRL_INT | TCTRL_LAST);
/* Start frame transmission. */ if (++idx == NUM_TX_FRAG) idx = 0; LPC_EMAC->TxProduceIndex = idx; } это я чего то реально затупил. Это же привязанные к конкретному железу функции, они не могли быть в библиотеке.... у вас должен быть библиотека - драйвер от вашего мак контролера, найдите в ней подходящие функции и организуйте вызов!
|
|
|
|
Сообщений в этой теме
smk STM32F107 + RTL8201 + lwip-1.4.0 Sep 23 2013, 15:36 Golikov A. А мак контроллер на чем? Реалтек это физика, она д... Sep 23 2013, 18:32 smk Цитата(Golikov A. @ Sep 23 2013, 21:32) А... Sep 23 2013, 18:39 =F8= Цитата(smk @ Sep 23 2013, 18:36) Необходи... Sep 23 2013, 20:53 smk Как я понял связь с физикой и ее инициализация осу... Sep 24 2013, 07:46 сарматъ кварец стабильнее чем встроенный генератор Sep 24 2013, 10:04 smk Цитата(сарматъ @ Sep 24 2013, 13:04) квар... Sep 24 2013, 11:29 Golikov A. да.
физика работает на 50 МГц вроде как, делает и... Sep 24 2013, 12:31 smk Цитата(Golikov A. @ Sep 24 2013, 15:31) д... Sep 24 2013, 12:39 сарматъ 25Мгц нормальная частота для кварца что смущает то... Sep 24 2013, 13:08 smk Я рассуждал так. Если поставить кварц 8 МГц, то мо... Sep 24 2013, 13:24 bzx Цитата(smk @ Sep 24 2013, 17:24) Наскольк... Sep 30 2013, 19:07  smk Цитата(bzx @ Sep 30 2013, 22:07) Ошибаете... Oct 1 2013, 08:26 сарматъ понятно, можно поступить по разному
-настроить на... Sep 24 2013, 14:20 smk С отладкой разобрался. У меня файлик *.sfr подключ... Oct 5 2013, 05:12 Golikov A. почему если физика стандартно работает на 25, 50 и... Oct 5 2013, 11:07 smk Цитата(Golikov A. @ Oct 5 2013, 14:07) по... Oct 5 2013, 12:47 Golikov A. локальные переменные в дебаге кейла отображаются с... Oct 5 2013, 13:15 smk Вынес в глобальные. Теперь явно лучше.
Теперь бы ... Oct 5 2013, 13:21 Golikov A. ну может отладка в порт?
В регистрах там есть гд... Oct 5 2013, 17:54 smk А где примерно искать настройку обновления? Посмот... Oct 7 2013, 06:14 Golikov A. я так понимаю это больше к настройкам кейла чем к ... Oct 7 2013, 07:06 vlad_new Все там есть. В режиме дебагера появляется куча вс... Oct 7 2013, 10:42 smk Цитата(vlad_new @ Oct 7 2013, 13:42) Все ... Oct 7 2013, 16:49 smk Чтобы проверить железо хочу залить в свою платку п... Oct 13 2013, 12:44 smk Наконец-то продвинулся дальше. Закончил с железом.... Oct 17 2013, 16:27 smk У меня теперь другая проблема появилась. Опишу вкр... Oct 17 2013, 17:56 antis Цитата(smk @ Oct 17 2013, 21:56) У меня т... Oct 18 2013, 06:23 Golikov A. ну надо настроить свич, у вас он хаб, свич или мар... Oct 17 2013, 19:08 smk 3COM OfficeConnect Switch 8 на нем написано. 3С16... Oct 18 2013, 04:42 Golikov A. Цитата(smk @ Oct 18 2013, 08:42) 3COM Off... Oct 18 2013, 06:36  smk Цитата(Golikov A. @ Oct 18 2013, 09:36) т... Oct 18 2013, 06:41   antis Цитата(smk @ Oct 18 2013, 10:41) Я уже ду... Oct 18 2013, 06:59 smk Ну а если я установлю 254, то при правильной работ... Oct 18 2013, 06:31 smk Проверю. Если после нескольких отключений / подклю... Oct 18 2013, 07:44 сарматъ подскажите будьте любезны где можно найти правильн... Oct 22 2013, 06:28 smk Цитата(сарматъ @ Oct 22 2013, 09:28) подс... Oct 22 2013, 16:27 vlad_new В Keil 5. Oct 22 2013, 11:23 сарматъ спасибо, можете поделиться примерами из кейл5? Oct 22 2013, 11:25 сарматъ пока точно сказать не могу но есть предположение ч... Oct 22 2013, 16:36 vlad_new Цитата(сарматъ @ Oct 22 2013, 15:25) спас... Oct 23 2013, 15:22 smk Цитата(vlad_new @ Oct 23 2013, 18:22) Там... Oct 23 2013, 17:07  vlad_new Цитата(smk @ Oct 23 2013, 21:07) Я так по... Oct 23 2013, 18:16   сарматъ Цитата(vlad_new @ Oct 23 2013, 22:16) Это... Nov 6 2013, 10:15 сарматъ спасибо за наводку Oct 23 2013, 20:05 smk Эксперимент показал, что айпи при перезагрузках ст... Oct 27 2013, 12:01 Golikov A. сетевые настройки, забиваете фиксированный IP тот ... Oct 27 2013, 12:14 smk Тогда на первом этапе создам новое сетевое подключ... Oct 28 2013, 08:02 smk Только собрался создать новое соединение. Вдруг вы... Nov 2 2013, 05:59 vlad_new Все что вам может понадобится - открыто. На сайте ... Nov 6 2013, 21:57 сарматъ хм... возможно я чего то не нашел, но то что мне н... Nov 7 2013, 06:56 smk Прошу подсказать как мне настроить вторую сетевую ... Nov 8 2013, 12:51 smk Железо проверил, все работает. Наконец-то можно пр... Nov 9 2013, 12:26 Golikov A. самый первый тест это попихать данные в МАК контро... Nov 10 2013, 21:37 smk Пытался скачать стек от кейла но так и не увидел г... Nov 11 2013, 07:28 Golikov A. Цитата(smk @ Nov 11 2013, 11:28) Пытался ... Nov 11 2013, 12:50 сарматъ готовые стеки не использовал, начинал с приема арп... Nov 11 2013, 11:28 smk А стек кейловский где скачать и где пишут про ... Nov 11 2013, 13:05 vlad_new Не надо ничего качать. Библиотека уже у вас лежит ... Nov 11 2013, 13:53 smk Добавил библиотеку и файл Net_Config.c; подключил ... Nov 11 2013, 17:08 Golikov A. для кеил стэка еще системный таймер надо запустить... Nov 11 2013, 19:41 smk Цитата(Golikov A. @ Nov 11 2013, 21:41) в... Nov 12 2013, 08:01 Golikov A. ну вы их не увидите они в библиотеке кейла вызываю... Nov 12 2013, 10:59 smk Цитата(Golikov A. @ Nov 12 2013, 12:59) н... Nov 12 2013, 11:36 Golikov A. нет конечно...
то что в хедере есть прототипы функ... Nov 12 2013, 18:53 smk Цитата(Golikov A. @ Nov 12 2013, 20:53) н... Nov 12 2013, 19:03  ksv198 Цитата(smk @ Nov 12 2013, 23:03) Да подкл... Nov 13 2013, 10:59   DmitryM Цитата(ksv198 @ Nov 13 2013, 13:59) менят... Nov 13 2013, 14:42    ksv198 Цитата(DmitryM @ Nov 13 2013, 18:42) от 0... Nov 13 2013, 15:36 smk ksv198, благодарю! как глоток воздуха! Сде... Nov 13 2013, 12:29 smk Что удалось сделать. П.1-4 сделал полностью. Иници... Nov 13 2013, 18:56 Golikov A. #include "Net_Config.h"
? Nov 13 2013, 20:05 smk Цитата(Golikov A. @ Nov 13 2013, 22:05) #... Nov 13 2013, 20:27 Golikov A. ну тогда остается только свои функции - заглушки н... Nov 13 2013, 21:13 smk Цитата(Golikov A. @ Nov 13 2013, 23:13) н... Nov 14 2013, 08:32 Pasha_a13 Добрый день!
Прошу совета.
Вкратце опишу сут... Nov 23 2013, 12:40 psL Цитата(Pasha_a13 @ Nov 23 2013, 16:40) ка... Nov 24 2013, 18:48 smk Ну вобщем-то с текущими проблемами разобрался. Хот... Nov 24 2013, 13:49 smk С физикой все более-менее понятно. Хотелось бы уже... Nov 25 2013, 17:47 Golikov A. init_TcpNet ();
а потом в цикле вызывайте
main_Tc... Nov 25 2013, 19:29 smk Цитата(Golikov A. @ Nov 25 2013, 21:29) i... Nov 26 2013, 17:46  Golikov A. Цитата(smk @ Nov 26 2013, 21:46) Может им... Nov 26 2013, 20:26 smk Разобрался с проблемой. Скомпилировалось. Хочу спр... Nov 27 2013, 07:55 Golikov A. да, без тика жизни нет...
в ТСР стэке есть время ... Nov 27 2013, 12:17 smk Цитата(Golikov A. @ Nov 27 2013, 14:17) д... Nov 27 2013, 14:33 Golikov A. у меня как то так
функция которую вызываю в цикле ... Nov 27 2013, 16:07 smk Наконец-то вернулся к своей теме. Результаты такие... Dec 4 2013, 16:34 bzx 1. Ваш Phy чип определяется?
Цитата/* Check if thi... Dec 4 2013, 17:30  smk Цитата(bzx @ Dec 4 2013, 19:30) 1. Ваш Ph... Dec 4 2013, 17:51 Golikov A. init_ethernet() - вроде вызывать не надо, оно само... Dec 4 2013, 17:38 Golikov A. дальше уже дело техники,
все очень просто!
К... Dec 4 2013, 20:27 smk Вот такое сообщение об ошибке получилось:
Кодmain_... Dec 5 2013, 07:58 Golikov A. у меня такое написано
Код#define TCP_TYPE_SERVER ... Dec 5 2013, 18:41 smk Спасибо, что уделяетемне время!
Версия кейла ... Dec 5 2013, 19:54 Golikov A. нет такого флага в вашем кейле и вашей библиотеке,... Dec 5 2013, 20:45 smk Цитата(Golikov A. @ Dec 5 2013, 22:45)
н... Dec 22 2013, 10:24 smk С помощью терминальной программы: http://www.hw-gr... Dec 22 2013, 12:01 DmitryM Цитата(smk @ Dec 22 2013, 15:01) Есть ли ... Dec 22 2013, 12:21  smk Цитата(DmitryM @ Dec 22 2013, 14:21) PuTT... Dec 22 2013, 12:40
2 страниц
1 2 >
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|