Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Стек TCP IP для LPC2478
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Страницы: 1, 2
glonium
Доброго времени суток!
Недавно начал работать с ARM микроконтроллерами на примере LPC2478 подразобравшись с переферией общего назначения встал вопрос о использовании Ethernet. Вопрос в том, какой стек протоколов TCP IP порекомендуете выбрать. Необходимые протоколы DHCP, HTTP, ну и само сабой TCP, к тому же необходима работа в составе ОС. Выбирал между uIP lwIP и кеиловским стеком, прошу совета что лучше выбрать и где поменьше багов!
Заранее спасибо!
scifi
Если нет опыта МК+Ethernet, то лучше брать что-нибудь готовое и заведомо рабочее. Потому что, скажем, lwip или uIP в голом виде нужно ещё кропотливо и тщательно прикучивать к своей системе. Поэтому лучше, если кто-то это уже сделал. Посмотрите, может быть, на FreeRTOS и их demo.
glonium
Цитата(scifi @ Jun 28 2011, 23:33) *
Посмотрите, может быть, на FreeRTOS и их demo.

Насколько я понял что FREERTOS использует стек uIP или поправьте меня если я не прав?


Я как понял все перечисленные стеки нуждаються в серьёзной доработке?
А что скажете насчёт стека от кеила?
aaarrr
Цитата(glonium @ Jun 29 2011, 00:01) *
Я как понял все перечисленные стеки нуждаються в серьёзной доработке?

Если нужно, чтобы "просто работало", то в серьезной не нуждаются. Но написать свой драйвер для низкого уровня придется, так как поставляемое с примерами оставляет желать лучшего.
zltigo
QUOTE (glonium @ Jun 28 2011, 22:01) *
А что скажете насчёт стека от кеила?

Если Вы никогда не работали с IP стеками, то.... широко шагнули. Если еще и программировать начали вчера, то очень широко sad.gif.
Готовьтесь к серьезной работе. Все стеки идущие на халяву с примерах в общем-то обычно страдают сильным дибилизмом в части драйверов и кое-как привязанным к примеру собственно стеком. Возможности стеков тоже очень разные. Для начала не плохо знать,что хотите от стека. Если все достаточно серьезно планируется, то начните медленно и печально изучать стек да и пожалуй систему TNKernel. Там у стека ноги от FreeBSD растут. Полезно. Для изучения работы с MAC/PHY железом и написания драйвера, IP стек совсем не нужен - отложите пока в дальний ящик.

И САМОЕ ГЛАВНОЕ. На форуме есть раздел для начинающих, и Ваш вопрос задается с удручающей регулярностью - надо для начала ознакомится с форумом.
scifi
Цитата(glonium @ Jun 29 2011, 00:01) *
Я как понял все перечисленные стеки нуждаються в серьёзной доработке?

Скорее не так. Поскольку эти стеки нацелены на широчайший спектр МК, то неизбежно требуется адаптация (портирование) к каждому конкретному МК, компилятору, ОС. Так вот, портирование - это занятие не для начинающих. Поэтому и призываю найти стек, уже портированный на то, что Вам подойдёт.
Опять же, как уже было сказано, разные стеки заточены под разные применения. К примеру, автор lwip и uIP - один человек (Adam Dunkels). Почему он сделал 2 стека? Потому что lwip (исторически более ранний) поддерживает практически полный функционал TCP и способен развивать большую скорость (если есть память на буферы). А стек uIP создан для совсем маленьких МК, и он экономит память всеми возможными способами, сильно жертвуя скоростью на линках с большим пингом.
Lotor
Выбрал кейловский стек, правда мне нужны только сокеты без HTTP и прочего. Документация на сайте Кейла, можете начать с "Getting Started Building Applications with RL-ARM".
glonium
Цитата(zltigo @ Jun 29 2011, 01:40) *
Если еще и программировать начали вчера, то очень широко sad.gif.


Программировать начал увы не вчера! До этого сидел на АВР, стоит признаться что опыта в программировании ARM очень маловато!
С TCP стеком знаком в плане теории а вот на практике не приходилось поднимать!

Прошу совета в какую сторону смотреть sad.gif lwIP или uIP? что надёжнее и стабильнее?

