Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Bare metal EMAC драйвер на Cortex-A9
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
serjj
Всем доброго.
Вожусь сейчас с ARM Cortex-A9 в составе Altera Cyclone V HPS. Интересует следующее. На борту имеется EMAC Synopsys DesignWare 3504-0 Universal Ethernet MAC в числе двух штук. Разбираюсь с bare metal приложением. У Альтеры на EMAC не нашел ни одного примера по работе с ним и в библиотеки для bare metal (hwlib) тоже ничего к EMAC относящегося не нашел (при этом есть остальные интерфейсы кроме USB). При этом под линухом EMAC разумеется поднимается и в U-Boot тоже. Но ОС на него ставить пока в планы не входило. Вообще хотелось бы узнать насколько это неблагодарное занятие в bare metal поднимать Ethernet драйвер на ARM?
И возможно кто-то уже работал с этим Eth контроллером и на него можно достать готовые драйвера? (ARM же он ARM и есть) У меня пока каша в голове по поводу процессора, не программировал его раньше.

В общем хотелось бы услышать совета от спецов по ARMу rolleyes.gif

PS Раньше на простеньком Nios и самописном контроллере делал простой драйвер и надстройку в виде UDP/ARP и всё было просто, а тут такие дебри.
aaarrr
Цитата(serjj @ Feb 13 2015, 18:44) *
И возможно кто-то уже работал с этим Eth контроллером и на него можно достать готовые драйвера? (ARM же он ARM и есть)

Так ведь u-boot и Linux есть в качестве примера. Драйвер u-boot вряд ли стоит рассматривать серьёзно, но для старта и он сойдет.
mantech
Цитата(serjj @ Feb 13 2015, 18:44) *
Но ОС на него ставить пока в планы не входило. Вообще хотелось бы узнать насколько это неблагодарное занятие в bare metal поднимать Ethernet драйвер на ARM?


Сейчас вы тут огребете по самое... в смысле, что без линуха поднимать это дело глупо, тупо и безнадежно, займет годы и пр... приготовьтесь biggrin.gif
Занятие и вправду, неблагодарное, сам поднимал с нуля MX6... Впечатление мощное wacko.gif

А если серьезно, описание от АРМ - это очень мучительное чтиво, помню по контроллеру кэша L2. Думаю проше будет "выколупать" из убута, действительно.

Поищите, может есть какой либо SDK, он мне очень помог в освоении MX6.
serjj
Коллеги, спасибо что отозвались.

Цитата
в смысле, что без линуха поднимать это дело глупо, тупо и безнадежно

Тут дело такое, у меня изделие должно полностью грузиться в пределах секунды 05.gif Линукс разве так умеет? И какие есть альтернативы bare metal для очень быстрой загрузки проца?

Цитата
Так ведь u-boot и Linux есть в качестве примера. Драйвер u-boot вряд ли стоит рассматривать серьёзно, но для старта и он сойдет

Там беда в том, что их там целая куча под разные семейства-конфигурации-вендоров, при этом разной степени вменяемости (где-то init, packet_read, packet_write, а где-то тонна всякого хлама)

У меня есть вариант перенести на проц старое решение с Nios'a с самодельным контроллером, т.к. у меня Eth только для отладки нужен. Но хотелось всё таки со штатным EMAC разобраться, а то их там целых 2 и как-то странно свой ставить.

И раз про ОС речь зашла: насколько это вообще жизненная идея делать bare metal проект на ARM? Основные задачи - обработка сигналов, управление, решения, обмен с FPGA. Высокоуровневые сервисы а-ля web, snmp не нужны. Высокоскоростных интерфейсов тоже не планируется.
scifi
Цитата(serjj @ Feb 14 2015, 11:50) *
И раз про ОС речь зашла: насколько это вообще жизненная идея делать bare metal проект на ARM?

Кстати, тоже интересно. Чем "взрослый" проц отличается от МК? На МК (STM32, Coldfire V2) делал драйвер Ethernet (практически с нуля, по мануалу) и прикручивал к lwip без ОС. Чем проц хуже? Настройка кэша? Отсутствие вменяемой документации?
mantech
Цитата(scifi @ Feb 14 2015, 13:04) *
Чем проц хуже? Настройка кэша? Отсутствие вменяемой документации?


