реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> PHY драйвер для KSZ8863
yanvasiij
сообщение Mar 28 2016, 06:08
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Доброго времени суток!

Оживляю плату, у который в качестве физики эзернета заложена KSZ8863. Если у кого есть уже написанный драйвер для этой физики под RMII, поделитесь если не жалко. Буду очень признателен!
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 28 2016, 07:09
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Нет такой штуки, как "драйвер PHY". Во многих случаях PHY работает сам по себе, ничего там в программе делать не надо. А если что-то надо делать, то это "что-то", во первых, сильно зависит от того, как устроена ваша программа, а во-вторых, составит не более 50 строк.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 28 2016, 11:32
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(yanvasiij @ Mar 28 2016, 09:08) *
Оживляю плату, у который в качестве физики эзернета заложена KSZ8863.

KSZ8863 - это свитч, поэтому вместо "драйвера" максимум нужна затычка, которая на все вопросы будет отвечать "Link up 100Mbit FDX", ибо других вариантов не предполагается.
Go to the top of the page
 
+Quote Post
yanvasiij
сообщение Mar 28 2016, 11:55
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Цитата(aaarrr @ Mar 28 2016, 16:32) *
KSZ8863 - это свитч, поэтому вместо "драйвера" максимум нужна затычка, которая на все вопросы будет отвечать "Link up 100Mbit FDX", ибо других вариантов не предполагается.


Нет у KSZ8863 помимо свитча есть еще MII/RMII для подключения к ЕМАК контроллеру. Вот у меня не получается заставить работать как раз эту часть, не могу добиться хотябы пингов. Вот и подумал спросить может уже кто оживлял.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 28 2016, 12:07
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(yanvasiij @ Mar 28 2016, 14:55) *
Нет у KSZ8863 помимо свитча есть еще MII/RMII для подключения к ЕМАК контроллеру.

Это один из портов свитча.

Цитата(yanvasiij @ Mar 28 2016, 14:55) *
Вот у меня не получается заставить работать как раз эту часть, не могу добиться хотябы пингов. Вот и подумал спросить может уже кто оживлял.

Оживлял, проблем особых не было. Уточните, что именно не работает:
- Между внешними портами связь есть?
- Прием через RMII есть? Если нет, смотрели осциллографом RXDV?
- Как организовано тактирование?
Go to the top of the page
 
+Quote Post
yanvasiij
сообщение Mar 28 2016, 13:05
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Чтобы проверить связь с микросхемой я запросил Physical Identifier. По даташиту он должен быть 0x0022 страшем и 0x1430 в младшем -> при считывании так и оказалось. Связь по RMII есть я так понимаю.

Код
    HAL_ETH_ReadPHYRegister(&heth, 0x02, &high);
    HAL_ETH_ReadPHYRegister(&heth, 0x03, &low);


Между внешними портами связь есть. Попробовал через этот свитч соедининить комьютер и роутер - все работает.

Тактирование от внешнего кварца 25 МГц.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 28 2016, 13:09
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(yanvasiij @ Mar 28 2016, 16:05) *
Чтобы проверить связь с микросхемой я запросил Physical Identifier. По даташиту он должен быть 0x0022 страшем и 0x1430 в младшем -> при считывании так и оказалось. Связь по RMII есть я так понимаю.

Возможность прочитать идентификатор подтверждает работоспособность SMI (MDC/MDIO), а не RMII.

Цитата(yanvasiij @ Mar 28 2016, 16:05) *
Тактирование от внешнего кварца 25 МГц.

Лучше приведите схему, с тактированием там есть нюансы.
Go to the top of the page
 
+Quote Post
yanvasiij
сообщение Mar 28 2016, 13:32
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Цитата(aaarrr @ Mar 28 2016, 18:09) *
Возможность прочитать идентификатор подтверждает работоспособность SMI (MDC/MDIO), а не RMII.


Лучше приведите схему, с тактированием там есть нюансы.


Выкинув из схемы лишнее получается следующее:

Прикрепленное изображение


Да, я Вас обманул - используется специальная микросхема для тактирования
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 28 2016, 13:49
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



На вид все нормально (у меня, правда, была другая конфигурация с 25МГц входом). Посмотрите, есть ли импульсы на SMRXDV3 при внешнем пинге.
Да, у Вас CRS_DV и TX_EN на RMII не перепутаны случайно?
Go to the top of the page
 
+Quote Post
yanvasiij
сообщение Mar 28 2016, 14:24
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Цитата(aaarrr @ Mar 28 2016, 18:49) *
На вид все нормально (у меня, правда, была другая конфигурация с 25МГц входом). Посмотрите, есть ли импульсы на SMRXDV3 при внешнем пинге.
Да, у Вас CRS_DV и TX_EN на RMII не перепутаны случайно?