Цитата(Lotor @ Jun 29 2011, 13:38) *
Выбрал кейловский стек, правда мне нужны только сокеты без HTTP и прочего. Документация на сайте Кейла, можете начать с "Getting Started Building Applications with RL-ARM".


И что скажите о работе Кеиловского стека?
MALLOY2
Для ARM однозначно LwIP, прекрастно совместим c FREERTOS. На STM32F107 50 мегабит TCP/IP 100% загрузка проца, STR912 тоже порядка 40-50, SAM9XE 90 мегабит, переписал расчет CRC на асм, свой драйвер на МАС заточенный сугубо на LwIP. Еще свой манагер памяти для ОС и стека. Нареканий на стек нету, хотя я не пользуюсь сокетами там вроде есть какие то грабли, но как я сказал я ими не пользуюсь.
glonium
Цитата(MALLOY2 @ Jun 29 2011, 20:10) *
Для ARM однозначно LwIP, прекрастно совместим c FREERTOS. На STM32F107 50 мегабит TCP/IP 100% загрузка проца, STR912 тоже порядка 40-50, SAM9XE 90 мегабит, переписал расчет CRC на асм, свой драйвер на МАС заточенный сугубо на LwIP. Еще свой манагер памяти для ОС и стека. Нареканий на стек нету, хотя я не пользуюсь сокетами там вроде есть какие то грабли, но как я сказал я ими не пользуюсь.


То что надо! Будем разбираться спасибо!

Только вот не сочтите за наглость ног если можно подскажите где взять живой пример под LPC2478 и Keil!
Заранее благодарен!
Lotor
Цитата(glonium @ Jun 29 2011, 17:39) *
И что скажите о работе Кеиловского стека?

Не жалуюсь. Стек интуитивно понятен и хорошо документирован. Проблемы были только при адаптации драйвера phy-микросхемы - но стека это не касается.
MALLOY2
Цитата
LPC2478 и Keil!


К сожалению с кайлом не работаю по этому я не знаю.
glonium
У меня к вам ещё вопрос пролеченный кайл оставляет в хекс файле какие нибудь метки?
aaarrr
Цитата(glonium @ Jun 29 2011, 23:02) *
У меня к вам ещё вопрос пролеченный кайл оставляет в хекс файле какие нибудь метки?

Ага, библиотеки, например, свои оставляет sm.gif Если уж захотят компетентные органы проверить лицензионность использованного при разработке ПО - проверят.
glonium
Цитата(aaarrr @ Jun 29 2011, 23:06) *
Ага, библиотеки, например, свои оставляет sm.gif Если уж захотят компетентные органы проверить лицензионность использованного при разработке ПО - проверят.


Вы простите меня за мою безграмотность но попрошу пояснить? Я просто ранее сидел на gcc!
aaarrr
Цитата(glonium @ Jun 29 2011, 23:10) *
Вы простите меня за мою безграмотность но попрошу пояснить? Я просто ранее сидел на gcc!

А что тут прояснять? По HEX-файлу не составляет труда выяснить, чем он собран. А "пролеченность" проверят на месте, если будут на то основания.
haker_fox
QUOTE (glonium @ Jun 30 2011, 01:15) *
Только вот не сочтите за наглость ног если можно подскажите где взять живой пример под LPC2478 и Keil!

Прямо в примерах Кейла и можно взять (каталоги examples и Boards). Только на Вашей плате эти примеры могут сразу не заработать, т.к. примеры могут быть под разные микросхемы PHY. Но! Настоятельно требую посмотреть вот эту тему.
glonium
Цитата(haker_fox @ Jun 30 2011, 04:40) *
Прямо в примерах Кейла и можно взять (каталоги examples и Boards). Только на Вашей плате эти примеры могут сразу не заработать, т.к. примеры могут быть под разные микросхемы PHY. Но! Настоятельно требую посмотреть вот эту тему.


К сожалению в примерах Кейла не нашёл!
Скачал сам стек lwIP но с какой стороны к нему подойти не пойму, да плюс моё плохое знание английского сказывается!

Понял что в первую очередь надо разобраться с PHY уровнем. Это отдельный вопрос! (у меня микруха ks8721BL отладочная плата sk-mlpc2478).

Меня интересует простой пример как прикрутить эту огромную кучу сырцов к проекту и как связать стек с EMAK (как организуется стыковка lwIP и PHY)!