Ничем не хуже, но:

1) Отсутствие ПУТЕВОЙ документации, я не беру во внимание NDAшные камни - тут вааще весело..
2) Отсутствие примеров программ, библиотек, и тп. Бывают SDK, но очень урезанные, приходится пилить и пилить...
3) Сам камень по-себе намного сложнее (настройка стартап файла, конфигурация DCD загрузки, тактировки, кэши, MMU... в некоторых случаях требуется полная переконфигурация линкера). И самое интересное - без ПРАВИЛЬНОЙ настройки всего этого, проц либо вообще не запускается, глючит или работает как черепаха. В СТМ о таком и не догадывался.
4) почти не у кого спросить, в чем у моя проблема, т.к. все либо на линуксах, либо вообще о таких камнях только слышали отдаленно, последних больше.
5) Несколько раз приходилось копаться в линуксовых исходниках, т.к. информации просто нигде нет, ни в SDK, ни в даташите. А ковыряние в линуксе - это отдельная песня, кто в теме - тот знает.

Вообщем, как-то так...
По себе могу сказать, пока поднимал такой камень, раза 3 хотел плюнуть на него, и забросить эту плату так далеко, чтоб не вспоминать о ней, но здравый смысл был сильнее, и не давал мне покоя, пока ее не запустил 08.gif

Дорогу осилит идущий, только потребуется много терпения и сил. Удачи!!


ЗЫ. ТСу скажу, приступайте к драйверу сетевухи, только если разобрались с самим процом, настройкой портов ВВ для альтерн. функций, кэшами, MMU, прерываниями, контроллером памяти. Если есть какая-то хоть простенькая отладка(типа printf через уарт), иначе это будет мартышкин труд.
При работе с буферами и конфигурационными записями сетевухи, учитывайте, что они должны быть в некэшируемой области памяти!

Цитата(serjj @ Feb 14 2015, 11:50) *
Тут дело такое, у меня изделие должно полностью грузиться в пределах секунды Линукс разве так умеет?


У TimeSys линукса есть какая-то приблуда, которая кеширует образы закрузки на диск, а потом их загружает прямо в память и запускает. На счет секунды не знаю, но за 2-3сек загружает точно. Это на случай, если с камнем не справитесь laughing.gif
dm.pogrebnoy
Цитата(mantech @ Feb 14 2015, 14:43) *
ЗЫ. ТСу скажу, приступайте к драйверу сетевухи, только если разобрались с самим процом, настройкой портов ВВ для альтерн. функций, кэшами, MMU, прерываниями, контроллером памяти.


Я таки извиняюсь, работал с чем-то похожим, как я понимаю, а именно с Zynq от Xilinx. И что бы там написать baremetal программку для общения через Ethernet мне не приходилось все это делать. Да и вообще, работать с ним без операционной системы ни капли не сложнее чем с Microblaze (аналог Nios). Там вся периферия (ddr, клоки...) конфигурируется автоматически, на основе параметров заданных в визарде. А работа с конкретными устройствами описана в небольшой библиотеке драйверов для baremetal приложений. У альтеры разве не тоже самое?
Golikov A.
Видел кто-то хвастал линуксом который грузится за доли секунды от начала, до консоли... Ведь совершенно не обязательно поднимать все службы...

mantech
Цитата(Golikov A. @ Feb 14 2015, 17:41) *
Видел кто-то хвастал линуксом который грузится за доли секунды от начала, до консоли...


Наверно это как раз тот линукс, про который я писал выше.

Цитата(dm.pogrebnoy @ Feb 14 2015, 17:33) *
Там вся периферия (ddr, клоки...) конфигурируется автоматически, на основе параметров заданных в визарде. А работа с конкретными устройствами описана в небольшой библиотеке драйверов для baremetal приложений.


