Перейти к содержанию
    

STM32F107RB, ethernet не запускается.

Пытаюсь запустить 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 - включен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. На строчке
while (ETH_GetSoftwareResetStatus() == SET);

зависаем. Это - тупое ожидания снятия бита ETH_DMABMR_SR в регистре ETH->DMABMR.

Кажется, у меня такое было, когда снаружи не было подано тактирование на RMII CLOCK (или как там его). На днях при отладке новой платы повторилось, но не стал разбираться, так как было не актуально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...снаружи не было подано тактирование на RMII CLOCK (или как там его)...

 

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

и вроде как ещё была фишка - когда нет кабелюки и включен автодетектирование скорости...

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

и вроде как ещё была фишка - когда нет кабелюки и включен автодетектирование скорости...

 

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

 

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

 

Но второй вопрос - пока не снят.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2. Есть проблема с работой по MDC/MDIO (SMI - по наименованию st-шников). Т.е. MDC - четко выдает тактирование, а на MDIO - всегда единица (из-за подтяжки к питанию). Настроен так - как рекомендуют в Reference Manual: AF push-pull output - 50 Mhz.

Для передачи команды - используется функция из примера: ETH_WritePHYRegister.

Вроде и интерфейс банальный, и настройка элементарная - но никак не пойму в чем дело. Клок на GPIOA - включен.

Ни разу не замечал там подвоха. Если что, у меня так:

... 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 */
       }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2. Есть проблема с работой по MDC/MDIO (SMI - по наименованию st-шников). Т.е. MDC - четко выдает тактирование, а на MDIO - всегда единица (из-за подтяжки к питанию). Настроен так - как рекомендуют в Reference Manual: AF push-pull output - 50 Mhz.

Для передачи команды - используется функция из примера: ETH_WritePHYRegister.

Вроде и интерфейс банальный, и настройка элементарная - но никак не пойму в чем дело. Клок на GPIOA - включен.

pinmux-a там никакого не может быть с неверной настройкой?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

pinmux-a там никакого не может быть с неверной настройкой?

 

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

Выключил USART2 - и все стало нормально работать.

 

Теперь задался вопросом - можно ли как-то сделать так, чтобы работал и USART2 и MDIO. Но похоже, что нет. Не предусмотрено переключение между Alternate Functions.

Жаль, теперь только вручную дергать ножки SMI-интерфейса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь задался вопросом - можно ли как-то сделать так, чтобы работал и USART2 и MDIO. Но похоже, что нет. Не предусмотрено переключение между Alternate Functions.

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

 

Жаль, теперь только вручную дергать ножки SMI-интерфейса.

Это, конечно, можно, но как-то некрасиво.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В STM32F407 и новее нет проблем с рамипингом. Правда, и распределение ног по прежнему неудачное. Вся полнота функционала реализуется только в больших корпусах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

С McASP имхо проще - в нём обычно несколько сериализаторов. Я на один McASP умудрялся до 4-х микросхем навешивать и это всего занимало 4 сериализатора из 16-и.

И не нужно было два - всё на одном McASP сидело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С McASP имхо проще - в нём обычно несколько сериализаторов. Я на один McASP умудрялся до 4-х микросхем навешивать и это всего занимало 4 сериализатора из 16-и.

И не нужно было два - всё на одном McASP сидело.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...