Заранее спасибо!
toweroff
Цитата(glonium @ Jul 3 2011, 18:39) *
К сожалению в примерах Кейла не нашёл!

c:\Program Files (x86)\Keil\ARM\Boards\Keil\MCB2470\RL\TCPnet
glonium
Цитата(toweroff @ Jul 3 2011, 19:16) *
c:\Program Files (x86)\Keil\ARM\Boards\Keil\MCB2470\RL\TCPnet



Нет там ничего у меня кеил в корне не C! И даже там ничего не нашёл!

Народ!!!
Я прошу вас поделиться примером прикрутки lwIP к кеиловскому проекту!
AlexandrY
Цитата(glonium @ Jul 3 2011, 22:07) *
Нет там ничего у меня кеил в корне не C! И даже там ничего не нашёл!

Народ!!!
Я прошу вас поделиться примером прикрутки lwIP к кеиловскому проекту!


Вы не там копаете. Есть такая операционка MQX. Раздается на сайте Freescale.
Портирована на их Cortex-M4.
Там стек гораздо мощней чем все фриварные стеки и лучше документирован.
Поменять тип микроконтроллера в совокупности дешевле чем поменять ошибочно выбранный стек TCP/IP и ось.
glonium
Цитата(AlexandrY @ Jul 3 2011, 23:25) *
Вы не там копаете. Есть такая операционка MQX. Раздается на сайте Freescale.
Портирована на их Cortex-M4.
Там стек гораздо мощней чем все фриварные стеки и лучше документирован.
Поменять тип микроконтроллера в совокупности дешевле чем поменять ошибочно выбранный стек TCP/IP и ось.


Да к сожалению только приобрёл отладочную плату и как то покупать новую нехочу да и лишние траты получаются!!
Буратино
Цитата(AlexandrY @ Jul 3 2011, 23:25) *
Вы не там копаете. Есть такая операционка MQX. Раздается на сайте Freescale.
Портирована на их Cortex-M4.
Там стек гораздо мощней чем все фриварные стеки и лучше документирован.
Поменять тип микроконтроллера в совокупности дешевле чем поменять ошибочно выбранный стек TCP/IP и ось.


Был на семинаре Freescale в Киеве и практическое занятие включало в себя основы работы с TCP/IP стеком под MQX. Как то так все трудно и запутано..Нет, ну я конечно понимаю ,что это немного другой уровень, но мне лично сложно было в принципе представить себя на месте программиста, который работает с осью и стеком.
Кстати, а вот что-то фундаментальное по операционкам, (но для не очень сообразительных) посоветуйте почитать/полистать? Спасибо!
toweroff
Цитата(glonium @ Jul 3 2011, 23:07) *
Нет там ничего у меня кеил в корне не C! И даже там ничего не нашёл!

Народ!!!
Я прошу вас поделиться примером прикрутки lwIP к кеиловскому проекту!

не понял
Поиски не увенчаются успехом, если пользовать старый кейл
AlexandrY
Цитата(Буратино @ Jul 3 2011, 22:33) *
Кстати, а вот что-то фундаментальное по операционкам, (но для не очень сообразительных) посоветуйте почитать/полистать? Спасибо!


В своей библиотеке я нашел вот такую книгу: "Real-Time Concepts for Embedded Systems" by Qing Li and Carolyn Yao
Не толстая - 294 страницы.
Описывает сервисы RTOS без привязки к конкретной оси.
Перечислены и описаны все базовые сервисы развитых RTOS. Объясняет для чего нужны те или иные сервисы.
Вообще описывает концепцию программирования встраиваемых систем.
haker_fox
QUOTE (glonium @ Jul 4 2011, 04:07) *
Нет там ничего у меня кеил в корне не C! И даже там ничего не нашёл!

Странно, что 3, что 4 Кейл ставит примеры.

Попробуйте их разыскать все таки. Получите сразу готовый пример (веб-сервер, ftp-сервер...). Дальше легче будет.
Как это дело заставить работать с PHY ks8721 написано тут
Успехов!
glonium
Цитата(haker_fox @ Jul 4 2011, 06:54) *
Странно, что 3, что 4 Кейл ставит примеры.

