реклама на сайте
подробности

 
 
> STM32F107 + RTL8201 + lwip-1.4.0, драйвер PHY для lwip
smk
сообщение Sep 23 2013, 15:36
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Необходимо подружить RTL8201 и lwip. Как это делается и каков драйвер для phy мне нужно будет написать? Каким образом lwip общается с железом? Я так понимаю, что драйвер предполагает работу с МАС-уровнем, я прав? Т.к. область для меня новая, то пригодится любая подсказкаю Прошу помощи и советов. Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
12 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 99)
Golikov A.
сообщение Sep 23 2013, 18:32
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



А мак контроллер на чем? Реалтек это физика, она должна быть по MII -RMII быть связана с железом мак, а вот на выходе этого мак контроллера уже стоит LwIP, у него есть модуль настройки физики по средствам коммуникационной линии MII, и точка чтения - записи данных в мак контроллер.

В настройках физики обычно поиск ее адреса, и установка режима автонегатинации (или как там ее), но вы можете написать любой сложности свой драйвер...

как то так
Go to the top of the page
 
+Quote Post
smk
сообщение Sep 23 2013, 18:39
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Sep 23 2013, 21:32) *
А мак контроллер на чем? Реалтек это физика, она должна быть по MII -RMII быть связана с железом мак, а вот на выходе этого мак контроллера уже стоит LwIP, у него есть модуль настройки физики по средствам коммуникационной линии MII, и точка чтения - записи данных в мак контроллер.

В настройках физики обычно поиск ее адреса, и установка режима автонегатинации (или как там ее), но вы можете написать любой сложности свой драйвер...

как то так


MAC на STM32F107. Меня сейчас интересует как привязать lwip к МАСу. MII режим. Нужно разобраться как инициализировать МАС-модуль и что с ним делать дальше, как он будет взаимодействовать со стеком.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
=F8=
сообщение Sep 23 2013, 20:53
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата(smk @ Sep 23 2013, 18:36) *
Необходимо подружить RTL8201 и lwip. Как это делается и каков драйвер для phy мне нужно будет написать? Каким образом lwip общается с железом? Я так понимаю, что драйвер предполагает работу с МАС-уровнем, я прав? Т.к. область для меня новая, то пригодится любая подсказкаю Прошу помощи и советов. Спасибо.

Как такового драйвера для phy нет. Просто там-же где выполняете инициализацию ehternet контроллера инициализируете и регистры phy. LwIP общается с железом через указатели на функции низкоуровневого ввода-вывода в структуре netif. Смотрите файл stm32x_ethernet.c http://bit.ly/stf12_freertos_commons . А вот тут весь проект http://developers.stf12.net/just-another-eclipse-demo-str91x там не только str91 есть и порт для stm)
Go to the top of the page
 
+Quote Post
smk
сообщение Sep 24 2013, 07:46
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Как я понял связь с физикой и ее инициализация осуществляются по Station management interface: SMI?

Собственно еще такой вопрос. На плате от ТЕРРАЭЛЕКТРОНИКА как контроллер так и физика тактируются каждый своим кварцем на 25 МГц. Про физику понятно, а собственно а почему контроллер такм кварцем? У него же родной 8 МГц + PLL.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Sep 24 2013, 10:04
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



кварец стабильнее чем встроенный генератор
Go to the top of the page
 
+Quote Post
smk
сообщение Sep 24 2013, 11:29
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(сарматъ @ Sep 24 2013, 13:04) *
кварец стабильнее чем встроенный генератор

Я больше про частоту кварца... тактирование ЕТН какое-то особенное?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 24 2013, 12:31
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



да.

физика работает на 50 МГц вроде как, делает их из 25, а для общения по MMI-RMII, там какие то требования на частоты обмена должны быть. Я сейчас смутно помню, но вроде бы по частотам несущих сигналов определяется чуть ли не вид интерфейса и скорость его работы... ведь есть 10-100 -1000 мбит езернет,
Go to the top of the page
 
+Quote Post
smk
сообщение Sep 24 2013, 12:39
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Sep 24 2013, 15:31) *
да.

физика работает на 50 МГц вроде как, делает их из 25, а для общения по MMI-RMII, там какие то требования на частоты обмена должны быть. Я сейчас смутно помню, но вроде бы по частотам несущих сигналов определяется чуть ли не вид интерфейса и скорость его работы... ведь есть 10-100 -1000 мбит езернет,


Прошу уточнения. Физика тактируется 25 МГц - понятно. Режим МII. А со стороны STM32 в части тактирования его МАК-уровня (модуль ЕТН) есть какие-то особенности? Он же работает только с физикой, которая сама себя тактирует.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Sep 24 2013, 13:08
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



25Мгц нормальная частота для кварца что смущает то, если есть желание можно на 8 перепаять на скорость влиять не должно, просто разработчик поставил 25 морочиться об этом не стоит

а про требования между физикой и контроллером еще и отдельная синхролиния есть по крайней мере для RMII

Сообщение отредактировал сарматъ - Sep 24 2013, 13:10
Go to the top of the page
 
+Quote Post
smk
сообщение Sep 24 2013, 13:24
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Я рассуждал так. Если поставить кварц 8 МГц, то можно настроить тактовую ядра на 72 МГц, что есть разрешенный максимум. Если ставить 25 МГц, то максимум можно и не настроить. Отсюда возник вопрос, а что за нужда заставила ставить 25 МГц? Насколько я помню, stm32 может не работать с кварцами выше 24 МГц, но могу ошибаться.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Sep 24 2013, 14:20
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



понятно, можно поступить по разному

-настроить на 75мгц и посмотреть как будет работать
-перепаять желаемый кварц
Go to the top of the page
 
+Quote Post
bzx
сообщение Sep 30 2013, 19:07
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528



Цитата(smk @ Sep 24 2013, 17:24) *
Насколько я помню, stm32 может не работать с кварцами выше 24 МГц, но могу ошибаться.

Ошибаетесь. Микроконтроллеры F107 работают с резонаторами 3-25МГц. На осцилляторе 25МГц можно получить тактовую 72МГц


--------------------
Для связи email: info собака qbit.su
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 1 2013, 08:26
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(bzx @ Sep 30 2013, 22:07) *
Ошибаетесь. Микроконтроллеры F107 работают с резонаторами 3-25МГц. На осцилляторе 25МГц можно получить тактовую 72МГц

Спасибо за уточнение. Но если принципиальной разницы нет, то предпочту проверенный 8 МГц.

Кстати попутно хотел бы выяснить кто как отлаживается на F107 по JTAG? В кейле не увидел ни периферии ни каких других окошков. Хоть бы значения регистров периферии как-то смотреть, а то не ясно прописались настройки или нет и т.п.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 5 2013, 05:12
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



С отладкой разобрался. У меня файлик *.sfr подключен небыл.

Всетаки хотелось бы прояснить вопрос. Кеил при подключении стартапа к новому проекту устанавливает кварц равным 25 МГц. С чего бы это и есть ли в этом какой-то особый смысл? Не то чтобы это проблема, но хотелось бы понимать зачем это. Судя по картинке, то для МАС это не принципиально. Это так?

В даташите есть такое упоминание (в переводе):
Цитата
Один 25 МГц кристалл может часами всю систему и все периферийные устройства, включая Ethernet и USB OTG FS периферийных устройств. Для достижения высокого качества звука, аудио кристалл может быть использован. В этом случае часы I2S мастер может генерировать все стандартные частоты дискретизации от 8 кГц до 96 кГц с менее чем 0,5% точностью.Для получения дополнительной информации о часах конфигурации для приложений, требующих Ethernet, USB OTG FS и / или I2S (аудио), пожалуйста, обратитесь к разделу "Приложение Applicative блок-схемы" в вашем устройстве подключения Datasheet линии.

Вот собственно Ethernet и USB нужны. Кварцем 8 МГц неужели не затактировать?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 5 2013, 11:07
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



почему если физика стандартно работает на 25, 50 и 125 МГц вы думаете что лучше ставить кварц 8 Мгцsm.gif? Из кратного то тянуть лучше, ИМХО...
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 5 2013, 12:47
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Oct 5 2013, 14:07) *
почему если физика стандартно работает на 25, 50 и 125 МГц вы думаете что лучше ставить кварц 8 Мгцsm.gif? Из кратного то тянуть лучше, ИМХО...

Это если физику от МСО тактировать. Тогда конечно есть железный смысл.

У меня другая проблема. Создал пустой проект на Кеил. Выбрать опцию присоединения стартапа. Кварц использовал 25 МГц чтоб чужой проект можно было загрузить и проверить железо. В кейле такой по умолчанию. После пошагового прохода получились настройки как на картинке. Как-то они не вяжутся с таблицей, предлагаемой СТ. По неопытности пеока трудно сразу сообразить как что затактировалось. Может кто подскажет правильно ли там получилось и как затактировался ЮСБ?

И еще момент. Если я прохожу автоматом до main, то ничего не отображается в окошке с RCC. Как было при входе в дебаг так и остается. Собственно вопрос: так и должно быть?

Прикрепленное изображение


Прикрепленное изображение


и еще непонятно. Создал переменную а. она не отображается в окне просмотра.
Код
int main (void)
{
unsigned int a;

    while (1)
        {
            __nop();
            __nop();            
            __nop();            
            __nop();    
            a++;
        }

}


Есть подозрение что с jtag что-то не то
Прикрепленное изображение


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 5 2013, 13:15
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



локальные переменные в дебаге кейла отображаются с огромными ограничениями... обычно отображаются не верно
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 5 2013, 13:21
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Вынес в глобальные. Теперь явно лучше.

Теперь бы с регистрами также. А то какая отладка если не показывает как надо. А если программа в 1000 шагов, то вручную шагать?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 5 2013, 17:54
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну может отладка в порт?

В регистрах там есть где то настройка частоты обновления или как то так, надо автоапдейт поставить чтобы все видно было, а то только в момент остановки или протыкивания что ли они меняться будут

Go to the top of the page
 
+Quote Post
smk
сообщение Oct 7 2013, 06:14
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



А где примерно искать настройку обновления? Посмотрел, но ничего похожего не заметил. Вот со 103 или 207 этих проблем небыло. Как-то изначально все было хорошо. А тут и файл вручную подключал да и толку если посмотреть все не получается как надо. В порт конечно можно, но слать все регистры конфигурации периферии, а потом как-то их просматривать совсем не удобно.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 7 2013, 07:06
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



я так понимаю это больше к настройкам кейла чем к семейству проца. У меня сейчас к сожалению нет кейла под рукой поглядеть где оно там. Попробуйте очевидные вещи типа тыкнуть правой клавишей в окно регистров, в регистры. Кто на нем плотно сидит я думаю быстрее ответят.
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Oct 7 2013, 10:42
Сообщение #23


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Все там есть. В режиме дебагера появляется куча всякой всячены.
View->Periodic Windows Update Включает динамическое обновление переменных и не только. Локальные переменные выводятся в окне Coll Steck Window. Вся переферия выводится Peripherais и т.д.
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 7 2013, 16:49
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(vlad_new @ Oct 7 2013, 13:42) *
Все там есть. В режиме дебагера появляется куча всякой всячены.
View->Periodic Windows Update Включает динамическое обновление переменных и не только. Локальные переменные выводятся в окне Coll Steck Window. Вся переферия выводится Peripherais и т.д.

View->Periodic Windows Update галка стоит. Coll Steck Window обновляется. Peripherais довольно скудное меню. Вот как мне "на лету" посмотреть скажем RCC-CFGR ?

Интересу ради зарядил таймер7. Считает, регистры отображаются исправно. Почему же вот тот кусок, что в стартапе не отображается? Даже когда контроллер стоит на входе в main или когда уже работает? Должна же быть возможность увидеть их текущее значение.



--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 13 2013, 12:44
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Чтобы проверить железо хочу залить в свою платку пример от Терраэлектроникс. Поставил ИАР 6.60. Проект открывает и компилирует. Но как тоько дело доходит до программатора - вываливается с сообщением про клон. Сеггер делает тоже самое. Под кейлом все нормально. Собственно вопрос можно ли полечить сеггер или как лучше поступить?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 17 2013, 16:27
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Наконец-то продвинулся дальше. Закончил с железом. По сути там тоько МК STM32F107RCT6 и физика RTL8201CP. По скольку иар моего житага шарахается, то шью пока по усарту. Собственно иар понадобился из-за примера от Терраэлектрноники. Пример зашил, но накакого эффекта. Даже линк не светится. Линк должен светиться при подключении кабеля всегда или только после настройки физики? Если замкнуть RX+ на TX+ то линк светится.

Извиняюсь за нетерпение, зря тоько отвлек. С линком разобрался. Дело было в кабеле. Заменил коннектор и все получилось.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 17 2013, 17:56
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



У меня теперь другая проблема появилась. Опишу вкратце конфигурацию сети. Ранее компьютер был напрямую подключен к интернету. Я установил свич (долго валялся, теперь пригодился). В один разъем свича воткнул интернет, а в другой компьютер. Интернет работает, что радует. В третий разъем я присоединил свою макетку. Однако увидеть в сети и тем более открыть сайтик, что должна показывать, я не смог. Пробовал смотреть IP своего компьютера, маску подсети. Перепрошил платку, предварительно откомпилировав с новым IP и маской подсети. Девайсу установил IP с 255 в конце. Девайс не вижу. Что можно предпринять чтоб не ставить еще одну сетевую карту?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 17 2013, 19:08
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну надо настроить свич, у вас он хаб, свич или маршрутиризатор? У вас в сети кто айпишники выдал? У вас все айпишники из одной подсети? У вас у всех указан верный шлюз?
плата пингуется? попробуйте трасернуть пакеты.

самое простое начать все таки с хаба, чтоб наверняка.

Go to the top of the page
 
+Quote Post
smk
сообщение Oct 18 2013, 04:42
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



3COM OfficeConnect Switch 8 на нем написано. 3С16794 возможно модель. Айпишники как я понимаю автомотически т.к. DHCP. Маску подсети менял на плате, как и шлюз как и айпи платы. Правда есть вероятность, что айпи платы уже был кем-то занят. Домашний интернет однако.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
antis
сообщение Oct 18 2013, 06:23
Сообщение #30


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 11-01-09
Пользователь №: 43 172



Цитата(smk @ Oct 17 2013, 21:56) *
У меня теперь другая проблема появилась. Опишу вкратце конфигурацию сети. Ранее компьютер был напрямую подключен к интернету. Я установил свич (долго валялся, теперь пригодился). В один разъем свича воткнул интернет, а в другой компьютер. Интернет работает, что радует. В третий разъем я присоединил свою макетку. Однако увидеть в сети и тем более открыть сайтик, что должна показывать, я не смог. Пробовал смотреть IP своего компьютера, маску подсети. Перепрошил платку, предварительно откомпилировав с новым IP и маской подсети. Девайсу установил IP с 255 в конце. Девайс не вижу. Что можно предпринять чтоб не ставить еще одну сетевую карту?

Девайсу установил IP с 255 в конце.
255 в IP адресе зарезервировано


Go to the top of the page
 
+Quote Post
smk
сообщение Oct 18 2013, 06:31
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Ну а если я установлю 254, то при правильной работе платы пинговаться должна, если адрес не занят? Меня сама сеть смущает. Я же не знаю как и что у провайдера, какие адреса заняты.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 18 2013, 06:36
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(smk @ Oct 18 2013, 08:42) *
3COM OfficeConnect Switch 8 на нем написано. 3С16794 возможно модель. Айпишники как я понимаю автомотически т.к. DHCP. Маску подсети менял на плате, как и шлюз как и айпи платы. Правда есть вероятность, что айпи платы уже был кем-то занят. Домашний интернет однако.


тогда хорошо бы чтобы и устройство по ДХЦП все свое получило.
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 18 2013, 06:41
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Oct 18 2013, 09:36) *
тогда хорошо бы чтобы и устройство по ДХЦП все свое получило.

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

Пробежался по проекту от Терры. По видимому DHCP там не поддерживается. Во всяком случае упоминания не нашел.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
antis
сообщение Oct 18 2013, 06:59
Сообщение #34


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 11-01-09
Пользователь №: 43 172



Цитата(smk @ Oct 18 2013, 10:41) *
Я уже думал об этом, но во первых не так уж я и подкован в этих вопросах, потому и взялся разбираться чтоб подучить это дело. Во вторых нужно выяснить точку зрения провайдера. Не факт, что мне можно более одной машины в той сети держать.

Пробежался по проекту от Терры. По видимому DHCP там не поддерживается. Во всяком случае упоминания не нашел.


Я кто не дает добавить еще одну сеть (192.168.x.x или 10.x.x.x), которая точно не пересечется с сетью провайдера.
На компьютере убрать автоматическое получение адреса через DHCP, прописать IP адрес из сети провайдера руками
и добавить 2 IP адрес для сетевой картыт из сети 192.168.x.x.
А на железке прописать статический адрес из второй сети

Сообщение отредактировал antis - Oct 18 2013, 07:00
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 18 2013, 07:44
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Проверю. Если после нескольких отключений / подключений айпи не поменяется, то может имеет смысл.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Oct 22 2013, 06:28
Сообщение #36


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



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

как лучше делать обработку поллингом или прерываниями?
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Oct 22 2013, 11:23
Сообщение #37


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



В Keil 5.
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Oct 22 2013, 11:25
Сообщение #38


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



спасибо, можете поделиться примерами из кейл5?
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 22 2013, 16:27
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(сарматъ @ Oct 22 2013, 09:28) *
подскажите будьте любезны где можно найти правильный пример обработки приема\передачи пакетов, у меня начинает глючить после приема примерно миллиарда пакетов

как лучше делать обработку поллингом или прерываниями?

А как глючит и откуда уверенность, что дело в числе пакетов?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Oct 22 2013, 16:36
Сообщение #40


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



пока точно сказать не могу но есть предположение что криво обрабатываю прерывание, а количество - по времени работы до зависания и частоте запросов
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Oct 23 2013, 15:22
Сообщение #41


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Цитата(сарматъ @ Oct 22 2013, 15:25) *
спасибо, можете поделиться примерами из кейл5?

