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

 
 
 
Reply to this topicStart new topic
> STM32F107RB, ethernet не запускается., Какая-то мистика.
Atridies
сообщение Jun 24 2014, 19:13
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 445
Регистрация: 7-02-05
Из: Зеленоград
Пользователь №: 2 468



Пытаюсь запустить ethernet на обозначенном микроконтроллере. Взял из примера (LwIP c http-сервером) кусок, отвечающий за Ethernet, интегрировал его в свою программу и .... ничего не работает.

Доковырялся до следующего:
1. На строчке
Код
while (ETH_GetSoftwareResetStatus() == SET);
зависаем. Это - тупое ожидания снятия бита ETH_DMABMR_SR в регистре ETH->DMABMR.
Причем совсем иногда (не заметил коррелляции с чем-либо) перестает подвисать. Потом опять начинает. Видел на форумах замечания об этом, но не нашел решения.

2. Есть проблема с работой по MDC/MDIO (SMI - по наименованию st-шников). Т.е. MDC - четко выдает тактирование, а на MDIO - всегда единица (из-за подтяжки к питанию). Настроен так - как рекомендуют в Reference Manual: AF push-pull output - 50 Mhz.
Для передачи команды - используется функция из примера: ETH_WritePHYRegister.
Вроде и интерфейс банальный, и настройка элементарная - но никак не пойму в чем дело. Клок на GPIOA - включен.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 24 2014, 19:46
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Atridies @ Jun 24 2014, 23:13) *
1. На строчке
Код
while (ETH_GetSoftwareResetStatus() == SET);
зависаем. Это - тупое ожидания снятия бита ETH_DMABMR_SR в регистре ETH->DMABMR.

Кажется, у меня такое было, когда снаружи не было подано тактирование на RMII CLOCK (или как там его). На днях при отладке новой платы повторилось, но не стал разбираться, так как было не актуально.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jun 24 2014, 20:15
Сообщение #3


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(scifi @ Jun 24 2014, 23:46) *
...снаружи не было подано тактирование на RMII CLOCK (или как там его)...


угумс. банальный не пропай. обычно резонаторы, теплоёмкость выше - немного прогреть побольше на пол, секунду.
и вроде как ещё была фишка - когда нет кабелюки и включен автодетектирование скорости...

попробуйте воткнуть кабель, и коснуться резонатора. обычно сразу видно - что пошёл...светодиодики активируются и код дальше бежит...
Go to the top of the page
 
+Quote Post
Atridies
сообщение Jun 24 2014, 20:37
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 445
Регистрация: 7-02-05
Из: Зеленоград
Пользователь №: 2 468



Цитата(kolobok0 @ Jun 24 2014, 23:15) *
угумс. банальный не пропай. обычно резонаторы, теплоёмкость выше - немного прогреть побольше на пол, секунду.
и вроде как ещё была фишка - когда нет кабелюки и включен автодетектирование скорости...

попробуйте воткнуть кабель, и коснуться резонатора. обычно сразу видно - что пошёл...светодиодики активируются и код дальше бежит...


Да, спасибо, эта проблема решилась ! Действительно: при отсутствии клока на REF_CLK - сброс не снимается.

Но второй вопрос - пока не снят.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 24 2014, 21:11
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Atridies @ Jun 24 2014, 23:13) *
2. Есть проблема с работой по MDC/MDIO (SMI - по наименованию st-шников). Т.е. MDC - четко выдает тактирование, а на MDIO - всегда единица (из-за подтяжки к питанию). Настроен так - как рекомендуют в Reference Manual: AF push-pull output - 50 Mhz.
Для передачи команды - используется функция из примера: ETH_WritePHYRegister.
Вроде и интерфейс банальный, и настройка элементарная - но никак не пойму в чем дело. Клок на GPIOA - включен.

Ни разу не замечал там подвоха. Если что, у меня так:
CODE
... init()
{
...
/* enable clocking of ports A, B, C, AFIO */
RCC_APB2ENR |= (1 << 4) /* IOPCEN */
| (1 << 3) /* IOPBEN */
| (1 << 2) /* IOPAEN */
| (1 << 0);/* AFIOEN */
AFIO_MAPR |= (1 << 23); /* select RMII mode */
/* enable clocking of MAC core */
RCC_AHBENR |= (1 << 16) /* ETHMACRXEN */
| (1 << 15) /* ETHMACTXEN */
| (1 << 14);/* ETHMACEN */
/* enable MDIO */
GPIOA_CRL = (GPIOA_CRL & 0xFFFFF0FF) | 0x00000E00; /* PA2=AF OD 2 MHz */
/* enable MDC */
GPIOC_CRL = (GPIOC_CRL & 0xFFFFFF0F) | 0x000000A0; /* PC1=AF P-P 2 MHz */
...
}