Попробуйте их разыскать все таки. Получите сразу готовый пример (веб-сервер, ftp-сервер...). Дальше легче будет.
Как это дело заставить работать с PHY ks8721 написано тут
Успехов!


Прошу прощения!!! Нашёл!!!! Поискал повнимательнее и нашёл пример EasyWeb с какой то библиотекой tcpip, как я понял он не очень то похож на стек lwIP и что это вообще за библиотека?
glonium
кстати в EasyWeb есть большой минус она может работать только с одним портом одновременно!
glonium
Народ прошу вас поделиться примером как прикрутить стек lwIP к проекту и вообще с какой стороны к нему подходить?
haker_fox
QUOTE (glonium @ Jul 5 2011, 03:45) *
кстати в EasyWeb есть большой минус она может работать только с одним портом одновременно!

Проект EasyWEB предназначен для ознакомления. Этот проект очень прост.
Для серьезрных приложений смотрите библиотеку RL-ARM
Она позволяет работать с сетью (TCPnet), с USB, CAN, FLASH-картами... Содержит операционную систему RTX.
На сайте Кейла есть хорошая документация в виде pdf файла, а также архив со множеством примером. Найдите их и скачайте.

QUOTE (glonium @ Jul 5 2011, 04:51) *
Народ прошу вас поделиться примером как прикрутить стек lwIP к проекту и вообще с какой стороны к нему подходить?

Здесь помочь не могу. Нужно искать на форуме. Но в контесте сказанного мной выше, Вам может и не понадобиться упомянутый Вами стек.

QUOTE (glonium @ Jul 5 2011, 01:47) *
и что это вообще за библиотека?

Что-нибудь самописное или портированное с просторов интернета.
glonium
Дааа!! Оказалось намного сложнее найти пример чем я думал и я уже отчаялся!

С RL нехочу связываться из за его лицензионности!!! (да и кеил я выбрал случайно посоветовали как самый оптимальный по размеру кода и по быстродействию)

Решил сменить компилятор, желательно свободный и под который есть примеры работы со стеками и операционкой FREERTOS! Из свободных знаю только gcc (но как то почитал про него тесты связываться не особо охото так как по результатам тестов самый не оптимальный!). Слышал про какой то компилятор от NXP только вот не понял платный он или нет?

Прошу совета!
Заранее спасибо!
zltigo
QUOTE (glonium @ Jul 5 2011, 19:30) *
и под который есть примеры....

Дались Вам эти примеры sad.gif. Вы работать собрались, или примеры копипаститить? Поверьте, за работу скопированные примеры ну никак не проканают, ибо не для того они в интернет выкладываются.
QUOTE (glonium @ Jul 5 2011, 19:30) *
Слышал про какой то компилятор от NXP...

Бред. Компиляторов, которые могут называться компиляторами под ARM всего три - ARM, IAR, GCC. Они достаточно равноценны.
glonium
ARM, IAR, GCC. Они достаточно равноценны. А как же http://www.phyton.ru/pages/page44.html. Или всё это реклама???

Ну а примеры нужны для того чтобы понять как подключить стек!!! Из документации на него я ничего не понял! sad.gif
Да и это впринципе не работа а хобби больше!
zltigo
QUOTE (glonium @ Jul 5 2011, 20:11) *
А как же http://www.phyton.ru/pages/page44.html. Или всё это реклама???

Я еще не ударился головой, что-бы использовать "российские" АРМ от Миландр и "российские" компиляторы от Питона.
QUOTE
Из документации на него я ничего не понял! sad.gif

Если не поняли арифметику из учебника, то по примеру 2+2=4 тем паче ее не поймете.
glonium
Тогда посоветуйте пожалуйста что почитать потолковее?
Желательно на Русском!
haker_fox
QUOTE (zltigo @ Jul 6 2011, 01:38) *
Бред. Компиляторов, которые могут называться компиляторами под ARM всего три - ARM

Он же RVCT, если не ошибаюсь? После покупки компанией ARM.

QUOTE (glonium @ Jul 6 2011, 01:30) *
С RL нехочу связываться из за его лицензионности!!! (да и кеил я выбрал случайно посоветовали как самый оптимальный по размеру кода и по быстродействию)