Движение на SMRXDV3 есть, даже без пингов (возможно потому, что железка подключена к локальной сети, где много чего ходит?). CRS_DV и TX_EN не перепутаны - проверил только что. А почему вы предположили, что они перепутаны, есть какие-то ньюансы?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 28 2016, 15:02
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(yanvasiij @ Mar 28 2016, 17:24) *
Движение на SMRXDV3 есть, даже без пингов (возможно потому, что железка подключена к локальной сети, где много чего ходит?).

Да, там обычно много чего ходит broadcast'ом.

Цитата(yanvasiij @ Mar 28 2016, 17:24) *
CRS_DV и TX_EN не перепутаны - проверил только что. А почему вы предположили, что они перепутаны, есть какие-то ньюансы?

Просто именованы на схеме странно: получились группы "RXDx и TX_EN" и "TXDx CRS_DV".
Go to the top of the page
 
+Quote Post
yanvasiij
сообщение Mar 29 2016, 04:29
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Вообщем есть у меня проект под eval c KSZ8721 со стеком RL TCPnet. На eval все пингуется и работает. Начал переносить все тоже самое на KSZ8863, разница там только в микросхеме физики и схеме ее подключения (используются другие "ремапные" ноги). Переделал инициализацию EMAK по аналогии с тем, что было для KSZ8721, вот что получилось (тут с подсветкой):

CODE


