Всем привет.
на плате стоит АРМ9 а именно at91sam9g20, при этом на плате имеется свитч LAN9303i двухпортовый. Задача загрузить на плату линукс, при этом линукс будет цеплять файловую систему по сети (nfs). Так вот на отладочной плате at91sam9g20-ek я это дело смог запустить и все такое... а на рабочей плате нет, u-boot не грузит по tftp и собственно вопрос каким образом научить u-boot работать с LAN9303i я так понимаю нужно что-то в виде драйвера чтоли написать или что?
Потому что я так понимаю затык именно в LAN9303i, потому что если приконектить плату, то она вешает всю сетку.
Всмысле совподает? Вы не так меня поняли...
У меня есть плата (устройство) на котором установлен проц at91sam9g20, но к нему присобачен свитч smsc LAN9303i. Так вот я не могу запустить элементарно команду tftpboot потому что сети нет. Я подумал, что нужно инициализировать этот самый свитч, если следовать совету sasamy, то вот что я сделал:
1. Скачал новый U-Boot2011.06, потому что в старом небыло даже папки bct-brettl2.
2. Попробывал скомпилить залил на плату тю-тю, каким то макаром допетрил, что нужно сменить аддрес, а именно вот это:
В файле u-boot_2011.06/include/configs/at91sam9260ek.h
Компилим при помощи вот этого скрипта:
Компилим грузим, убут работает.
Переходим к драйверу если так можно его так назвать.
Смотрим на board/bct-brettl2/smsc9303.c нууу. копируем h и c файл в папку board/atmel/at91sam9260ek
Подключаем заголовочный файл в at91sam9260ek.c:
Потом, я попытался понять содержание и смысл функций из smsc9303.с.
1. Подключаем файл пинов для нашей платы и закоментируем файл (который как я понял нужен только для другой платы)
Пины нужны как я смог понять вот тут:
Было так (старый код из board/bct-brettl2/smsc9303.c):
Почитал даташит, поменял вот так:
Правильно?
2. Также в файле есть целые таблицы, который хронят дефолтные настройки, но есть одно НО
скажем
В датошите написано, что
13.3.2.11
Port x PHY Interrupt Source Flags Register (PHY_INTERRUPT_SOURCE_x)
Index (decimal): 29 Size: 16 bits
29d = 1Dh, тогда почему 1e ??. Тогда как скажем для
{0x01, 0x11, 0x0000}, /* Port0 PHY Mode Control/Status Register */
все сходится с датошитом.
3. Потом при компиляции мы получаем такое:
Тоесть я понимаю для at91sam9260ek таких функций нет? тогда как мне переписать этот кусок кода...
4. Если же мы закоментим этот код, то все компилится, при заливке на плату, мы доходим только до
и происходит выход, тоесть мы не прочитали регистр и все приплыли :(
U-boot дальше работает, но сети нет, ну по идее правильно мы же непроинициализировали свитч
Чет я запутался.
Не подскажите, каким образом можно прочитать и записать регистры в smsc Lan9303i в U-boot. Вот скажем регистр:
Я читаю так:
Но выдает одни нули :(
Потом регистр 32 битный а читаем мы только 16 бит, как быть?
Или я вообще не так читаю все это дело?
И еще все функции работы с mii требуют devname и addr, имя я так понимаю macb0, а адрес? это адрес чего PHY порта типа 0,1,2 ?
а переменные окружения в юбуте для сети прописаны?
что выдает printenv?
посмотрите в конфиге платы (которая поддерживает ваш чип) все что касается сети и инита чипа..
в целом, цепочка непростая:
сначала надо проинтить пины для поддержки сетки
потом разрешить работу модуля сети в АРМе
потом разрешить тактирование
потом прописать в конфиге своей платы правильные настройки для сети и переменные окружения для Uboot
все это обильно сдобрить диагностическими printf и поэтапно проверять выполнение..
MAC-адрес не забыть и тыпы..
зы я сам сетку не поднимал в юбуте, так что только теоретизирую..
да там все путем, я же на такой плате (отладочной) проверял. я эти параметры еще в файле at91sam9g20ek задаю вот так:
На отладочной плате at91sam9g20-ek, U-boot грузится и сразу определяет Ethernet из-за чего можно грузить ядро и ФС по сети.
Тогда как если взять процессор at91sam9g20 и добавить свитч Lan9303 (ну плюс кварц и все такое тобишь конечное устройство) то когда заливаем U-boot то сеть он определил как macb0, но ничего не грузится, пишет что
Типа превышен лимит и все :(.
Что касается самого лан9303, я изночально думал, что его нужно мол инициализировать, но почитав датошит на него и посмотрев на плату получается, мы при резете его конфигурируем на нужный нам режим посредствам подтягивующих резисторов. (может этого не достаточно?) и нужно инициализировать дополнительно записав в его регистры. Но если так, то каким макаром мне в его регистры записать? скажем есть функция macb_mdio_read
по адресу 50 лежит ID свитча тобишь статус должен быть равен 9303, но если использовать эту функцию то мы просто зависаме на ней и все.
Если посмотреть на функцию то получается что висим вот в этом куске кода:
Получается, мы в U-boot не подняли интерфейс MII почему MDIO не работает. скажем просто читать регистры из U-boot-a я научился скажем читаем регистр
ну например:
Может я не правильно использую функцию macb_mdio_read или что?.
Просто получается если мы не можем прочитать ID свитча, то получается мы не можем до него достучатся...
В конфиг файле (/u-boot_2011.06/include/configs/at91sam9260ek.h)
Пробывал закоментировать вот это:
И так и эдок ничего не изменяется (касательно сети) ее как бы нет и все :(
уже какой день сижу и не могу понять как подружить Lan9303 и at91sam9g20 посредстовм U-boot.