Там визарт встроенный. А примеры поставляются вместе с кейлом. Там их куча.
http://www.keil.com/pack/doc/mw/Network/ht...create_app.html
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 23 2013, 17:07
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(vlad_new @ Oct 23 2013, 18:22) *
Там визарт встроенный. А примеры поставляются вместе с кейлом. Там их куча.
http://www.keil.com/pack/doc/mw/Network/ht...create_app.html

Я так понимаю, что этот визард появился в 5 кейле, а ранее его небыло?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Oct 23 2013, 18:16
Сообщение #43


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Цитата(smk @ Oct 23 2013, 21:07) *
Я так понимаю, что этот визард появился в 5 кейле, а ранее его небыло?

Этот только в 5 появился. Хотя это только визард создания проэкта. Внутри проэкта всеравно появятся другие визады по настройке RTOS, Ethernet, ETH-PHY, протоколов и т.д.
Правда теперь кейловцы предлогают вариант не только со своей библиотекой, но и с lwip, хотя в примерах он у них и раньше был.
Лично я не пробывал 5 версию, пока все неплохо работает и с 4.72. Ниже лучше не ставить, поскольку там пару тройку не фатальных ошибок еще не исправлены.
Удачи.
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Oct 23 2013, 20:05
Сообщение #44


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



спасибо за наводку
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 27 2013, 12:01
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Эксперимент показал, что айпи при перезагрузках стоит колом один и тотже. Как и что настроить чтоб можно было попинговать железо?

Теперь самое интересное. К проекту в кейл прикрутил драйвера ETH от ST. Настроил пины. Про вопрос относительно настройки физики в курсе. Можно ли с этим набором попробовать что-то передать или принять? Как мне теперь прикрутить lwip? Собственно хочу понять методологию взаимодействия этих программных модулей. Для начала хотябы простенькую задачку сделать. Поскольку буферизация 1500 байт, то вот массив такого размера передавать / принять как можно? Книги для прочтения есть, но на примерах яснее. Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 27 2013, 12:14
Сообщение #46


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



сетевые настройки, забиваете фиксированный IP тот что у вас, маску подсети что определилась, шлюз и все такое...
в сетевом устройстве все тоже самое, только айпи сдвигаете, ну типа у компьютера 192.168.1.10, а плате дайте 192.168.1.20
например. Пинганите для теста без платы, чтобы убедиться что кроме нее нет случайно такого же узла. Потом пингуйте плату.

Только учтите что ответ на пинг так же часть стэка, и без стэка пинга не будет.

у LwIP есть процедура начальной инициализации, в зависимости от режим с операционкой или без нее.

Дальше надо постоянно вызывать функции обработки ТРС сообщений. Которые внутри себя будут вызывать callback функции с принятыми данными и событиями.

Насчет буферизации, для ТСР определен пакет от 56 до 1500 скольких то байт. Но никто не говорит что данные должны идти единым пакетом, более того есть оборудования (например wifi) который любит дробить и менять порядок пакетам, не всегда, но есть экземпляры. ТСР берет на себя сбор и выстраивание пакетов в нужном порядке. Более того у него есть так называемое окно, которое при заполнении не дает посылать данные дальше пока старые не будут приняты и обработаны, так что через ТСР можно послать бесконечной длинны поток данных.



Go to the top of the page
 
+Quote Post
smk
сообщение Oct 28 2013, 08:02
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Тогда на первом этапе создам новое сетевое подключение по вышеописанной методике. Пропингую адрес, предназначенный для платы. Перепрошью плату с новыми настройками и проверю железо на примере от терры. Если будет пинговаться, пойдем дальше. Нужна будет помощь в создании своего проекта на основе имеющегося железа + драйвера от ST + LwIP.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 2 2013, 05:59
Сообщение #48


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



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


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Nov 6 2013, 10:15
Сообщение #49


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



Цитата(vlad_new @ Oct 23 2013, 22:16) *
Этот только в 5 появился. Хотя это только визард создания проэкта. Внутри проэкта всеравно появятся другие визады по настройке RTOS, Ethernet, ETH-PHY, протоколов и т.д.


поставил 5 посмотрел и примеры и то что делает визард...
что то можно использовать, но очень многое остается за кадром как понимаю в проприетарной закрытой части .либ
например алгоримы пререинициализации phy & mac...

может быть есть где то примеры хорошей работы с ethernet?
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Nov 6 2013, 21:57
Сообщение #50


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Все что вам может понадобится - открыто. На сайте keil выложено куча примеров и ответов на разные вопросы. К тому же вам предлагают вариант с lwip.
Вот здесь все что вам может понадобится.

extern LOCALM nlocalm[]; // Local Machine Settings
extern LOCALM localm[]; // for DHCP redy
extern u8 lhost_name[]; // Name
extern u8 own_hw_adr[]; // MAC

Переинициализация PHY не требуется. Все срабатывает "на лету". Ну если хочется то: init_TcpNet(); в любой момент.
Все структуры описаны в Net_lib.c, который пристегнут к визорту Net_Config.c в самом конце.
Что касается "хорошей работы" - не понятно, что вы имеете ввиду. Создается впечетление, что, как тут кто то сказал -"Ваша беда в том, что вы хотите, что бы кто то за вас все сделал".
С езернетом такое не прокатит. Удачи.


Сообщение отредактировал vlad_new - Nov 6 2013, 22:04
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Nov 7 2013, 06:56
Сообщение #51


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



хм... возможно я чего то не нашел, но то что мне нужно я не видел, к примеру, как обрабатывается ситуация пропадания появления линка? зависания phy? зависания мак контроллера? так же не увидел как вообще происходит инициализация езернета - есть только функции в драйверах но вот откуда они вызываюстя? откуда то из закрытых недр ос? то что переинициализация в кейле не требуется и она осуществляется на лету это здорово, но я делаю в жсс и на сам кейл перепозлать не собираюсь теперь уже точно ибо это кот в мешке по большому счету, что и как там происходит тайна за семью печатями

разные стеки мне не нужны, обработку пакетов делаю сам, интересует именно инициализация и поддержка в работоспособном состоянии именно это я назвал "примером хорошей работы"
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 8 2013, 12:51
Сообщение #52


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Прошу подсказать как мне настроить вторую сетевую карту, которая будет использоваться для работы с девайсом? При этом первая (на борту) уже используется под интернет. В частности что писать в строчку "шлюз"? Хотелось бы чтоб компьютер имел адрес 192.168.0.1, а девайс пусть будет 192.168.0.2 . Спасибо.

Поторопился с вопросом. Нашел тут для чайников: http://2bubna.com.ua/index.php/nastroyka-s...-kompyuter.html


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 9 2013, 12:26
Сообщение #53


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Железо проверил, все работает. Наконец-то можно приступить к вопросам непосредственно касающимся названия темы. У меня заведен проект в кейле, состоящий из драйвера от СТ, инициализации пинов и тактирования. Прикрепляю его к посту (может кто найдет время глянуть на что оно похоже). Собственно вопрос в том, можно ли как-то убедится в работоспособности уже имющейся программной части? Как мне теперь добавить LwIP чтоб пинговаться начало? Спасибо. Буду рад любой помощи и подсказкам.

Прикрепленный файл  ETH107.ZIP ( 972 килобайт ) Кол-во скачиваний: 88


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 10 2013, 21:37
Сообщение #54


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



самый первый тест это попихать данные в МАК контроллер, и поглядеть wireSharkom лезут ли они в сеть. Я не умничая фигачил Hello world, и видел шарком плохой ошибочный пакет с моими данными.

в обратную сторону я что-то в свое время быстрого и простого теста не придумал, надо на уровень драйвера винды спускаться... Но я подумал в одну сторону работает и в другую будет.

LwIP - хорошо бы примеры поглядеть. Стэк от кейла как то легче прикручивается.
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 11 2013, 07:28
Сообщение #55


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Пытался скачать стек от кейла но так и не увидел где ссылка. А что надежней, от кейла или lwip? А попытаться передавать это значит писать в буфер и как-то командовать отправку? С буфером понятно, но как пнуть на отправку? Я так понял, что буфер имеет несколько страниц, в частности 8 на прием, а 2 на передачу? В смысле в реализации от терры.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Nov 11 2013, 11:28
Сообщение #56


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



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

однако если делаете в кейле то там как то все очень по своему
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 11 2013, 12:50
Сообщение #57


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(smk @ Nov 11 2013, 11:28) *
Пытался скачать стек от кейла но так и не увидел где ссылка. А что надежней, от кейла или lwip? А попытаться передавать это значит писать в буфер и как-то командовать отправку? С буфером понятно, но как пнуть на отправку? Я так понял, что буфер имеет несколько страниц, в частности 8 на прием, а 2 на передачу? В смысле в реализации от терры.


Да фиг его знает что надежнее
В LwIP есть исходники, если что можно переписать
Стэк от кейла - закрытый, библиотека и досвидос, если что не так, только им писать

С другой стороны кеил уважаемая фирма, и как в их среде можно выбрать из списка процессор и сразу его характеристики ставятся, так и стэк как то очень легко сам цепляется.