void init_ethernet (void)
{
/* Включаю тактирование на порты в.в. */
...

/* Initialize the ETH ethernet controller. */
U32 regv,tout,id1,id2,conn;
/* Enable System configuration controller clock */
RCC->APB2ENR |= (1 << 14);

/* Reset Ethernet MAC */
RCC->AHB1RSTR |= 0x02000000;

SYSCFG->PMC |= (1 << 23);

RCC->AHB1RSTR &= ~0x02000000;

RCC->AHB1ENR |= 0x1E000047;

/* Configure Port A ethernet pins (PA.1, PA.2, PA.7) */
GPIOA->MODER &= ~0x0000C03C;
GPIOA->MODER |= 0x00008028; /* Pins to alternate function */
GPIOA->OTYPER &= ~0x00000086; /* Pins in push-pull mode */
GPIOA->OSPEEDR |= 0x0000C03C; /* Slew rate as 100MHz pin */
GPIOA->PUPDR &= ~0x0000C03C; /* No pull up, no pull down */

GPIOA->AFR[0] &= ~0xF0000FF0;
GPIOA->AFR[0] |= 0xB0000BB0; /* Pins to AF11 (Ethernet) */

/* Configure Port C ethernet pins (PC.1, PC.4, PC.5) */
GPIOC->MODER &= ~0x00000F0C;
GPIOC->MODER |= 0x00000A08; /* Pins to alternate function */
GPIOC->OTYPER &= ~0x00000032; /* Pins in push-pull mode */
GPIOC->OSPEEDR |= 0x00000F0C; /* Slew rate as 100MHz pin */
GPIOC->PUPDR &= ~0x00000F0C; /* No pull up, no pull down */

GPIOC->AFR[0] &= ~0x00FF00F0;
GPIOC->AFR[0] |= 0x00BB00B0; /* Pins to AF11 (Ethernet) */

/* Configure Port B ethernet pins (PB.12, PB.13) */
GPIOB->MODER &= ~0x0F000000;
GPIOB->MODER |= 0x0A000000; /* Pin to alternate function */
GPIOB->OTYPER &= ~0x00003000; /* Pin in push-pull mode */
GPIOB->OSPEEDR |= 0x0F000000; /* Slew rate as 100MHz pin */
GPIOB->PUPDR &= ~0x0F000000; /* No pull up, no pull down */

GPIOB->AFR[1] &= ~0x00FF0000;
GPIOB->AFR[1] |= 0x00BB0000; /* Pin to AF11 (Ethernet) */

/* Configure Port B ethernet pins (PB.11) */
GPIOB->MODER &= ~0x00C00000;
GPIOB->MODER |= 0x00800000; /* Pins to alternate function */
GPIOB->OTYPER &= ~0x00000800; /* Pins in push-pull mode */
GPIOB->OSPEEDR |= 0x00C00000; /* Slew rate as 100MHz pin */
GPIOB->PUPDR &= ~0x0FF00000; /* No pull up, no pull down */

GPIOB->AFR[1] &= ~0x0000F000;
GPIOB->AFR[1] |= 0x0000B000; /* Pins to AF11 (Ethernet) */

ETH->DMABMR |= DBMR_SR;
while (ETH->DMABMR & DBMR_SR);
conn = 0;

/* HCLK Clock range 100-120MHz. */
ETH->MACMIIAR = 0x00000004;

/* Put the LAN8700 in reset mode */
write_PHY (PHY_REG_BCR, 0x8000);

/* Wait for hardware reset to end. */
for (tout = 0; tout < 0x100000; tout++)
{
regv = read_PHY (PHY_REG_BCR);
if (!(regv & 0x8000)) {
/* Reset complete */
break;
}
}

/* Check if this is a KSZ8863 PHY. */
id1 = read_PHY (PHY_REG_PID1);
id2 = read_PHY (PHY_REG_PID2);
if (((id1 << 16) | (id2 & 0xFFF0)) == 0x221430)
{
/* Use autonegotiation about the link speed. */
write_PHY (PHY_REG_BCR, PHY_AUTO_NEG);
/* Wait to complete Auto_Negotiation. */
for (tout = 0; tout < 0x100000; tout++) {
regv = read_PHY (PHY_REG_BSR);
if (regv & 0x0020) {
/* Autonegotiation Complete. */
break;
}
}
}

/* Check the link status. */
for (tout = 0; tout < 0x10000; tout++)
{
regv = read_PHY (PHY_REG_BSR);
if (regv & 0x0004)
{
conn |= PHY_CON_SET_FULLD;
/* Link is on. */
break;
}
}

/* Initialize MAC configuration register */
ETH->MACCR = MCR_ROD;

/* Configure Full/Half Duplex mode. */
if (regv & 0x0004)
{
/* Full duplex is enabled. */
conn |= PHY_CON_SET_FULLD;
}
else
{
/* Half duplex mode. */
}

/* Configure 100MBit/10MBit mode. */
if (regv & 0x0002)
{
/* 10MBit mode. */
}
else
{
/* 100MBit mode. */
conn |= PHY_CON_SET_100M;
}

/* Configure Full/Half Duplex mode. */
if (conn & PHY_CON_SET_FULLD) {
/* Full duplex is enabled. */
ETH->MACCR |= MCR_DM;
}

/* Configure 100MBit/10MBit mode. */
if (conn & PHY_CON_SET_100M) {
/* 100MBit mode. */
ETH->MACCR |= MCR_FES;
}

/* MAC address filtering, accept multicast packets. */
ETH->MACFFR = MFFR_HPF | MFFR_PAM;
ETH->MACFCR = MFCR_ZQPD;

/* Set the Ethernet MAC Address registers */
ETH->MACA0HR = ((U32)own_hw_adr[5] << 8) | (U32)own_hw_adr[4];
ETH->MACA0LR = ((U32)own_hw_adr[3] << 24) | (U32)own_hw_adr[2] << 16 |
((U32)own_hw_adr[1] << 8) | (U32)own_hw_adr[0];

/* Initialize Tx and Rx DMA Descriptors */
rx_descr_init ();
tx_descr_init ();

/* Flush FIFO, start DMA Tx and Rx */
ETH->DMAOMR = DOMR_FTF | DOMR_ST | DOMR_SR;

/* Enable receiver and transmiter */
ETH->MACCR |= MCR_TE | MCR_RE;

/* Reset all interrupts */
ETH->DMASR = 0xFFFFFFFF;

/* Enable Rx and Tx interrupts. */
ETH->DMAIER = ETH_DMAIER_NISE | ETH_DMAIER_AISE | ETH_DMAIER_RBUIE | ETH_DMAIER_RIE;

}



Не могу добиться пингов. Что я упускаю?
Go to the top of the page
 
+Quote Post
Corvus
сообщение Mar 29 2016, 06:12
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 24-04-08
Из: Зеленоград
Пользователь №: 37 056



С KSZ8721 не работал. Но по своему опыту, если не стартует новый PHY, то в 95% случаев нужно проверять strapping pins.
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 29 2016, 06:46
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(yanvasiij @ Mar 29 2016, 07:29) *
Не могу добиться пингов. Что я упускаю?

Проверить правильность сигналов осциллографом. Они все на виду. Если сигналы правильные, то влезть в софт и копать там.
Go to the top of the page
 
+Quote Post
yanvasiij
сообщение Mar 29 2016, 06:51
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Цитата(aaarrr @ Mar 28 2016, 20:02) *
Да, там обычно много чего ходит broadcast'ом.


Просто именованы на схеме странно: получились группы "RXDx и TX_EN" и "TXDx CRS_DV".


Вообщем еще раз перепроверил - действительно пины перепутаны! Перепаял и все заработало - пинги есть, как свитч все прекрасно работает. Спасибо Вам огромное!
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 00:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01483 секунд с 7
ELECTRONIX ©2004-2016