zltigo 2 24 сентября, 2008 Опубликовано 24 сентября, 2008 · Жалоба Во всех китах 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 форуме - тишина...... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Quasar 20 25 сентября, 2008 Опубликовано 25 сентября, 2008 · Жалоба Во всех китах 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 байт... :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 25 сентября, 2008 Опубликовано 25 сентября, 2008 · Жалоба Я с этим тоже столкнулся, понял что проблема аппаратная, в чем точно так и не понял...lwIP постоянно дропал часть пакетов.... Только не все фреймы, а бОльшая часть фреймов длинной более 150-200 байт... "Битые" абсолютно все фреймы, а причину надо смотреть вне lwIP а в том, какой ""драйвер"" MAC прикручен - обычно халтура игнорирующая все и вся. Единственное встретившиеся исключение лицензионный NXP/NicheLite. Если дадите ссылку - посмотрю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Quasar 20 25 сентября, 2008 Опубликовано 25 сентября, 2008 · Жалоба "Битые" абсолютно все фреймы, а причину надо смотреть вне lwIP а в том, какой ""драйвер"" MAC прикручен - обычно халтура игнорирующая все и вся. Единственное встретившиеся исключение лицензионный NXP/NicheLite. Если дадите ссылку - посмотрю. Ну вот у меня эта халтура и используется :) . Фрейм принимается с битым CRC и неверной длинной. На битый CRC кладётся...неверная длина передается выше...ну и отваливается на каком-нибудь TCP или при просчете CRC в ICMP... Сейчас на своей плате поправил это дело, теперь всё OK :) . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 26 сентября, 2008 Опубликовано 26 сентября, 2008 (изменено) · Жалоба Хорошо, что в свое время я купил демоплату у Embedded артистов :). Пытаюсь избавиться от этих KSZ8001/8721. Ни у кого не завалялось схемы включения более нового KSZ8041 c LPC или еще каким-нибудь процессором? Изменено 26 сентября, 2008 пользователем Vitaliy_ARM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 26 сентября, 2008 Опубликовано 26 сентября, 2008 · Жалоба Ни у кого не завалялось схемы включения более нового KSZ8041 c LPC или еще каким-нибудь процессором? Если не SMI Так совершенно обыденое MII/RMII подключение "как всегда". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 27 сентября, 2008 Опубликовано 27 сентября, 2008 · Жалоба Если не SMI Так совершенно обыденое MII/RMII подключение "как всегда". Смущает отсутствие VDDRCV входа у микросхемы. На трансформатор в среднюю точку какое питание заводить? 3,3V или питание ядра? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 27 сентября, 2008 Опубликовано 27 сентября, 2008 · Жалоба На трансформатор в среднюю точку какое питание заводить? 3,3V или питание ядра? VDDA_3,3, а документацию, включая документацию на Evalboard что мешает у Micrel взять? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 27 сентября, 2008 Опубликовано 27 сентября, 2008 · Жалоба VDDA_3,3, а документацию, включая документацию на Evalboard что мешает у Micrel взять? На EvalBord что-то не получилось. Вроде они должны были на маил прислать, но не прислали. Или почта сбоит. Спасибо. Этого достаточно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 27 сентября, 2008 Опубликовано 27 сентября, 2008 · Жалоба На EvalBord что-то не получилось. ??? http://www.micrel.com/_PDF/Ethernet/ethern...signkit/8041NL/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lebiga 0 1 октября, 2008 Опубликовано 1 октября, 2008 · Жалоба Во всех китах 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МГц все ок. Может это и проблема из-за подтяжки вышесказанного сигнала? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 1 октября, 2008 Опубликовано 1 октября, 2008 · Жалоба И еще - с платами стартеркит - работает ли Ethernet с установленной частотой процессора больше 50МГц? У меня глохнет начальная инициализация PHY на процедуре сброса. Проверял на нескольких платах, с частотами ниже 50МГц все ок. Да на 72MHz работает. Вопросы - какая ревизия чипа с точки зрения наличия бага с ограничением скорости работы из Flash - а какой делитель прописывается в MCFG. Надо 28 - MIIM у Micrel максимум на 2.5MHz "типично" работает. Я "автоматически" подбираю под CPU при инициализации. - как там у Вас всякие задержечки-прокладочки организованы? Может это и проблема из-за подтяжки вышесказанного сигнала? Нет, подтяжка для того, что-бы при power on не свалился в хрен знает какой режим в котром просто глухо не достучаться до него. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lebiga 0 1 октября, 2008 Опубликовано 1 октября, 2008 · Жалоба Да на 72MHz работает. Вопроса два - какая ревизия чипа с точки зрения наличия бага с ограничением скорости работы из Flash - а какой делитель прописывается в MCFG. Надо 28 - MIIM у Micrel максимум на 2.5MHz "типично" работает. Я "автоматически" подбираю под CPU при инициализации. - как там у Вас всякие задержечки-прокладочки организованы? Нет, подтяжка для того, что-бы при power on не свалился в хрен знает какой режим в котром просто глухо не достучаться до него. Делитель 28 задержки ставил, не помогает это все в самом начале - подается команда сброса в микрел - и ответа нет никогда... с mam тоже игрался, проц ревизии В Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 1 октября, 2008 Опубликовано 1 октября, 2008 (изменено) · Жалоба это все в самом начале - подается команда сброса в микрел - и ответа нет никогда... Ну чего-то намудрено у Вас. //--------------------------------------------------------------------------- // 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 ); } Изменено 1 октября, 2008 пользователем zltigo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lebiga 0 1 октября, 2008 Опубликовано 1 октября, 2008 · Жалоба Да, сам себя накрутил, где-то взял этот код... Когда стоял DM9161A - проблем небыло, поставил KS8721 - возникла... MCFG= MCFG_RES_MII | 0x01C0; //div 28 MCFG &= ~MCFG_RES_MII; - убрал эту строку - и заработало на 72Мгц Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться