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

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Olimex/Startetkit LPC23/4 + RMII KS8721BL, Баги в схеме :(
zltigo
сообщение Sep 24 2008, 12:04
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Во всех китах Olimex и Starterkit для чипов LPC23xx и LPC24xx ошибка в подключении PHY KS8721BL в RMII Mode. К контроллеру подключен сигнал CRS (Carrier Sense), а не RXDV(CRS_DV - Carrier Sense/Data Valid). Результат плачевен - все фреймы принимаются с якобы битой CRC. Кстати, там по хорошему надо-бы этот сигнальчик к земле подтянуть, а то со встроенной в LPC PU подтяжкой при Reset потенциально могут быть проблемы.

P.S.
Поражает пофигизм разработчиков в обработке ошибок - описанные киты давно уже в продаже, на них написано всяких разных демок-приложений вплоть до Linux, а обрабатывать ошибки sad.gif, получается не заморачивается никто особо sad.gif. Уперся в баг, потратил пару дней, просмотрел интернет вдоль и поперек - кроме одного безответного вопроса на LPC2000 форуме - тишина......


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Quasar
сообщение Sep 25 2008, 19:18
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 257
Регистрация: 2-12-06
Из: Default City
Пользователь №: 23 021



Цитата(zltigo @ Sep 24 2008, 16:04) *
Во всех китах Olimex и Starterkit для чипов LPC23xx и LPC24xx ошибка в подключении PHY KS8721BL в RMII Mode. К контроллеру подключен сигнал CRS (Carrier Sense), а не RXDV(CRS_DV - Carrier Sense/Data Valid). Результат плачевен - все фреймы принимаются с якобы битой CRC. Кстати, там по хорошему надо-бы этот сигнальчик к земле подтянуть, а то со встроенной в LPC PU подтяжкой при Reset потенциально могут быть проблемы.

P.S.
Поражает пофигизм разработчиков в обработке ошибок - описанные киты давно уже в продаже, на них написано всяких разных демок-приложений вплоть до Linux, а обрабатывать ошибки sad.gif, получается не заморачивается никто особо sad.gif. Уперся в баг, потратил пару дней, просмотрел интернет вдоль и поперек - кроме одного безответного вопроса на LPC2000 форуме - тишина......


Да.Да.Да...
Я с этим тоже столкнулся, понял что проблема аппаратная, в чем точно так и не понял...lwIP постоянно дропал часть пакетов....
Только не все фреймы, а бОльшая часть фреймов длинной более 150-200 байт...
smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 25 2008, 19:24
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Quasar @ Sep 25 2008, 21:18) *
Я с этим тоже столкнулся, понял что проблема аппаратная, в чем точно так и не понял...lwIP постоянно дропал часть пакетов....
Только не все фреймы, а бОльшая часть фреймов длинной более 150-200 байт...

"Битые" абсолютно все фреймы, а причину надо смотреть вне lwIP а в том, какой ""драйвер"" MAC прикручен - обычно халтура игнорирующая все и вся. Единственное встретившиеся исключение лицензионный NXP/NicheLite. Если дадите ссылку - посмотрю.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Quasar
сообщение Sep 25 2008, 19:59
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 257
Регистрация: 2-12-06
Из: Default City
Пользователь №: 23 021



Цитата(zltigo @ Sep 25 2008, 23:24) *
"Битые" абсолютно все фреймы, а причину надо смотреть вне lwIP а в том, какой ""драйвер"" MAC прикручен - обычно халтура игнорирующая все и вся. Единственное встретившиеся исключение лицензионный NXP/NicheLite. Если дадите ссылку - посмотрю.



Ну вот у меня эта халтура и используется smile.gif . Фрейм принимается с битым CRC и неверной длинной. На битый CRC кладётся...неверная длина передается выше...ну и отваливается на каком-нибудь TCP или при просчете CRC в ICMP...
Сейчас на своей плате поправил это дело, теперь всё OK smile.gif .
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Sep 26 2008, 14:07
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Хорошо, что в свое время я купил демоплату у Embedded артистов smile.gif.
Пытаюсь избавиться от этих KSZ8001/8721. Ни у кого не завалялось схемы включения более нового KSZ8041 c LPC или еще каким-нибудь процессором?

Сообщение отредактировал Vitaliy_ARM - Sep 26 2008, 14:11


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 26 2008, 15:08
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Vitaliy_ARM @ Sep 26 2008, 16:07) *
Ни у кого не завалялось схемы включения более нового KSZ8041 c LPC или еще каким-нибудь процессором?