static bool
smi_busy(void)
{
return !!REGBIT(ETH_MACMIIAR, 0);
}

static void
smi_write(int reg, int val)
{
ETH_MACMIIDR = val;
ETH_MACMIIAR = (reg << 6) | SMI_TMPL | 3;
while (smi_busy())
{
/* wait */
}
}

static void
smi_start_read(int reg)
{
ETH_MACMIIAR = (reg << 6) | SMI_TMPL | 1;
}

static int
smi_read_data(void)
{
return ETH_MACMIIDR;
}

static void
phy_init(void)
{
/* dummy read: the first read gets garbled for some reason */
smi_start_read(0);
while (smi_busy())
{
/* wait */
}
}
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 24 2014, 21:14
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Atridies @ Jun 24 2014, 22:13) *
2. Есть проблема с работой по MDC/MDIO (SMI - по наименованию st-шников). Т.е. MDC - четко выдает тактирование, а на MDIO - всегда единица (из-за подтяжки к питанию). Настроен так - как рекомендуют в Reference Manual: AF push-pull output - 50 Mhz.
Для передачи команды - используется функция из примера: ETH_WritePHYRegister.
Вроде и интерфейс банальный, и настройка элементарная - но никак не пойму в чем дело. Клок на GPIOA - включен.

pinmux-a там никакого не может быть с неверной настройкой?
Go to the top of the page
 
+Quote Post
Atridies
сообщение Jun 25 2014, 13:56
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 445
Регистрация: 7-02-05
Из: Зеленоград
Пользователь №: 2 468



Цитата(doom13 @ Jun 25 2014, 01:14) *
pinmux-a там никакого не может быть с неверной настройкой?


Да, дело оказалось в этом. Я хотел использовать USART2_RX, а USART2_TX - как раз приходится на ту же ножку, что и MDIO (PA2, ножка 16).
Выключил USART2 - и все стало нормально работать.

Теперь задался вопросом - можно ли как-то сделать так, чтобы работал и USART2 и MDIO. Но похоже, что нет. Не предусмотрено переключение между Alternate Functions.
Жаль, теперь только вручную дергать ножки SMI-интерфейса.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 25 2014, 20:34
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Atridies @ Jun 25 2014, 16:56) *
Теперь задался вопросом - можно ли как-то сделать так, чтобы работал и USART2 и MDIO. Но похоже, что нет. Не предусмотрено переключение между Alternate Functions.

Да, есть такая штука. Заявлено, что у процессора есть и та и другая периферия, а использовать одновременно и то и другое нет возможности. Столкнулся с этим, выбирал ARM от TI c 3 модулями McASP (EMAC и MMC/SD по возможности) и корпусе с минимальным количеством ног, чтоб плата по-проще получалась. Думал брать AM1705/AM1707, у них как раз по три модуля McASP. Так оказалось используют одни и те же ноги и заюзать все три невозможно.

Цитата(Atridies @ Jun 25 2014, 16:56) *
Жаль, теперь только вручную дергать ножки SMI-интерфейса.

Это, конечно, можно, но как-то некрасиво.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 26 2014, 05:00
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



В STM32F407 и новее нет проблем с рамипингом. Правда, и распределение ног по прежнему неудачное. Вся полнота функционала реализуется только в больших корпусах.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 26 2014, 05:58
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(doom13 @ Jun 26 2014, 02:34) *
Да, есть такая штука. Заявлено, что у процессора есть и та и другая периферия, а использовать одновременно и то и другое нет возможности. Столкнулся с этим, выбирал ARM от TI c 3 модулями McASP (EMAC и MMC/SD по возможности) и корпусе с минимальным количеством ног, чтоб плата по-проще получалась. Думал брать AM1705/AM1707, у них как раз по три модуля McASP. Так оказалось используют одни и те же ноги и заюзать все три невозможно.

С McASP имхо проще - в нём обычно несколько сериализаторов. Я на один McASP умудрялся до 4-х микросхем навешивать и это всего занимало 4 сериализатора из 16-и.
И не нужно было два - всё на одном McASP сидело.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 26 2014, 06:42
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(jcxz @ Jun 26 2014, 08:58) *
С McASP имхо проще - в нём обычно несколько сериализаторов. Я на один McASP умудрялся до 4-х микросхем навешивать и это всего занимало 4 сериализатора из 16-и.
И не нужно было два - всё на одном McASP сидело.

Это так (если всё синхронно и один клок на все Ваши 4 канала), но мне необходимо было, чтоб каждый из модулей был независим от остальных, т.е. главное устройство внешнее (соответственно их три и, вероятно, они несинхронны) и оно задаёт клоки для McASP. Немного подзабыл, но, как помню, такой вариант там не прокатывал, что-то использовало одни и те же ноги, пришлось выбирать другое решение.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:17
Рейтинг@Mail.ru


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