Попользуйтесь, почувствуйте что к чему для начала)
QUOTE (glonium @ Jul 6 2011, 01:30) *
Решил сменить компилятор, желательно свободный и под который есть примеры работы со стеками и операционкой FREERTOS! Из свободных знаю только gcc (но как то почитал про него тесты связываться не особо охото так как по результатам тестов самый не оптимальный!).

GCC и берите. Но документации немало придется почитать. На английском.

QUOTE (glonium @ Jul 6 2011, 02:11) *
Ну а примеры нужны для того чтобы понять как подключить стек!!! Из документации на него я ничего не понял! sad.gif
Да и это впринципе не работа а хобби больше!

Для начала следует успокоиться. В примерах FreeRTOS есть сетевые приложения для LPC2368. Вы можете с них начать. Я тоже начинал. Правда с GCC возникли проблемы. Одна версия компилирует, но ничего не работает. Вторая версия вообще не компилирует. После некоторых мотаний и консультаций с уважаемым zltigo, решил воспользоваться проффесиональным продуктом. Тут еще книга Тревора по семейству LPC2300/2400 попалась. А там все под Кейл. Вот выбор компилятора и был сделан. Кстати, в этой книге есть описание "приручения" FreeRTOS. Но я уже к тому времени маленько разобрался с RTX, TCPnet (Вы можете поискать мои последние сообщения, увидите, чем занимался) и не стал никуда перескакивать.

QUOTE (glonium @ Jul 6 2011, 03:29) *
Тогда посоветуйте пожалуйста что почитать потолковее?
Желательно на Русском!

Книга Мартина Тревора должна быть на русском. Автор хороший. Найдите ее в интернете.
На счет русского. Уже неоднократно говорилось, что для работы нужен английский. И это не ни уважение, не блажь и не предубеждения по отношению к русскому языку. Так уж сложилось в свете недавних и настоящих событий, что литературы на нем современной мало. Переводной еще меньше. А все рассуждения в конференциях, в форумах и т.п. даже в России ведутся на английском, т.к. эти рассуждения международные, т.е. касаются работы, проводимой мировым сообществом (тот же GCC).
glonium
Покурив немного даташит на стек lwIP, понял, что сетевые интерфейсы в программе пользователя задаются структурой netif в виде связанного списка которые содержат в себе две базовые функции ввода и вывода и они вроде как должны вызываться стеком.
Вопрос 1 - эти две функции я и должен описать в драйвере Ethernet?

вопрос 2 - Является ли модуль api_lib.c модулем подключаемым к программе для общения со стеком?

заранее спасибо!

Да и просьба прошу вас провести быстрый ликбез в общих словах по работе со стеком lwIP (что надо сделать : инициализировать mac......)
glonium
так же понял что каким то образом надо настроить 2 таймера 200 и 500мс!
evgen2
Цитата(toweroff @ Jul 3 2011, 19:16) *
c:\Program Files (x86)\Keil\ARM\Boards\Keil\MCB2470\RL\TCPnet

(а) это появляется только в последней версии MDK 4.21
(б) .\Obj\Http_demo.axf: Error: L9937E: RL-ARM is not allowed with this license
toweroff
Цитата(evgen2 @ Jul 12 2011, 14:22) *
(а) это появляется только в последней версии MDK 4.21

ну так скачать и поставить
вот тут

Цитата(evgen2 @ Jul 12 2011, 14:22) *
(б) .\Obj\Http_demo.axf: Error: L9937E: RL-ARM is not allowed with this license

а кейген на шо? biggrin.gif
evgen2
Цитата(toweroff @ Jul 12 2011, 18:08) *
ну так скачать и поставить
вот тут


а кейген на шо? biggrin.gif


так в кейгене нужно правильную пипку нажимать.
Но это фигня по сравнению с тем, что берешь пример, например,
l\ARM\Boards\Keil\MCB1700\RL\TCPnet\Http_demo

оно собирается, заливается и не работает. И где оно не работает - хрен поймешь, может потому как в версии EasyWeb мне пришлось чуть поправить EMAC.c то ли еще почему. и EasyWeb непонятно в каком направлении ковырять с целью побороть....
{{
вот если у нас дивайс напрямую соединен с компьютером, то и пинг не пропадает, и на запросы сервер всегда отвечает.
а если воткнуть в локальную сеть, то половина пингов теряются, на половину или больше запросов сервер молчит как партизан.
и дрыганье старт-стоп в жЫтаговском отладчике в момент молчания ничего не проясняет.
}}
toweroff
Цитата(evgen2 @ Jul 12 2011, 21:17) *
так в кейгене нужно правильную пипку нажимать.
Но это фигня по сравнению с тем, что берешь пример, например,
l\ARM\Boards\Keil\MCB1700\RL\TCPnet\Http_demo

