Перейти к содержанию
    

Olimex/Startetkit LPC23/4 + RMII KS8721BL

Во всех китах 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, а обрабатывать ошибки :(, получается не заморачивается никто особо :(. Уперся в баг, потратил пару дней, просмотрел интернет вдоль и поперек - кроме одного безответного вопроса на LPC2000 форуме - тишина......

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во всех китах 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, а обрабатывать ошибки :(, получается не заморачивается никто особо :(. Уперся в баг, потратил пару дней, просмотрел интернет вдоль и поперек - кроме одного безответного вопроса на LPC2000 форуме - тишина......

 

Да.Да.Да...

Я с этим тоже столкнулся, понял что проблема аппаратная, в чем точно так и не понял...lwIP постоянно дропал часть пакетов....

Только не все фреймы, а бОльшая часть фреймов длинной более 150-200 байт...

:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я с этим тоже столкнулся, понял что проблема аппаратная, в чем точно так и не понял...lwIP постоянно дропал часть пакетов....

Только не все фреймы, а бОльшая часть фреймов длинной более 150-200 байт...

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

Ну вот у меня эта халтура и используется :) . Фрейм принимается с битым CRC и неверной длинной. На битый CRC кладётся...неверная длина передается выше...ну и отваливается на каком-нибудь TCP или при просчете CRC в ICMP...

Сейчас на своей плате поправил это дело, теперь всё OK :) .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хорошо, что в свое время я купил демоплату у Embedded артистов :).

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

Изменено пользователем Vitaliy_ARM

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ни у кого не завалялось схемы включения более нового KSZ8041 c LPC или еще каким-нибудь процессором?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Или почта сбоит.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На EvalBord что-то не получилось.

???

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во всех китах 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, а обрабатывать ошибки :(, получается не заморачивается никто особо :(. Уперся в баг, потратил пару дней, просмотрел интернет вдоль и поперек - кроме одного безответного вопроса на LPC2000 форуме - тишина......

 

Так вот где собака порылась! А я на себя грешил... Ошибки CRC в lwip стеке постоянно присутствали,

обойти удалось так - в файле ethernetif.c в функции low_lewel_input увеличил длину считываемого фрейма на 4

len = StartReadFrame()+4;

и все заработало, т.е. дочитываю контрольную сумму. Установил это через анализ пакетов передаваемых по сети и принятых в стек

Правда, не уверен - корректно ли все это... может есть еще какие-то засады?

 

И еще - с платами стартеркит - работает ли Ethernet с установленной частотой процессора больше 50МГц? У меня глохнет начальная инициализация PHY на процедуре сброса. Проверял на нескольких платах, с частотами ниже 50МГц все ок. Может это и проблема из-за подтяжки вышесказанного сигнала?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И еще - с платами стартеркит - работает ли Ethernet с установленной частотой процессора больше 50МГц? У меня глохнет начальная инициализация PHY на процедуре сброса. Проверял на нескольких платах, с частотами ниже 50МГц все ок.

Да на 72MHz работает. Вопросы

- какая ревизия чипа с точки зрения наличия бага с ограничением скорости работы из Flash

- а какой делитель прописывается в MCFG. Надо 28 - MIIM у Micrel максимум на 2.5MHz "типично" работает. Я "автоматически"

подбираю под CPU при инициализации.

- как там у Вас всякие задержечки-прокладочки организованы?

Может это и проблема из-за подтяжки вышесказанного сигнала?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да на 72MHz работает. Вопроса два - какая ревизия чипа с точки зрения наличия бага с ограничением скорости работы из Flash

- а какой делитель прописывается в MCFG. Надо 28 - MIIM у Micrel максимум на 2.5MHz "типично" работает. Я "автоматически"

подбираю под CPU при инициализации.

- как там у Вас всякие задержечки-прокладочки организованы?

 

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

Делитель 28

задержки ставил, не помогает

это все в самом начале - подается команда сброса в микрел - и ответа нет никогда...

с mam тоже игрался, проц ревизии В

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это все в самом начале - подается команда сброса в микрел - и ответа нет никогда...

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

//---------------------------------------------------------------------------
// 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

возникла...

 

MCFG= MCFG_RES_MII | 0x01C0; //div 28

MCFG &= ~MCFG_RES_MII; - убрал эту строку - и заработало на 72Мгц

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...