Ну тогда вам просто повезло с процом, в моем случае никаких визардов и в помине не было crying.gif
aaarrr
Цитата(serjj @ Feb 14 2015, 11:50) *
Там беда в том, что их там целая куча под разные семейства-конфигурации-вендоров, при этом разной степени вменяемости (где-то init, packet_read, packet_write, а где-то тонна всякого хлама)

Ну а в данном случае как?

Цитата(serjj @ Feb 14 2015, 11:50) *
И раз про ОС речь зашла: насколько это вообще жизненная идея делать bare metal проект на ARM? Основные задачи - обработка сигналов, управление, решения, обмен с FPGA. Высокоуровневые сервисы а-ля web, snmp не нужны. Высокоскоростных интерфейсов тоже не планируется.

Нормальная идея: ставить Linux просто из тех соображений, что железо это позволяет сделать, тоже неразумно.
serjj
Цитата
ЗЫ. ТСу скажу, приступайте к драйверу сетевухи, только если разобрались с самим процом, настройкой портов ВВ для альтерн. функций, кэшами, MMU, прерываниями, контроллером памяти. Если есть какая-то хоть простенькая отладка(типа printf через уарт), иначе это будет мартышкин труд.
При работе с буферами и конфигурационными записями сетевухи, учитывайте, что они должны быть в некэшируемой области памяти!

Ага разобрался с загрузкой, инициализацией MMU, прерываниями и подключением к FPGA, взялся за сетевуху. Есть и отладка и кастомная платка, на них и тружусь.
Цитата
Вообщем, как-то так...
По себе могу сказать, пока поднимал такой камень, раза 3 хотел плюнуть на него, и забросить эту плату так далеко, чтоб не вспоминать о ней, но здравый смысл был сильнее, и не давал мне покоя, пока ее не запустил

Тоже иногда хочется утопить ее где нибудь...
Цитата
Я таки извиняюсь, работал с чем-то похожим, как я понимаю, а именно с Zynq от Xilinx. И что бы там написать baremetal программку для общения через Ethernet мне не приходилось все это делать. Да и вообще, работать с ним без операционной системы ни капли не сложнее чем с Microblaze (аналог Nios). Там вся периферия (ddr, клоки...) конфигурируется автоматически, на основе параметров заданных в визарде. А работа с конкретными устройствами описана в небольшой библиотеке драйверов для baremetal приложений. У альтеры разве не тоже самое?

Кастомизация у альтеры слабая, приходится много своими руками делать, и документация не на все есть.
Цитата
Ну а в данном случае как?

Пока ничего путного не нашел для альтерного сока.
Цитата
Нормальная идея: ставить Linux просто из тех соображений, что железо это позволяет сделать, тоже неразумно.

Радует, а то пока про bare metal и ARM какие-то панические отзывы
mantech
Цитата(serjj @ Feb 15 2015, 00:46) *
Ага разобрался с загрузкой, инициализацией MMU, прерываниями и подключением к FPGA, взялся за сетевуху. Есть и отладка и кастомная платка, на них и тружусь.



Радует, а то пока про bare metal и ARM какие-то панические отзывы


Тогда полдела уже сделано, я в основном по-первости и буксовал, дальше все пошло более-менее нормально. Из линукса по сетевке все-таки придется кое-что выдрать, попробуйте, по началу сложно, но все решаемо. Как правило, смотрите в каталоге Arch и Drivers. Главное - не слушайте мнение "толпы", что все сложно и безнадежно cool.gif
alexen
Возможно, не совсем в тему: на TI DM365 отдельным разработчикам удалось получить запуск Linux за 0.6 с - http://www.makelinux.com/emb/fastboot/dm365 У нас получились более скромные результаты - порядка 8 с. Основное ограничение, оказывающее влияние на время запуска, - медленное чтение образа.
serjj
Цитата
Возможно, не совсем в тему: на TI DM365 отдельным разработчикам удалось получить запуск Linux за 0.6 с

Спасибо за любопытную инфу, погляжу.

Цитата
У нас получились более скромные результаты - порядка 8 с

А вы с какого носителя загружались?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.