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

LPC2468 rev A и Ethernet

Собрал плату. В качестве PHY - Микрел KSZ8001BLI. Пинг работает. TFTP нет. Вылетает при приеме пакета - длина принятого пакета на единицу меньше требуемой. Другая плата (тестовая) работает на этом же коде без вопросов. Правда там стоит KSZ8001BL. Вопрос - что может быть? В чем закавыка?

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


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

Собрал плату. В качестве PHY - Микрел KSZ8001BLI. Пинг работает. TFTP нет. Вылетает при приеме пакета - длина принятого пакета на единицу меньше требуемой. Другая плата (тестовая) работает на этом же коде без вопросов. Правда там стоит KSZ8001BL. Вопрос - что может быть? В чем закавыка?

 

Я сейчас работаю над ETHERNET/IP/UDP/TFTP/MODBUS - связкой от uIP и думаю дело в дровах под ваш KSZ8001BLI МАС-контроллер. Придется покопаться там, внизу стэка. А у вас что за стэк, от кого?

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


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

Я сейчас работаю над ETHERNET/IP/UDP/TFTP/MODBUS - связкой от uIP и думаю дело в дровах под ваш KSZ8001BLI МАС-контроллер. Придется покопаться там, внизу стэка. А у вас что за стэк, от кого?

Я же написал - U-Boot. А стек там похож на uIP. Понятно что проблема либо с контроллером, либо с PHY, чем BL отличается от BLI кроме расширенного диапазона и кода? Есть еще одно предположение, что как то не так проиисходит чтение пакета в самом контроллере. Хотя я поглядел обновления - вроде ничего не изменилось...

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


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

В результате исследований. получен следующий результат. В драйвере контроллера Ethernet при приеме длина принимаемого фрамента на единицу меньше требуемой. Сами данные принимаемые вполне адекватны.

 

    
    rxStatusAddr = (u32*)(RX_STATUS_ADDR + rxConsumeIndex * 8);
    recvSize = m_nic_read(rxStatusAddr);
    if ((recvSize & RX_DESC_STATUS_LAST) == 0)
    {
      printk("emac_rx: NOT LAST fragment\n");
    }

    recvSize = (recvSize & DESC_SIZE_MASK) + 1;
    recvAddr = (u32*)(RX_DESCRIPTOR_ADDR + rxConsumeIndex * 8);

Не совсем понимаю что делать. Помогите пожалуйста разобраться...

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


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

Я сейчас столкнулся с расхождениями DP83848 C и I. На демоплате стоит C. На моей I. При том же коде при запущеном отладчике PHY не видит LINK, однако таже прошивка при прошитом контроллере работает. Без j-tag'а программу отладить практически не возможно. Уже думаю перепаять эти PHY и убедиться так это или нет. По даташитам разницы нет :(

А вы не пробовали PHY с демоплаты поставить на свою?

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

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


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

Поставил на демо плату PHY с индексом I. И все заработало нормально. Значит скорее в плате проблема

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


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

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

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

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

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

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

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

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

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

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