оно собирается, заливается и не работает. И где оно не работает - хрен поймешь, может потому как в версии EasyWeb мне пришлось чуть поправить EMAC.c то ли еще почему. и EasyWeb непонятно в каком направлении ковырять с целью побороть....
{{
вот если у нас дивайс напрямую соединен с компьютером, то и пинг не пропадает, и на запросы сервер всегда отвечает.
а если воткнуть в локальную сеть, то половина пингов теряются, на половину или больше запросов сервер молчит как партизан.
и дрыганье старт-стоп в жЫтаговском отладчике в момент молчания ничего не проясняет.
}}


и какие претензии к компилятору и среде разработки?

как говорит zltigo, все проблемы создали "индусы"
evgen2
Цитата(toweroff @ Jul 12 2011, 23:20) *
и какие претензии к компилятору и среде разработки?

как говорит zltigo, все проблемы создали "индусы"


гы. К ним у меня тоже есть претензии. Как оказалось при установке на стационарном компьютере установщик как-то криво то ли поставил, то ли проапгрейдил Segger и теперь я занимаюсь любимым делом - ставлю и сношу, а ставиться оно чем дальше, тем дольше
toweroff
Цитата(evgen2 @ Jul 13 2011, 00:05) *
гы. К ним у меня тоже есть претензии. Как оказалось при установке на стационарном компьютере установщик как-то криво то ли поставил, то ли проапгрейдил Segger и теперь я занимаюсь любимым делом - ставлю и сношу, а ставиться оно чем дальше, тем дольше

segger можно скачать и с сайта, скопировать dll в кейл
да и беты-альфы всегда лежат тут: http://www.segger.com/cms/beta-software-version.html
evgen2
Цитата(toweroff @ Jul 13 2011, 00:24) *
segger можно скачать и с сайта, скопировать dll в кейл
да и беты-альфы всегда лежат тут: http://www.segger.com/cms/beta-software-version.html

это я знаю, у меня их зоопарк и что-то где-то...не смог найти где.
rename KEIL KEIL_OLD
и последущая установка заново помогли. И с emac'ом оказывается разобраться можно, только похоже что отладчик очень сильно чудит в функции init_ethernet, которая вызывается где-то до main()

аааа... победил ;-)
Кейлы до сих пор не знают KS8721B, редиски

id1 = read_PHY (PHY_REG_IDR1);
id2 = read_PHY (PHY_REG_IDR2);

moduleid = ((id1 << 16) | (id2 & 0xFFF0));

if ( moduleid == DP83848C_ID ) model=1;
else if ( moduleid == KS8721B_ID ) model=2;
haker_fox
QUOTE (evgen2 @ Jul 13 2011, 06:37) *
Кейлы до сих пор не знают KS8721B, редиски

Вы читали ссылки, которые я приводил? У меня тоже KS8721 и я имел некоторое количество мучений с ней.
А вот на счет "до сих пор" Вы не правы. KS8721 - устаревший чип.
evgen2
Цитата(haker_fox @ Jul 14 2011, 05:51) *
Вы читали ссылки, которые я приводил? У меня тоже KS8721 и я имел некоторое количество мучений с ней.
А вот на счет "до сих пор" Вы не правы. KS8721 - устаревший чип.

Ссылки - это ветка "Olimex/Startetkit LPC23/4 + RMII KS8721BL, Баги в схеме :" ? Похоже читал, когда оно только началось и когда у меня были проблемы.

Допустим, KS8721 - устаревший чип, тогда всё равно редиски, потому как кроме DP83848C ничего другого не знают.
haker_fox
QUOTE (evgen2 @ Jul 16 2011, 16:33) *
Ссылки - это ветка "Olimex/Startetkit LPC23/4 + RMII KS8721BL, Баги в схеме :" ? Похоже читал, когда оно только началось и когда у меня были проблемы.

Допустим, KS8721 - устаревший чип, тогда всё равно редиски, потому как кроме DP83848C ничего другого не знают.