как пнуть начало передачи в СТМ что-то не знаю...
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 11 2013, 13:05
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



А стек кейловский где скачать и где пишут про "прикрутить" библиотеку? Очень уж интригует что легко сам цепляется. Я думаю попробовать и то и то. Жизнь покажет. Только благоразумней начинать с того, что попроще дабы снизить вероятность ошибок.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Nov 11 2013, 13:53
Сообщение #59


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Не надо ничего качать. Библиотека уже у вас лежит вот где то там ..\ARM\RV31\LIB\TCP_CM3.lib
В визарте Net_Config.c ставите галочки какие надо. К пректу надо подключить драйвер ETH соответствующий вашему модему.
В мэйне запускаете инициализацию портов. Затем запускается init_TcpNet(); далее в цыкле мэин вызавается timer_poll(); и main_TcpNet(); и все.
Все остальное делается при помощи callback функций, которые запускаются из библиотеки кейла. Все нужные callback функции сначала должны быть объявлены и проинициализированы. К примеру callback для приема и передачи пакетов по UDP выглядит так:
Код
    udp_soc=udp_get_socket(0,UDP_OPT_SEND_CS|UDP_OPT_CHK_CS,udp_callback);  // UDP socket
    if(udp_soc!= 0) udp_open(udp_soc, 1000);                                                             // Open UDP port 1000 for communication

Вот так ( к примеру ) выглядит прием команды по UDP и отправка разных параметров в ответ:
Код
u16 udp_callback1 (u8 socket, u8 *remip, u16 remport, u8 *buf, u16 len)
{
u8 *send;
char tbf[4];
u32 dp;

    if((!memcmp(buf,"GET",3))||(!memcmp(buf,"Get",3))||(!memcmp(buf,"get",3)))
      {
      if(DHCP_off) strcpy(tbf,"OFF"); else strcpy(tbf,"ON");
      dp=*(u32*)&localm[0];
      send = udp_get_buf(256);                                 // Len 256 !!!
      len=sprintf((char*)send,
      "\nMAC[%02X:%02X:%02X:%02X:%02X:%02X]"
      "\nIP[%d.%d.%d.%d]"
      "\nMASK[%d.%d.%d.%d]"
      "\nGW[%d.%d.%d.%d]"
      "\nDNS[%d.%d.%d.%d]"
      "\nDHCP_%s"
      "\nIP_DHCP[%d.%d.%d.%d]"
      "\nNAME[%s]\n",
      own_hw_adr[0], own_hw_adr[1], own_hw_adr[2], own_hw_adr[3], own_hw_adr[4], own_hw_adr[5],
      nlocalm[0].IpAdr[0],   nlocalm[0].IpAdr[1],   nlocalm[0].IpAdr[2],   nlocalm[0].IpAdr[3],
      nlocalm[0].NetMask[0], nlocalm[0].NetMask[1], nlocalm[0].NetMask[2], nlocalm[0].NetMask[3],
      nlocalm[0].DefGW[0],   nlocalm[0].DefGW[1],   nlocalm[0].DefGW[2],   nlocalm[0].DefGW[3],
      nlocalm[0].PriDNS[0],  nlocalm[0].PriDNS[1],  nlocalm[0].PriDNS[2],  nlocalm[0].PriDNS[3],
      tbf, dp&0xFF, (dp>>8)&0xFF, (dp>>16)&0xFF, (dp>>24)&0xFF, (char*)lhost_name);
      udp_send (udp_soc1, remip, 1000, send, len);
      }
  return (0);
}


В lwip точно так же все делается через callback функции.
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 11 2013, 17:08
Сообщение #60


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Добавил библиотеку и файл Net_Config.c; подключил Net_Config.h
Пишет вот такую ошибку: F:\PROGRAM\Keil454\ARM\RL\TCPnet\Config\Net_Config.c(859): error: #20: identifier "ERR_MEM_LOCK" is undefined

Что можно сделать? Спасибо.

С этим разобрался. Добавил в:
Код
typedef enum {                    /* << Fatal System Error Codes >>          */
  ERR_MEM_ALLOC,
  ERR_MEM_FREE,
  ERR_MEM_CORRUPT,
  ERR_MEM_LOCK,           //вот сюда
  ERR_UDP_ALLOC,
  ERR_TCP_ALLOC,
  ERR_TCP_STATE
} ERROR_CODE;


Теперь другие ошибки:

eth107.axf: Error: L6218E: Undefined symbol init_ethernet (referred from at_ethernet.o).
eth107.axf: Error: L6218E: Undefined symbol send_frame (referred from at_ethernet.o).

С этим сложнее. Может кто подскажет как поступить?

Net_lib.c нужно включать в проект?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 11 2013, 19:41
Сообщение #61


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



для кеил стэка еще системный таймер надо запустить на 1 мСек, чтобы
timer_poll(); правильно работал.

init_ethernet - это внутренняя функция библиотеки, к LPC есть файл со всеми патрахами мак контроллера
в нем написан такой коммент
/*----------------------------------------------------------------------------
* EMAC Ethernet Driver Functions
*----------------------------------------------------------------------------
* Required functions for Ethernet driver module:
* a. Polling mode: - void init_ethernet ()
* - void send_frame (OS_FRAME *frame)
* - void poll_ethernet (void)
* b. Interrupt mode: - void init_ethernet ()
* - void send_frame (OS_FRAME *frame)
* - void int_enable_eth ()
* - void int_disable_eth ()
* - interrupt function
*---------------------------------------------------------------------------*/

в Net_Config.h есть такое объявление
extern void init_ethernet (void);
extern void send_frame (OS_FRAME *frame);

Go to the top of the page
 
+Quote Post
smk
сообщение Nov 12 2013, 08:01
Сообщение #62


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Nov 11 2013, 21:41) *
в Net_Config.h есть такое объявление
extern void init_ethernet (void);
extern void send_frame (OS_FRAME *frame);


Это я видел. Самих функций не видел. Как поступить нужно в этой ситуации?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 12 2013, 10:59
Сообщение #63


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну вы их не увидите они в библиотеке кейла вызываются.
у меня тел этих функций тоже нет...

http://www.keil.com/support/man/docs/rlarm...it_ethernet.htm

The init_ethernet function is part of RL-TCPnet. The prototype is defined in net_config.h.
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 12 2013, 11:36
Сообщение #64


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Nov 12 2013, 12:59) *
ну вы их не увидите они в библиотеке кейла вызываются.
у меня тел этих функций тоже нет...

http://www.keil.com/support/man/docs/rlarm...it_ethernet.htm

The init_ethernet function is part of RL-TCPnet. The prototype is defined in net_config.h.


Тогда почему кейл их не видит? Как я понимаю, если в net_config.h они упомянуты, то в net_config.с длжны быть описаны?


Убедительная просьба - ткните носом в пример от кейла, где все это работает. Попроще пример.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 12 2013, 18:53
Сообщение #65


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



нет конечно...
то что в хедере есть прототипы функций, совсем не означает что в модуле должно быть их описание. Они в библиотеке, и скрыты от вас как от пользователя.

Судя по всем у вас библиотека не подключена, поэтому линкер и не может найти эти функции...
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 12 2013, 19:03
Сообщение #66


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Nov 12 2013, 20:53) *
нет конечно...
то что в хедере есть прототипы функций, совсем не означает что в модуле должно быть их описание. Они в библиотеке, и скрыты от вас как от пользователя.

Судя по всем у вас библиотека не подключена, поэтому линкер и не может найти эти функции...

Да подключил, как я понимаю. Или еще как-то нужно?
Прикрепленное изображение


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 13 2013, 08:23
Сообщение #67


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



БЛИН!
прошу прощения, я вас полностью обманул...

вызова этих функций найти нельзя он внутри библиотеки, а сами эти функции должны быть созданы....


у меня к LPC есть еще файлик EMAC_LPC17xx.c - там описаны все патроха управления емаком, инициализируются прерывания и мак контроллер

в нем есть эта функция

CODE