Если не SMI Так совершенно обыденое MII/RMII подключение "как всегда".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Sep 27 2008, 11:15
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(zltigo @ Sep 26 2008, 19:08) *
Если не SMI Так совершенно обыденое MII/RMII подключение "как всегда".


Смущает отсутствие VDDRCV входа у микросхемы. На трансформатор в среднюю точку какое питание заводить? 3,3V или питание ядра?


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 11:58
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Vitaliy_ARM @ Sep 27 2008, 13:15) *
На трансформатор в среднюю точку какое питание заводить? 3,3V или питание ядра?

VDDA_3,3, а документацию, включая документацию на Evalboard что мешает у Micrel взять?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Sep 27 2008, 13:03
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(zltigo @ Sep 27 2008, 15:58) *
VDDA_3,3, а документацию, включая документацию на Evalboard что мешает у Micrel взять?


На EvalBord что-то не получилось. Вроде они должны были на маил прислать, но не прислали.
Или почта сбоит.

Спасибо. Этого достаточно.


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 13:08
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Vitaliy_ARM @ Sep 27 2008, 15:03) *
На EvalBord что-то не получилось.

???
http://www.micrel.com/_PDF/Ethernet/ethern...signkit/8041NL/


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
lebiga
сообщение Oct 1 2008, 07:26
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 22-06-06
Из: Киев
Пользователь №: 18 292



Цитата(zltigo @ Sep 24 2008, 15:04) *
Во всех китах Olimex и Starterkit для чипов LPC23xx и LPC24xx ошибка в подключении PHY KS8721BL в RMII Mode. К контроллеру подключен сигнал CRS (Carrier Sense), а не RXDV(CRS_DV - Carrier Sense/Data Valid). Результат плачевен - все фреймы принимаются с якобы битой CRC. Кстати, там по хорошему надо-бы этот сигнальчик к земле подтянуть, а то со встроенной в LPC PU подтяжкой при Reset потенциально могут быть проблемы.

P.S.
Поражает пофигизм разработчиков в обработке ошибок - описанные киты давно уже в продаже, на них написано всяких разных демок-приложений вплоть до Linux, а обрабатывать ошибки sad.gif, получается не заморачивается никто особо sad.gif. Уперся в баг, потратил пару дней, просмотрел интернет вдоль и поперек - кроме одного безответного вопроса на LPC2000 форуме - тишина......


Так вот где собака порылась! А я на себя грешил... Ошибки CRC в lwip стеке постоянно присутствали,
обойти удалось так - в файле ethernetif.c в функции low_lewel_input увеличил длину считываемого фрейма на 4
len = StartReadFrame()+4;
и все заработало, т.е. дочитываю контрольную сумму. Установил это через анализ пакетов передаваемых по сети и принятых в стек
Правда, не уверен - корректно ли все это... может есть еще какие-то засады?

И еще - с платами стартеркит - работает ли Ethernet с установленной частотой процессора больше 50МГц? У меня глохнет начальная инициализация PHY на процедуре сброса. Проверял на нескольких платах, с частотами ниже 50МГц все ок. Может это и проблема из-за подтяжки вышесказанного сигнала?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 1 2008, 07:36
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(lebiga @ Oct 1 2008, 09:26) *
И еще - с платами стартеркит - работает ли Ethernet с установленной частотой процессора больше 50МГц? У меня глохнет начальная инициализация PHY на процедуре сброса. Проверял на нескольких платах, с частотами ниже 50МГц все ок.

Да на 72MHz работает. Вопросы
- какая ревизия чипа с точки зрения наличия бага с ограничением скорости работы из Flash
- а какой делитель прописывается в MCFG. Надо 28 - MIIM у Micrel максимум на 2.5MHz "типично" работает. Я "автоматически"
подбираю под CPU при инициализации.
- как там у Вас всякие задержечки-прокладочки организованы?
Цитата
Может это и проблема из-за подтяжки вышесказанного сигнала?

Нет, подтяжка для того, что-бы при power on не свалился в хрен знает какой режим в котром просто глухо не достучаться до него.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
lebiga
сообщение Oct 1 2008, 07:57
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 22-06-06
Из: Киев
Пользователь №: 18 292



