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

Не получается оживить Ethernet :(

Добрый день.

Имеется 2 борды SK-MLPC2478 с запаянным LPC2468 rev"В". Работаю в IAR, с драйвером от Keil версии 3.22. Изернет подымаю впервые, так что сори возможно за глупые вопросы. На плате есть баг с неправильным подключением ENET_CRS_DV, так что на одной из плат переподключил этот сигнал на RXDV.

в чем состоит проблема:

1. Не работает память Ethernet (16кб). При попытке проинициализировать структуры дескрипторов, расположенной в этой области, происходит полная чушь - поля не изменяются или изменяются произвольным образом. В ерраде написано что этот баг исправлен в первой ревизии камня.

В общем перенес буфера и структуры в основную память. Трансивер с пом. auto-negotiation определил скорость, дальше проинициализировал дескрипторы и остальные регистры Но после этого у меня срабатывают прерывания INT_RX_ERR. А через несколько секунд каким то образом изменяются указатели на буферы в дескрипторах :( Как такое может быть?

Мучаюсь вторую неделю и никаких сдвигов. Обе платы ведут себя одинаково.

Подскажите плиз в какую сторону копать, может быть кто нить сталкивался с такими же проблемами.

 

Спасибо

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


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

В комплекте должен быть собранный в hex и заточенный под плату пример web-сервера. Он работает ?

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


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

web-сервер тоже подвисал и глючил, пока винду не переустановил. После чего проблемы с Ethernet памятью исчезли и укзатели на буферы в структурах дескрипторов тоже не перетираются.

Осталась проблема с прерываниями INT_RX_ERR которые сыпят постоянно вместе с прерыванием INT_RX_DONE.

Сейчас опять пытаюсь запустить тестовый пример web-сервера.

Кто нить знает как в Кейловском дебагере значения регистров периферии смотреть, которой нет в списке?

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


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

Кто нить знает как в Кейловском дебагере значения регистров периферии смотреть, которой нет в списке?

Имеете в виду список View->Symbol Window->Peripheral SFR?

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


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

Имеете в виду список View->Symbol Window->Peripheral SFR?

 

Не совсем.

После запуска дебагера в меню Peripheral можно выбрать окно с периферийными модулями(UART,CAN,I2C...). Так вот мне нужен Ethernet, которого там нет.

View->Symbol Window->Peripheral SFR - я так понял просто список всех регистров специального назначения проца, а этом окне не выводятся текущие значения регистров.

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


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

Не совсем.

После запуска дебагера в меню Peripheral можно выбрать окно с периферийными модулями(UART,CAN,I2C...). Так вот мне нужен Ethernet, которого там нет.

View->Symbol Window->Peripheral SFR - я так понял просто список всех регистров специального назначения проца, а этом окне не выводятся текущие значения регистров.

если речь про IAR, то вся информация о регистрах для отладчика лежит в файле *.ddf. Убедитесь, что Вы выбрали в настройках отладчика правильный файл, если же сам файл с ошибками и не содержит нужной информации, его можно поправить руками (или найти в сети исправленный)

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


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

Речь идет про Keil. Есть ли в нем аналог файла *.ddf как в IAR? Как в нем создать окно с регистрами модуля которого нет в Peripheral меню отладчика?

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


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

Всем спасибо, оживил драйвер.

По ходу дела возник следующий вопрос: В структуре статуса принятых фреймов( RxStatus[RXCONSUMEINDEX].StatusInfo ) есть поле длины. Реальная длина пакета равна (Size-1), но во всех драйверах ЕМАС длина считается как (Size-3). Почему так?

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


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

По ходу дела возник следующий вопрос: В структуре статуса принятых фреймов( RxStatus[RXCONSUMEINDEX].StatusInfo ) есть поле длины. Реальная длина пакета равна (Size-1), но во всех драйверах ЕМАС длина считается как (Size-3). Почему так?

Что, никто над этим вопросом не заморачивался?

 

В StatusInfo хранится (длина полученного пакета) - 1, то есть ethernet заголовок + верхние протоколы + FCS (4 байта), вот, минусуя 3, FCS и откидывают....

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


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

Все равно не сходится длина.

преамбула ethernet и SFD откидывается и в буфере данных их нет. В StatusInfo хранится длина фрейма Size, хотя реальное значение равно (Size-3) а согласно даташиту (Size-1). Получается несоответствие в 2 байта и 4-х байтный FCS имхо здесь нипричем

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


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

Всё сходится, если не откидывать FCS, то длину пакета ищут как size + 1 (так как в StatusInfo длина хранится как -1), а что бы откинуть FCS надо три вычесть из того что в StatusInfo хранится...

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


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

Может я что-то не доганяю, но size-3 это пакет без FCS, а size+1 это полный пакет(согласно вашим словам).

Напрашивается вопрос: почему же NXP говорит что длина пакета равна size-1? :)

Глубо зацикливаться, но все же интерестно..

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


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

Может я что-то не доганяю, но size-3 это пакет без FCS, а size+1 это полный пакет(согласно вашим словам).

Напрашивается вопрос: почему же NXP говорит что длина пакета равна size-1? :)

Почему NXP считает его как size-1 - скорее всего это поле-индекс указывающий на последний принятый байт.

 

 

Ну а если вызывают сомнения длИны указанные Quasar, тогда:

Пусть N - полный размер пакета. FCS занимает 4 байта, следовательно размер пакета без FSC (N - 4).

EMAC сообщает полный размер пакета на единицу меньше, тобиш (N-1).

 

Теперь задачка для первого класса - сколько надо прибавить к тому, что сообщает EMAC (N-1), чтобы получить полный размер пакета - N, и размер пакета без FCS - (N - 4)?

 

1. Полная длина

N = (N - 1) + X

X = -(N - 1) + N (ответ X = +1)

 

 

2. Длина без FCS

(N - 4) = (N - 1) + X

X = -(N - 1) + (N - 4)? (ответ X = -3)

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


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

Спасибо всем, теперь понялно

Стормозил млин, все элементарно просто.. незнаю почему я зациклился на этом. :)

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


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

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

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

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

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

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

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

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

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

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