void init_ethernet (void)
{
/* Initialize the EMAC ethernet controller. */
uint32_t regv,tout,id1,id2;
DBG_PHY("");
DBG_PHY("\r\nDBG_PHY: Starting Init Physic");
/* Power Up the EMAC controller. */
LPC_SC->PCONP |= 0x40000000;

/* Configure PHY */
LPC_GPIO4 -> FIOSET |= 1<<29;
LPC_GPIO4 -> FIODIR |= 1<<29;
LPC_GPIO1 -> FIOCLR |= 1<<14;
LPC_GPIO1 -> FIODIR |= 1<<14;
LPC_GPIO1 -> FIOCLR |= 1<<8;
LPC_GPIO1 -> FIODIR |= 1<<8;

/* Power doun/up Reset PHY for strapping */
LPC_GPIO4 -> FIOCLR |= 1<<29;
for(tout=0;tout<1000000;tout++);
LPC_GPIO4 -> FIOSET |= 1<<29;
for(tout=0;tout<1000000;tout++);

/* Enable P1 Ethernet Pins. */
LPC_PINCON->PINSEL2 = 0x50150105;
/* LPC176x devices, no MDIO, MDC remap. */
LPC_PINCON->PINSEL3 = (LPC_PINCON->PINSEL3 & ~0x0000000F) | 0x00000005;

/* 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 */
LPC_EMAC->MCFG = MCFG_CLK_DIV28 | MCFG_RES_MII;
for (tout = 100000; tout; tout--);
LPC_EMAC->MCFG = MCFG_CLK_DIV28;
for (tout = 100000; tout; tout--);

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

/* Reset Reduced MII Logic. */
LPC_EMAC->SUPP = SUPP_RES_RMII;
for (tout = 100; tout; tout--);
LPC_EMAC->SUPP = 0;

//PHY_ADDR = 0;
DBG_PHY("\r\nDBG_PHY: Starting Scan PHY address:\r\n");
//while(1)
for(PHY_ADDR = 0; PHY_ADDR<32;PHY_ADDR++)
{
DBG_PHY(".");
/* Put the PHY in reset mode */
write_PHY (PHY_REG_BMCR, 0x8000);
for (tout = 10000; tout; tout--);

/* Wait for hardware reset to end. */
for (tout = 0; tout < 0x100; tout++)
{
regv = read_PHY (PHY_REG_BMCR);
if (!(regv & 0x8000))
{
/* Reset complete */
break;
}
}
if (tout < 0x100) break;
else ;
//PHY_ADDR++;
//PHY_ADDR&=0x1f;
}
if(PHY_ADDR<31)
{
DBG_PHY("\r\nDBG_PHY: Found at PHY_ADDR = %d",PHY_ADDR);
}
else
{
DBG_PHY_ERR("\r\nDBG_PHY_ERR: PHY_ADDR Error");
return;
}

/* Check if this is a kz8721 PHY. */
id1 = read_PHY (PHY_REG_IDR1);
id2 = read_PHY (PHY_REG_IDR2);
DBG_PHY("\r\nDBG_PHY: ID1-0x%04X, ID2-0x%04X",id1, id2);


if (((id1 << 16) | (id2 & 0xFFF0)) != 0x221610)
{
DBG_PHY_ERR("\r\nDDBG_PHY_ERR: Not a KS8721 PHY - ID1-0x%04X, ID2-0x%04X",id1, id2);
return;
}
else
{
DBG_PHY("\r\nDBG_PHY: KS8721 PHY - Sucñess");
}

/* Configure the PHY device */
#if defined (_10MBIT_)
/* Connect at 10MBit */
write_PHY (PHY_REG_BMCR, PHY_FULLD_10M);
#elif defined (_100MBIT_)
/* Connect at 100MBit */
write_PHY (PHY_REG_BMCR, PHY_FULLD_100M);
#else
DBG_PHY("\r\nDBG_PHY: Starting AutoNegotiation Process\r\n");
/* Use autonegotiation about the link speed. */
write_PHY (PHY_REG_BMCR, PHY_AUTO_NEG);
/* Wait to complete Auto_Negotiation. */
for (tout = 0; tout < 0x30000; tout++)
{
regv = read_PHY (PHY_REG_BMSR);
if( !(tout%3000) ) DBG_PHY(".");
if (regv & 0x0020)
{
DBG_PHY("\r\nDBG_PHY: AutoNegotiation Sucñess tout = %d Counts",tout);
/* Autonegotiation Complete. */
break;
}
}
#endif
if (tout >= 0x30000)
{
DBG_PHY_ERR("\r\nDBG_PHY_ERR: AutoNegotiation failed.");
DBG_PHY_ERR("\r\nDBG_PHY:Possibly Cable Unplugget");
DBG_PHY_ERR("\r\nDBG_PHY:Manual Assign: Full duplex - 100 Mbit Mode");
write_PHY (PHY_REG_BMCR, PHY_FULLD_100M);
//return; // auto_neg failed
}

/* Check the link status. */
for (tout = 0; tout < 0x10000; tout++)
{
regv = read_PHY (PHY_REG_BMSR);
if (regv & 0x0004)
{
/* Link is on. */
DBG_PHY("\r\nDBG_PHY: Link is ON");
break;
}
}

if (tout >= 0x10000)
{
DBG_PHY("\r\nDBG_PHY: Link is OFF");
}

regv = ((read_PHY (0x1f))>>2)&0x7;

/* Configure Full/Half Duplex mode. */

if ((regv==0x0005)||(regv==0x0006))
{
/* Full duplex is enabled. */
LPC_EMAC->MAC2 |= MAC2_FULL_DUP;
LPC_EMAC->Command |= CR_FULL_DUP;
LPC_EMAC->IPGT = IPGT_FULL_DUP;
DBG_PHY("\r\nDBG_PHY: Full duplex is enabled.");
}

if ((regv==0x0001)||(regv==0x0002))
{
/* Half duplex mode. */
LPC_EMAC->IPGT = IPGT_HALF_DUP;
DBG_PHY("\r\nDBG_PHY: Half duplex is enabled.");
}

if ((regv==0x0005)||(regv==0x0001))
{
/* 10MBit mode. */
LPC_EMAC->SUPP = 0;
DBG_PHY("\r\nDBG_PHY: 10MBit mode.");
}
if ((regv==0x0006)||(regv==0x0002))
{
/* 100MBit mode. */
LPC_EMAC->SUPP = SUPP_SPEED;
DBG_PHY("\r\nDBG_PHY: 100MBit mode.");
}

#ifdef DEBUG
regv = read_PHY (PHY_REG_BMCR);
DBG_PHY("\r\nDBG_PHY: Register 0h - Basic Control = 0x%X",regv);
regv = read_PHY (PHY_REG_BMSR);
DBG_PHY("\r\nDBG_PHY: Register 1h - Basic Status = 0x%X",regv);

regv = read_PHY (PHY_REG_ANAR);
DBG_PHY("\r\nDBG_PHY: Register 4h - Auto-Negotiation Advertisement = 0x%X",regv);
regv = read_PHY (PHY_REG_ANLPAR);
DBG_PHY("\r\nDBG_PHY: Register 5h - Auto-Negotiation Link Partner Ability = 0x%X",regv);
regv = read_PHY (PHY_REG_ANER);
DBG_PHY("\r\nDBG_PHY: Register 6h - Auto-Negotiation Expansion = 0x%X",regv);
regv = read_PHY (PHY_REG_ANNPTR);
DBG_PHY("\r\nDBG_PHY: Register 7h - Auto-Negotiation Next Page = 0x%X",regv);
regv = read_PHY (PHY_REG_LPNPA);
DBG_PHY("\r\nDBG_PHY: Register 8h - Link Partner Next Page Ability = 0x%X",regv);
#endif

{ /* Using Device Serial Number For Define Last 3 MAC Address */
uint32_t p0,p1,p2,p3,s;
DBG_PHY("\r\nDBG_PHY: Reading Device Serial Number:");
u32IAP_ReadSerialNumber(&p0, &p1, &p2, &p3);
//óïàêóåì ñåðèéíûé íîìåð â 32 áèòà
s = p0 + p1 + p2 + p3;
//32 áèòà óïàêóåì â 24, ÷òîáû èñïîëüçîâàòü äëÿ ìàê àäðåñà
s = s&0xFF + s>>8;
DBG_PHY("\r\nDBG_PHY: Chip Serial Number = 0x%08X 0x%08X 0x%08X 0x%08X",p0,p1,p2,p3);
DBG_PHY("\r\nDBG_PHY: Chip Summ Serial = 0x%08X ",s);
DBG_PHY("\r\nDBG_PHY: Device Hardware Address:" );
own_hw_adr[3] = ( (s>>16) & 0xFF);
own_hw_adr[4] = ( (s>>8 ) & 0xFF);
own_hw_adr[5] = ( (s ) & 0xFF);
DBG_PHY("\r\nDBG_PHY: %02X %02X %02X %02X %02X %02X", own_hw_adr[0], own_hw_adr[1], own_hw_adr[2],
own_hw_adr[3], own_hw_adr[4], own_hw_adr[5] );
}
/* Set the Ethernet MAC Address registers */
LPC_EMAC->SA0 = ((uint32_t)own_hw_adr[5] << 8) | (uint32_t)own_hw_adr[4];
LPC_EMAC->SA1 = ((uint32_t)own_hw_adr[3] << 8) | (uint32_t)own_hw_adr[2];
LPC_EMAC->SA2 = ((uint32_t)own_hw_adr[1] << 8) | (uint32_t)own_hw_adr[0];

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

/* Receive Broadcast, Multicast and Perfect Match Packets */
LPC_EMAC->RxFilterCtrl = RFC_MCAST_EN | RFC_BCAST_EN | RFC_PERFECT_EN;
/* 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;

DBG_PHY("\r\nDBG_PHY: PHY Config Done\r\n" );
return;
}


посылка фрейма там же

CODE
void send_frame (OS_FRAME *frame)
{
/* Send frame to EMAC ethernet controller */
uint32_t idx,len;
uint32_t *sp,*dp;

idx = LPC_EMAC->TxProduceIndex;
sp = (uint32_t *)&frame->data[0];
dp = (uint32_t *)Tx_Desc[idx].Packet;

/* Copy frame data to EMAC packet buffers. */
for (len = (frame->length + 3) >> 2; len; len--) {
*dp++ = *sp++;
}
Tx_Desc[idx].Ctrl = (frame->length-1) | (TCTRL_INT | TCTRL_LAST);

/* Start frame transmission. */
if (++idx == NUM_TX_FRAG) idx = 0;
LPC_EMAC->TxProduceIndex = idx;
}