Ну так я там же написал, что нужно поправить в примерах Кейла, чтобы стек заработал с BS8721.
evgen2
Цитата(haker_fox @ Jul 16 2011, 16:43) *
Ну так я там же написал, что нужно поправить в примерах Кейла, чтобы стек заработал с BS8721.

кхе-кхе
как оно может работать при наличии
if (((id1 << 16) | (id2 & 0xFFF0)) == DP83848C_ID) {
- совершенно непонятно

я кажется уже где постил, не могу найти где, повторю тут

Вариант для SK-MLPC1768, для SK-MLPC-237 делается аналогично

в EMAC.h добавляем
#define KS8721B_ID 0x00221610 /* PHY Identifier ks8721b */

в EMAC.c меняем void Init_EMAC(void) на int Init_EMAC(int mode)


Код
#define MCFG_CLK_DIV20      0x00000038  /* MDC = hclk / 20  */

// configure port-pins for use with LAN-controller,
// reset it and send the configuration-sequence
//mode = 0 - slow mode, 1 - fast
int Init_EMAC(int mode)
{
// Keil: function modified to access the EMAC
// Initializes the EMAC ethernet controller
  unsigned int regv,regv1,tout,id1,id2, moduleid, model=0, twait;

  twait = 0x100000;
  if(mode)  twait = 0x10000;

   /* Power Up the EMAC controller. */
   LPC_SC->PCONP |= 0x40000000;
  /* Enable P1 Ethernet Pins. */
    LPC_PINCON->PINSEL2 = 0x50150105;

#ifdef __LPC175x
  /* LPC175x devices, use software MII management. */  
  LPC_PINCON->PINSEL4 &= ~0x000F0000;
  LPC_GPIO2->FIODIR |= MDC;
#else
  /* LPC176x devices, no MDIO, MDC remap. */
  LPC_PINCON->PINSEL3 = (LPC_PINCON->PINSEL3 & ~0x0000000F) | 0x00000005;
#endif
  /* Reset all EMAC internal modules. */
  LPC_EMAC->MAC1 = MAC1_RES_TX | MAC1_RES_MCS_TX | MAC1_RES_RX | MAC1_RES_MCS_RX | MAC1_SIM_RES | MAC1_SOFT_RES;
  LPC_EMAC->Command = CR_REG_RES | CR_TX_RES | CR_RX_RES | CR_PASS_RUNT_FRM;
  
  /* A short delay after reset. */
  for (tout = 100; tout; tout--);

  /* Initialize MAC control registers. */
  LPC_EMAC->MAC1 = MAC1_PASS_ALL;
  LPC_EMAC->MAC2 = MAC2_CRC_EN | MAC2_PAD_EN;

  LPC_EMAC->MAXF = ETH_MAX_FLEN;
  LPC_EMAC->CLRT = CLRT_DEF;
  LPC_EMAC->IPGR = IPGR_DEF;


/*PCLK=18MHz, clock select=6, MDC=18/6=3MHz */  
   /* Enable Reduced MII interface. */
   LPC_EMAC->MCFG = MCFG_CLK_DIV20 | MCFG_RES_MII;
   for (tout = 100; tout; tout--);
   LPC_EMAC->MCFG = MCFG_CLK_DIV20;

  regv = read_PHY (PHY_REG_BMSR);
  regv1= read_PHY (PHY_REG_STS);


  /* Enable Reduced MII interface. */
  LPC_EMAC->Command = CR_RMII | CR_PASS_RUNT_FRM;


  /* Put the DP83848C in reset mode */
  write_PHY (PHY_REG_BMCR, 0x8000);

  /* Wait for hardware reset to end. */
  for (tout = 0; tout < 0x100000; tout++) {
    regv = read_PHY (PHY_REG_BMCR);
    if (!(regv & 0x8000)) {
      /* Reset complete */
      break;
    }
  }

  /* Check if this is a DP83848C PHY. */
  id1 = read_PHY (PHY_REG_IDR1);
  id2 = read_PHY (PHY_REG_IDR2);

  moduleid = ((id1 << 16) | (id2 & 0xFFF0));
  if ( moduleid == DP83848C_ID ) model=1;
  else if (  moduleid == KS8721B_ID ) model=2;

/* Use autonegotiation about the link speed. */
    write_PHY (PHY_REG_BMCR, PHY_AUTO_NEG);

    /* Wait to complete Auto_Negotiation. 0x10000*/
    for (tout = 0; tout < twait; tout++) {
      regv = read_PHY (PHY_REG_BMSR);
      if (regv & 0x0020) {
        /* Autonegotiation Complete. */
        break;
      }
      if (tout > 0x100 && (LPC_EMAC->MIND & MIND_NOT_VAL))
          break;
    }

    if (regv & 0x0020)
    {
      /* Autonegotiation Complete. */
    } else {
        return 1; /* Ωαßσδⁿ φσ ∩εΣΩδ■≈σφ */
    }


  /* Check the link status. */
  for (tout = 0; tout < 0x10000; tout++)
  {
//    regv = read_PHY (PHY_REG_STS);
//    if (regv & 0x0001) {
//      /* Link is on. */
//      break;
//    }
    regv = read_PHY (PHY_REG_BMSR);
    if (regv & 0x0004) {
      /* Link is on. */
      break;
    }

  }

/*****************/
if(model == 2)
{ regv = read_PHY (PHY_REG_STS2);
   regv=(regv>>2)&7;
  if ((regv==5)||(regv==6))
  {/* Full duplex is enabled. */
    LPC_EMAC->MAC2    |= MAC2_FULL_DUP;
    LPC_EMAC->Command |= CR_FULL_DUP;
    LPC_EMAC->IPGT     = IPGT_FULL_DUP;
  }
  else {
    /* Half duplex mode. */
    LPC_EMAC->IPGT = IPGT_HALF_DUP;
  }

  /* Configure 100MBit/10MBit mode. */
   if ((regv==1)||(regv==5))
  {/* 10MBit mode. */
    LPC_EMAC->SUPP = 0;
  } else {
    /* 100MBit mode. */
    LPC_EMAC->SUPP = SUPP_SPEED;
  }
/*****************/
} else {
     regv = read_PHY (PHY_REG_STS);

  /* Configure Full/Half Duplex mode. */
  if (regv & 0x0004) {
    /* Full duplex is enabled. */
    LPC_EMAC->MAC2    |= MAC2_FULL_DUP;
    LPC_EMAC->Command |= CR_FULL_DUP;
    LPC_EMAC->IPGT     = IPGT_FULL_DUP;
  }
  else {
    /* Half duplex mode. */
    LPC_EMAC->IPGT = IPGT_HALF_DUP;
  }

  /* Configure 100MBit/10MBit mode. */
  if (regv & 0x0002) {
    /* 10MBit mode. */
    LPC_EMAC->SUPP = 0;
  }
  else {
    /* 100MBit mode. */
    LPC_EMAC->SUPP = SUPP_SPEED;
  }
} /*****************/

  /* Set the Ethernet MAC Address registers */
  LPC_EMAC->SA0 = (MYMAC_1 << 8) | MYMAC_2;
  LPC_EMAC->SA1 = (MYMAC_3 << 8) | MYMAC_4;
  LPC_EMAC->SA2 = (MYMAC_5 << 8) | MYMAC_6;

  /* Initialize Tx and Rx DMA Descriptors */
  rx_descr_init ();
  tx_descr_init ();

  /* Receive Broadcast and Perfect Match Packets */
  LPC_EMAC->RxFilterCtrl = RFC_BCAST_EN | RFC_PERFECT_EN;                    

  /* Enable EMAC interrupts. */
  LPC_EMAC->IntEnable = INT_RX_DONE | INT_TX_DONE;

  /* Reset all interrupts */
  LPC_EMAC->IntClear  = 0xFFFF;

  /* Enable receive and transmit mode of MAC Ethernet core */
  LPC_EMAC->Command  |= (CR_RX_EN | CR_TX_EN);
  LPC_EMAC->MAC1     |= MAC1_REC_EN;

  return 0;
}
haker_fox
QUOTE (evgen2 @ Jul 18 2011, 07:18) *
кхе-кхе
как оно может работать при наличии
if (((id1 << 16) | (id2 & 0xFFF0)) == DP83848C_ID) {
- совершенно непонятно

На этот вопрос ответить не могу( Я выкладывал архив с рабочими драйверами. Вы можете скачать его.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.