Цитата(zltigo @ Oct 1 2008, 10:36) *
Да на 72MHz работает. Вопроса два - какая ревизия чипа с точки зрения наличия бага с ограничением скорости работы из Flash
- а какой делитель прописывается в MCFG. Надо 28 - MIIM у Micrel максимум на 2.5MHz "типично" работает. Я "автоматически"
подбираю под CPU при инициализации.
- как там у Вас всякие задержечки-прокладочки организованы?

Нет, подтяжка для того, что-бы при power on не свалился в хрен знает какой режим в котром просто глухо не достучаться до него.

Делитель 28
задержки ставил, не помогает
это все в самом начале - подается команда сброса в микрел - и ответа нет никогда...
с mam тоже игрался, проц ревизии В
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 1 2008, 08:04
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(lebiga @ Oct 1 2008, 09:57) *
это все в самом начале - подается команда сброса в микрел - и ответа нет никогда...

Ну чего-то намудрено у Вас.
CODE

//---------------------------------------------------------------------------
// Initialize the PHY chip
// Performs the following steps:
// 1.Determines PHY address
// 2.Resets PHY
// 3.Sets PHY clock
// 4.Sets Line speed (auto-negotiation if selected)
//---------------------------------------------------------------------------
int init_phy(void)
{
bint phy_reg;

MCFG = MCFG_HCLK_DIV_28|MCFG_RESET_MII_MGMT;
vSmartDelay_ms( 2 );

#if( EMAC_CFG_RMII == 0 )
MCOMMAND &= ~CR_RMII;
#else
MCOMMAND |= CR_RMII;
#if defined __IOLPC2458_H
SUPP = SUPP_RESET_MII;
#else
SUPP = 0; // Assume and configure RMII link speed logic for 10Mbit
#endif
#endif

for( int i = 0; i < 7; i++ )
{ // Check dividers to yield MII frequency ~2.5 MHz
if( ( (configCPU_CLOCK_HZ/100000L)/mii_dividers[i][0] ) <= 25 )
{ // Index [i][0] = decimal div value, [i][1] = MCFG reg val
MCFG = mii_dividers[i][1]; // Remove reset, set proper MIIM divider
break;
}
}
vSmartDelay_ms( 10 ); // Short delay while PHY exits reset and new divider is set

for( phy_addr = 0; phy_addr < 32; phy_addr++ )
{ // Put PHY in reset mode
write_PHY( PHY_REG_BMCR, BMCR_RESET );
// Wait for hardware reset to end
for( int i = 0; i < 128; i++ )
{ vSmartDelay_ms( 1 );
if( !(read_PHY( PHY_REG_BMCR ) & BMCR_RESET) )
{ // Reset complete
goto phy_found;
}
}
}
printst( "PHY:None" );
return( 1 );

phy_found:
{
// Check if this is a valid PHY
ulong id_phy = (read_PHY( PHY_REG_IDR1 )<<16)|read_PHY( PHY_REG_IDR2 );
if( id_phy == KS8721BL_ID )
xprintf( "PHY%02u:KS8721BL ", phy_addr );
else
{ xprintf( "PHY%02u:%08X ", phy_addr, id_phy );
return( 2 );
}
}

..........





void write_PHY( bint phyreg, bint value )
{
MADR = (phy_addr<<8) | phyreg;
MWTD = value;
// Wait utill operation completed
for( int tout = 0; tout < MII_WR_TOUT; tout++ )
{
if( ( MIND & MIND_BUSY ) == 0 )
break;
}
}

bint read_PHY( bint phyreg )
{
MADR = (phy_addr<<8) | phyreg;
MCMD = MCMD_READ;

// Wait until operation completed
for( int tout = 0; tout < MII_RD_TOUT; tout++ )
{ if( (MIND & (MIND_BUSY|MIND_NOT_VALID) ) == 0 )
{ MCMD = 0;
return( MRDD );
}
}
return( 0 );
}


Сообщение отредактировал zltigo - Oct 1 2008, 10:52


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
lebiga
сообщение Oct 1 2008, 10:48
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 22-06-06
Из: Киев
Пользователь №: 18 292



Да, сам себя накрутил, где-то взял этот код... Когда стоял DM9161A - проблем небыло, поставил KS8721 -
возникла...

MCFG= MCFG_RES_MII | 0x01C0; //div 28
MCFG &= ~MCFG_RES_MII; - убрал эту строку - и заработало на 72Мгц
Go to the top of the page
 
+Quote Post

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

 


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


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