это я чего то реально затупил. Это же привязанные к конкретному железу функции, они не могли быть в библиотеке....

у вас должен быть библиотека - драйвер от вашего мак контролера, найдите в ней подходящие функции и организуйте вызов!
Go to the top of the page
 
+Quote Post
ksv198
сообщение Nov 13 2013, 10:59
Сообщение #68


Частый гость
**

Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964



Цитата(smk @ Nov 12 2013, 23:03) *
Да подключил, как я понимаю. Или еще как-то нужно?


Попробуйте начать с простого.
1. Создайте пустой проект в Кейле, где есть только начальная инициализация STM32F107 и убедитесь, что контроллер нормально запускается (например мигает светодиодом). Хорошо бы проконтролировать частоту ядра выводом на выход PA8.
2. Далее подключите в проект файлы ETH_STM32X.c и ETH_STM32X.h (лежат в c:\Keil\ARM\RL\TCPnet\Drivers\). Это драйвер Кейла для Ethernet MAC и инициализация PHY. Он очень простой по сравнению с STM-овским, в нём легче разобраться для начала. По умолчанию там всё для физики DP83848C.
3. Вам нужно поправить в ETH_STM32X.h всё, что ниже строки комментария /* DP83848C PHY Registers */. Для простоты я бы оставил сначала только первые 8 регистров, для проверки работоспособности хватит (если у Вас RTL8201 то первые 6 регистров). Исправьте #define DP83848C_ID 0x20005C90 на свой (из даташита на Вашу микросхему физики). Исправьте #define DP83848C_DEF_ADR 0x01 на адрес Вашей микросхемы физики (обратите внимание, что он может изменяться от схемы включения - всё описано в даташите).
4. Далее в файле ETH_STM32X.c идём в функцию void init_ethernet (void). Там два варианта подключения физики - по MII или по RMII. Оставьте только свой вариант, чтобы не путаться. Затем необходимо обратить внимание на строку /* MDC Clock range 60-72MHz. */ ETH->MACMIIAR = 0x00000000; Если у Вас частота ядра менее 60 МГц, то надо из референс мануал подставить другое значение (см. RM0008 раздел SMI clock selection). Уберите временно проверку по условию if (((id1 << 16) | (id2 & 0xFFF0)) == DP83848C_ID) - это проверка идентификатора физики. Уберите блок от /* Check the link status. */ - в Вашей микросхеме физики может не быть этого регистра. Обратите внимание на массив extern U8 own_hw_adr[];. Это массив МАС адреса, на данном этапе, чтобы не подключать Net_Config.c определите его локально (не забудьте младший байт поставить в 0х00 для начала, чтобы случайно не сделать броадкаст).
5. Начинаем отладку. В main() вызываем init_ethernet () и Вашим любимым методом (дебагом или принтом через последовательный порт, или выводом на экранчик, если есть) смотрим возвращаемые функцией read_PHY() значения. Сравнивайте с тем, что видите в описании битов регистра в даташите на Ваш PHY. Здесь пригодятся регистры 0х02 и 0х03 - в них идентификатор. Если все время читается 0xff или 0х00 то попробуйте менять адрес (в строке #define DP83848C_DEF_ADR) от 0 до 32. Если все равно ничего не получается возвращайтесь к анализу схемы (желательно с осциллографом).
6. Когда начнут нормально читаться регистры, пройдитесь по всем доступным в даташите и посмотрите, что с физикой становится после инициализации. Возможно будут проблемы с autonegotiation - PHY может не определить скорость сам. Пните его принудительно: write_PHY (PHY_REG_BMCR, PHY_FULLD_10M); или write_PHY (PHY_REG_BMCR, PHY_FULLD_100M);.
7. Когда увидите по состоянию регистров физики, что линк поднят - только тогда можно переходить к попыткам поднять стек. Это отдельно уже.
Удачи!
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 13 2013, 12:29
Сообщение #69


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



ksv198, благодарю! как глоток воздуха! Сделаю - отпишусь.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Nov 13 2013, 14:42
Сообщение #70


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(ksv198 @ Nov 13 2013, 13:59) *
менять адрес (в строке #define DP83848C_DEF_ADR) от 0 до 32.

от 0 до 31 biggrin.gif
Go to the top of the page
 
+Quote Post
ksv198
сообщение Nov 13 2013, 15:36
Сообщение #71


Частый гость
**

Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964



Цитата(DmitryM @ Nov 13 2013, 18:42) *
от 0 до 31 biggrin.gif


Вы правы biggrin.gif
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 13 2013, 18:56
Сообщение #72


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Что удалось сделать. П.1-4 сделал полностью. Инициализацию пинов сделал без ремапа так, как собрано на плате. Добавил #include "type.h" чтоб вручную все не доводить. Но дальше не пошло т.к. остались сообщения об ошибке:
Код
ETH_keil.axf: Error: L6218E: Undefined symbol alloc_mem (referred from eth_stm32x.o).
ETH_keil.axf: Error: L6218E: Undefined symbol put_in_queue (referred from eth_stm32x.o).


Что можно предпринять? Спасибо.

Вот там похоже упомянуты:
Код
/*--------------------------- interrupt_ethernet ----------------------------*/

void ETH_IRQHandler (void) {
  /* Ethernet Controller Interrupt function. */
  OS_FRAME *frame;
  U32 i,RxLen,int_stat;
  U32 *sp,*dp;

  while (((int_stat = ETH->DMASR) & INT_NISE) != 0) {
    ETH->DMASR = int_stat;
    if (int_stat & INT_RIE) {
      /* Valid frame has been received. */
      i = RxBufIndex;
      if (Rx_Desc[i].Stat & DMA_RX_ERROR_MASK) {
        goto rel;
      }
      if ((Rx_Desc[i].Stat & DMA_RX_SEG_MASK) != DMA_RX_SEG_MASK) {
        goto rel;
      }
      RxLen = ((Rx_Desc[i].Stat >> 16) & 0x3FFF) - 4;
      if (RxLen > ETH_MTU) {
        /* Packet too big, ignore it and free buffer. */
        goto rel;
      }
      /* Flag 0x80000000 to skip sys_error() call when out of memory. */
      frame = alloc_mem (RxLen | 0x80000000);
      /* if 'alloc_mem()' has failed, ignore this packet. */
      if (frame != NULL) {
        sp = (U32 *)(Rx_Desc[i].Addr & ~3);
        dp = (U32 *)&frame->data[0];
        for (RxLen = (RxLen + 3) >> 2; RxLen; RxLen--) {
          *dp++ = *sp++;
        }
        put_in_queue (frame);
      }
      /* Release this frame from ETH IO buffer. */
rel:  Rx_Desc[i].Stat = DMA_RX_OWN;

      if (++i == NUM_RX_BUF) i = 0;
      RxBufIndex = i;
    }
    if (int_stat & INT_TIE) {
      /* Frame transmit completed. */
    }
  }
}


Закоментировал обработчик и получилось скомпилировать. Физику читает, идентификатор читает правильно. Линк светится. С autonegotiation проблем нет если кабель подключен. PHY_REG_BMSR = 0x7869. Адрес физики = 31.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 13 2013, 20:05
Сообщение #73


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



#include "Net_Config.h"
?
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 13 2013, 20:27
Сообщение #74


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Nov 13 2013, 22:05) *
#include "Net_Config.h"
?

Пробовал. Вылазит куча другого. Думаю для текущего этапа закоментировать - лучшее решение.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 13 2013, 21:13
Сообщение #75


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну тогда остается только свои функции - заглушки написать.
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 14 2013, 08:32
Сообщение #76


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Nov 13 2013, 23:13) *
ну тогда остается только свои функции - заглушки написать.

Двигаюсь в соответствии с постом №68. Пока удачно. В целом начинать с простого это самое то, что нужно. Т.к. с езернетом до этого дел не имел. Так что для лучшего понимания нужно пройти все шаги.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Pasha_a13
сообщение Nov 23 2013, 12:40
Сообщение #77


Частый гость
**

Группа: Участник
Сообщений: 166
Регистрация: 8-09-09
Из: Украина
Пользователь №: 52 244



Добрый день!

Прошу совета.
Вкратце опишу суть вопроса.

В своих устройствах использую микроконтроллеры различных семейств(PIC, MSP430, планирую для более сложных проектов перейти на STM32).
В основном устройства не очень сложные.
Сейчас возникла необходимость в разработке устройств с web-интерфейсом(для конфигурирования, просмотра логов и т.п.) а также устройства должны будут складывать данные на удаленный сервер, обновлять прошивку удаленно и т.п.

Смотрел на микросхему W5100 со встроенным TCP/IP стеком.
Запустить не ней простой web-интерфейс , насколько я понял, будет довольно несложно, однако смущает ее дороговизна и не сильно широкое растространение (я так понимаю ввиду ограниченности возможностей ее стека?).
В результате этого пришел к выводу что все-таки предпочтительнее использовать софтверный стек внутри контроллера и простую физику снаружи(в случае PIC18F97J60 и подобных еще дешевле все получается, т.к. физика внутри контроллера).

Уважаемые специалисты, посоветуйте пожалуйста новичку какой из стеков (lwip, или от microchip, или еще какой-то) мне лучше выбрать чтобы, так сказать, он был более универсальным, т.е. при необходимости его можно было портировать на разные семейства контроллеров?
Или же предпочтительно остановиться на каком-то одном семействе для работы с ethernet?

Сообщение отредактировал Pasha_a13 - Nov 23 2013, 12:44
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 24 2013, 13:49
Сообщение #78


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Ну вобщем-то с текущими проблемами разобрался. Хотелось бы идти дальше. Физику читает/пишет.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
psL
сообщение Nov 24 2013, 18:48
Сообщение #79


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



Цитата(Pasha_a13 @ Nov 23 2013, 16:40) *
какой из стеков (lwip, или от microchip, или еще какой-то) мне лучше выбрать чтобы, так сказать, он был более универсальным, т.е. при необходимости его можно было портировать на разные семейства контроллеров?
Или же предпочтительно остановиться на каком-то одном семействе для работы с ethernet?

Для переносимости лучше написать обертку над сокетами/протосокетами/... конкретной реализации tcp/ip, тогда приложение можно будет хоть на x86 запускать. А еще лучше вместо микростеков использовать полноценные стеки и соответствующие микроконтроллеры. Какой-нибудь TL-MR3020 уже 500 рублей в розницу...
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 25 2013, 17:47
Сообщение #80


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



С физикой все более-менее понятно. Хотелось бы уже и попинговать попробовать. Как собственно запустить кейловский стек? Состояние RTL8201CP сподключенным кабелем привожу на картинке.
Прикрепленное изображение


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 25 2013, 19:29
Сообщение #81


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



init_TcpNet ();

а потом в цикле вызывайте
main_TcpNet();

не забудьте заполнить
tcpip_user.с

вроде на пинг после этого должен начать отвечать

потом сделаете сокеты, и пропишите функции обменов

Go to the top of the page
 
+Quote Post
smk
сообщение Nov 26 2013, 17:46
Сообщение #82


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Nov 25 2013, 21:29) *
init_TcpNet ();

а потом в цикле вызывайте
main_TcpNet();

не забудьте заполнить
tcpip_user.с

вроде на пинг после этого должен начать отвечать

потом сделаете сокеты, и пропишите функции обменов

Может имеет смысл подключить библиотеку от кейла и нужные файлы?

Попытался скомпилировать с библиотекой и файлами Net_Config.c / Net_Config.h
Получил ошибку:

Код
F:\Program\Keil454\ARM\RV31\Inc\RTL.h(37): error:  #256: invalid redeclaration of type name "S8" (declared at line 31 of "type.h")


Как цивилизованно выйти из ситуации?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 26 2013, 20:26
Сообщение #83


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(smk @ Nov 26 2013, 21:46) *
Может имеет смысл подключить библиотеку от кейла и нужные файлы?

Попытался скомпилировать с библиотекой и файлами Net_Config.c / Net_Config.h
Получил ошибку:

Код
F:\Program\Keil454\ARM\RV31\Inc\RTL.h(37): error:  #256: invalid redeclaration of type name "S8" (declared at line 31 of "type.h")


Как цивилизованно выйти из ситуации?


ну подключать библиотеку и нужные файлы само собой разумелось.


проверить что все файлы, а в честности type.h защищены
#ifndef header_name
#define header_name

#endif

ну а дальше править файлы, где у вас один тип по 2 раза объявляется...
файлы библиотеки считать основными, ваши файлы вторыми...
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 27 2013, 07:55
Сообщение #84


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Разобрался с проблемой. Скомпилировалось. Хочу спросить, если применять библиотеку TCP_CM3.lib, то нужен ли SysTick?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 27 2013, 12:17
Сообщение #85


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



да, без тика жизни нет...

в ТСР стэке есть время зависимые функции. ДХЦП например обрабатывается с интервалами, таймауты считать для работы модулей тоже...

Go to the top of the page
 
+Quote Post
smk
сообщение Nov 27 2013, 14:33
Сообщение #86


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Nov 27 2013, 14:17) *
да, без тика жизни нет...

в ТСР стэке есть время зависимые функции. ДХЦП например обрабатывается с интервалами, таймауты считать для работы модулей тоже...

А что нужно сделать/дописать?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 27 2013, 16:07
Сообщение #87


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



у меня как то так
функция которую вызываю в цикле постоянно
только коменты по кривому вставляютсяsad.gif, так что без них

Код
void TCP_IP_Process(void)
{
   int16_t i; //ïàðàìåòð öèêëà
   timer_poll (); //îïðàøèâàåì òàéìåð, ôîðìèðóåì íåîáõîäèìûå äëÿ ðàáîòû ÒÑÐ òèêè
   main_TcpNet(); //îñíîâíàÿ ôóíêöèÿ ðàáîòû ÒÑÐ ñòýêà
   dhcp_check (); //ïðîâåðÿåì DHCP
        
   //îòïðàâêà ãîòîâûõ äàííûõ UDP
   SendUDPdata(&UdpSock);
    
  //ïðîâåðÿåì äëÿ êàêèõ ñîêåòîâ âîçìîæíî î÷èñòèòü îêíî è îòïðàâëÿåì ãîòîâûå äàííûå åñëè åñòü
  for(i = 0; i < TCP_SOCKET_NUMBER; i++)//öèêë ïî âñåì ñîêåòà
   {
    SendTCPdata(&(TcpSock[i])); //îòïðàâêà ãîòîâûõ äàííûõ
    if( GetFIFOBufferSize(TcpSock[i].InputBufferStr) >= TcpSock[i].FreeWindowSize) //åñëè â áóôåðå åñòü äîñòàòî÷íî ìåñòà
      tcp_reset_window(TcpSock[i].SocketNumber);    //î÷èùàåì îêíî äàííîãî ñîêåòà
   }
  tick = __FALSE; //ñáðàñûâàåì òèê åñëè ïîÿâèëñÿ, åñëè íåò, íè÷åãî ñòðàøíîãî
}



SendTCP, SendUDP - это мои функции отправки ТСР и UDP сообщений из моих буферов, GetFIFOBufferSize - это тоже моя для проверки места в буфере, чтобы понять можно окно ТСР отпускать или еще нет.

и вот функция таймера что тики выставляет
Код
char Tcp100mSec = 0;
static void timer_poll ()
{
  /* System tick timer running in poll mode */
  if (SysTick->CTRL & 0x10000)  
  {
    if ( Tcp100mSec++ >= 100  )
    {
      Tcp100mSec = 0;
      /* Timer tick every 100 ms */
      timer_tick();
      tick = __TRUE;
    }
  }
}

в этой функции ставиться глобальный tick тот что в dhcp у меня используется, а timer_tick() - это функция стэка

а tick  используется в DHCP, для расчета таймаута и опроса не нашел ли он айпишник.
Go to the top of the page
 
+Quote Post
smk
сообщение Dec 4 2013, 16:34
Сообщение #88


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Наконец-то вернулся к своей теме. Результаты такие: дописал SysTick из примера от кейл. Дописал вызовы функций из того же примера. Скомпилировал. Пинга нет. Что нехватает? Прошу помочь. Проект прилагаю.
Прикрепленный файл  ETH_keil.zip ( 680.54 килобайт ) Кол-во скачиваний: 56


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
bzx
сообщение Dec 4 2013, 17:30
Сообщение #89


Местный
***

Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528



1. Ваш Phy чип определяется?
Цитата
/* Check if this is a RTL8201CP PHY. */
id1 = read_PHY (PHY_REG_IDR1);
id2 = read_PHY (PHY_REG_IDR2);

что в регистрах id1 и id2, т.е. идентификатор для RTL8201 определяется корректно? Пробегитись с отладчиком, после указанных строк в if попадаете?

2. Где 'Net_lib.c'?


--------------------
Для связи email: info собака qbit.su
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 4 2013, 17:38
Сообщение #90


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



init_ethernet() - вроде вызывать не надо, оно само вызовется в init_TcpNet ();

дальше все вроде верно выглядит

Пингуете из той же под сети?
Аутонеготинация прошла?
DHCP выключили не забыли? или вы по нему IP получаете?
dhcp_disable (); до этого момента заданный в netconfig IP адрес не присвоится, а без него IP 0.0.0.0, а этот айпи запрещен, он служебный


Go to the top of the page
 
+Quote Post
smk
сообщение Dec 4 2013, 17:51
Сообщение #91


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(bzx @ Dec 4 2013, 19:30) *
1. Ваш Phy чип определяется?

что в регистрах id1 и id2, т.е. идентификатор для RTL8201 определяется корректно? Пробегитись с отладчиком, после указанных строк в if попадаете?

2. Где 'Net_lib.c'?

Определяется. Пробежался.
Net_lib.c - что такое?

init_ethernet(); закоментил, dhcp_disable (); добавил. Пингуетя!!! Ура!!!

Теперь хочется двигаться дальше. Например принимать - передвать пакет. Сначала хоть маленький, затем и в пару десятков кило можно.

Код
int main (void)
{
    
    USART1_Init();    
//    init_ethernet();
  init_TcpNet ();
    dhcp_disable ();

  /* Setup and enable the SysTick timer for 100ms. */
  SysTick->LOAD = (72000000 / 10) - 1;
  SysTick->CTRL = 0x05;
    
  while (1)
    {    

    timer_poll ();
        main_TcpNet();
            
    } /* Loop forever */
}


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 4 2013, 20:27
Сообщение #92


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



дальше уже дело техники,
все очень просто!

Код
//выделяете сокет
SocketNumber = tcp_get_socket (TCP_TYPE_SERVER | TCP_TYPE_DELAY_ACK | TCP_TYPE_FLOW_CTRL | TCP_TYPE_KEEP_ALIVE, 0, 65535, tcp_callback);

//если получилось, ставите его на прослушку - это сокет который принимает конект
if (SocketNumber != 0)
  {
    /* Start listening on TCP port DevEthInfo.CtrlPort */
    tcp_listen (SocketNumber, PortNumber);
  }



tcp_callback - это функция обработки событий


Код
uint16_t tcp_callback (uint8_t soc, uint8_t evt, uint8_t *buf, uint16_t len) {
  /* This function is called by the TCP module on TCP event */
  /* Check the Net_Config.h for possible events.            */
  switch (evt)
  {
        case TCP_EVT_DATA: //ïðèøëè äàííûå
            /* TCP data frame has arrived, data is located at *buf, */
            /* data length is len. Allocate buffer to send reply.   */
            break;    

    case TCP_EVT_CONREQ:
      /* Remote host is trying to connect to our TCP socket. */
      return (1);
      
    case TCP_EVT_ABORT:
      break;
      
    case TCP_EVT_CONNECT:
      /* Socket is connected to remote peer. */
            return (1);
    
    case TCP_EVT_CLOSE:
      break;
                    
      
    case TCP_EVT_ACK:
      /* Our sent data has been acknowledged by remote peer */
      break;
  }
  return (0);


в эту функцию надо написать прием данных по событию TCP_EVT_DATA, buf - данные, len - длинна
учтите если вы никуда не сохранили данные они просто пропадут

чтобы послать данные
tcp_send (SocketNumber, sendbuf, SendDataSize);


для сброса окна
tcp_reset_window(SocketNumber)
это функция нужна если сокет делали с флагом TCP_TYPE_FLOW_CTRL
она сбрасывает окно, в кейловском стеке окно сбрасывается разом, по кусочкам из него не вычитывается.



самое простое - это сервер
в функцию приема воткнуть посылку данных обратно и сброс окна.




А да забыл.
после того как вы это сделали и запустили, надо конектиться из винды(юникса, макоса и бла бла бла) к этому сокету, по заданному порту, и слать данные.

со стороны винды(юникса) самое простое взять netcat
это программка консольная которая позволяет устанавливать ТСР соединение по заданному порту, слать и принимать данные

Go to the top of the page
 
+Quote Post
smk
сообщение Dec 5 2013, 07:58
Сообщение #93


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Вот такое сообщение об ошибке получилось:
Код
main_eth.c(48): error:  #20: identifier "TCP_TYPE_KEEP_ALIVE" is undefined

и ведь действительно в rtl.h не определено. Как поступить?

Попутно хотелось бы понимать ситуацию когда обращается скажем 2 и более клиента, при этом каждому нужны свои данные. Как их различать и отслеживать? Количество одновременных коннектов, я так понимаю лимитируется только размером памяти?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 5 2013, 18:41
Сообщение #94


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



у меня такое написано

Код
#define TCP_TYPE_SERVER    0x01   /* Socket Type Server (open for listening) */
#define TCP_TYPE_CLIENT    0x02   /* Socket Type Client (initiate connect)   */
#define TCP_TYPE_DELAY_ACK 0x04   /* Socket Type Delayed Acknowledge         */
#define TCP_TYPE_FLOW_CTRL 0x08   /* Socket Type Flow Control                */
#define TCP_TYPE_KEEP_ALIVE 0x10  /* Socket Type Keep Alive                  */
#define TCP_TYPE_CLIENT_SERVER (TCP_TYPE_SERVER | TCP_TYPE_CLIENT)


может старая версия стэка... она к 4.3 изменилась, FLOW_CTRL добавился вроде бы

надо про ТСР читать.
Соединение ТСР сокет - сокет, сокеты различаются по IP и номеру порта.
по конекту вызывается калбэк, с параметрами того кто конектится,
В установленное соединение сокет - сокет никто влезть не может.

у меня 3 сокета в проекте, на каждом свой тип данных.
Go to the top of the page
 
+Quote Post
smk
сообщение Dec 5 2013, 19:54
Сообщение #95


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Спасибо, что уделяетемне время!

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

Теперь про сокеты не соображу. Вот выполнилось условие if (SocketNumber != 0). Будет вызван tcp_listen. Я так понимаю оттуда будет вызван tcp_callback. У каждого клиента будет свой номер или как мне различить их?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 5 2013, 20:45
Сообщение #96


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



sm.gif
нет такого флага в вашем кейле и вашей библиотеке, значит его использовать нельзя.
это от 4.72, когда прошла смена стэка мне не ведомо, в 3.7 flow контроля не было по моим данным

Вам надо концептуально понять
Сокет - это розетка. Воткнули вилку - розетку заняли

SocketNumber - это идентификатор этой розетки.
если в него кто-то подсоединится он собой этот сокет займет. И все что сокет пошлет, будет для него, а все что он пошлет придет в этот сокет
если номер 0 - то значит сокет не сделался, для этого проверка, а если он сделался, то к нему подключается прослушка и калбэк функция

обратите внимание что в
uint16_t tcp_callback (uint8_t soc, uint8_t evt, uint8_t *buf, uint16_t len)

есть параметр soc - это как раз этот номер, то есть если вы сделаете много сокетов, то они будут вызывать калбэк функцию каждый со своим номером.


Go to the top of the page
 
+Quote Post
smk
сообщение Dec 22 2013, 10:24
Сообщение #97


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Dec 5 2013, 22:45) *
sm.gif
нет такого флага в вашем кейле и вашей библиотеке, значит его использовать нельзя.
это от 4.72, когда прошла смена стэка мне не ведомо, в 3.7 flow контроля не было по моим данным

Вам надо концептуально понять
Сокет - это розетка. Воткнули вилку - розетку заняли

SocketNumber - это идентификатор этой розетки.
если в него кто-то подсоединится он собой этот сокет займет. И все что сокет пошлет, будет для него, а все что он пошлет придет в этот сокет
если номер 0 - то значит сокет не сделался, для этого проверка, а если он сделался, то к нему подключается прослушка и калбэк функция

обратите внимание что в
uint16_t tcp_callback (uint8_t soc, uint8_t evt, uint8_t *buf, uint16_t len)

есть параметр soc - это как раз этот номер, то есть если вы сделаете много сокетов, то они будут вызывать калбэк функцию каждый со своим номером.


Появилось время продолжить.

Про сокет я понял. Только не соображу как все устроено. Если сокетов несколько, то как все изменится программно? SocketNumber я так понимаю переменная которую надо объявить? "есть параметр soc - это как раз этот номер" т.е. всякий раз когда вызвана tcp_callback используя soc можно узнать для какого сокета произошел вызов и соответственно обработать, так? Только вот не ясно. Скажем есть сокеты с номерами 1,2,3,4. Если сокет №2 освободился, то остальные так и останутся со своими номерами? "ставим на прослушку" имеется в виду, что нужно постоянно проверять значение SocketNumber?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Dec 22 2013, 12:01
Сообщение #98


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



С помощью терминальной программы: http://www.hw-group.com/products/hercules/index_en.html пробовал отсылать пару байт. В режиме TCP-Client соединение происходит и Wireshark показывает, что плата отвечает. Однако я никак не могу попасть в tcp_callback. Как правильно проверить связь? Порт задал 80.


На всякий случай выкладываю архив с проектом в последней эволюционной стадии, может делаю чего не так. Компилируется, пингуется.
Прикрепленный файл  ETH_keil.zip ( 684.06 килобайт ) Кол-во скачиваний: 55



--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Dec 22 2013, 12:21
Сообщение #99


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(smk @ Dec 22 2013, 15:01) *
Есть ли какая=то терминальная программа для ethernet? искал в сети, но что-то безрезультатно...


Netcat
PuTTY
Go to the top of the page
 
+Quote Post
smk
сообщение Dec 22 2013, 12:40
Сообщение #100


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(DmitryM @ Dec 22 2013, 14:21) *
PuTTY

Нашел, загрузил и запустил. Не пойму как услать пару байт...


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post

12 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 19:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.02821 секунд с 7
ELECTRONIX ©2004-2016