Atridies 0 24 июня, 2014 Опубликовано 24 июня, 2014 · Жалоба Пытаюсь запустить 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 - включен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 24 июня, 2014 Опубликовано 24 июня, 2014 · Жалоба 1. На строчке while (ETH_GetSoftwareResetStatus() == SET); зависаем. Это - тупое ожидания снятия бита ETH_DMABMR_SR в регистре ETH->DMABMR. Кажется, у меня такое было, когда снаружи не было подано тактирование на RMII CLOCK (или как там его). На днях при отладке новой платы повторилось, но не стал разбираться, так как было не актуально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 24 июня, 2014 Опубликовано 24 июня, 2014 · Жалоба ...снаружи не было подано тактирование на RMII CLOCK (или как там его)... угумс. банальный не пропай. обычно резонаторы, теплоёмкость выше - немного прогреть побольше на пол, секунду. и вроде как ещё была фишка - когда нет кабелюки и включен автодетектирование скорости... попробуйте воткнуть кабель, и коснуться резонатора. обычно сразу видно - что пошёл...светодиодики активируются и код дальше бежит... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Atridies 0 24 июня, 2014 Опубликовано 24 июня, 2014 · Жалоба угумс. банальный не пропай. обычно резонаторы, теплоёмкость выше - немного прогреть побольше на пол, секунду. и вроде как ещё была фишка - когда нет кабелюки и включен автодетектирование скорости... попробуйте воткнуть кабель, и коснуться резонатора. обычно сразу видно - что пошёл...светодиодики активируются и код дальше бежит... Да, спасибо, эта проблема решилась ! Действительно: при отсутствии клока на REF_CLK - сброс не снимается. Но второй вопрос - пока не снят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 24 июня, 2014 Опубликовано 24 июня, 2014 · Жалоба 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 */ } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 24 июня, 2014 Опубликовано 24 июня, 2014 · Жалоба 2. Есть проблема с работой по MDC/MDIO (SMI - по наименованию st-шников). Т.е. MDC - четко выдает тактирование, а на MDIO - всегда единица (из-за подтяжки к питанию). Настроен так - как рекомендуют в Reference Manual: AF push-pull output - 50 Mhz. Для передачи команды - используется функция из примера: ETH_WritePHYRegister. Вроде и интерфейс банальный, и настройка элементарная - но никак не пойму в чем дело. Клок на GPIOA - включен. pinmux-a там никакого не может быть с неверной настройкой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Atridies 0 25 июня, 2014 Опубликовано 25 июня, 2014 · Жалоба pinmux-a там никакого не может быть с неверной настройкой? Да, дело оказалось в этом. Я хотел использовать USART2_RX, а USART2_TX - как раз приходится на ту же ножку, что и MDIO (PA2, ножка 16). Выключил USART2 - и все стало нормально работать. Теперь задался вопросом - можно ли как-то сделать так, чтобы работал и USART2 и MDIO. Но похоже, что нет. Не предусмотрено переключение между Alternate Functions. Жаль, теперь только вручную дергать ножки SMI-интерфейса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 25 июня, 2014 Опубликовано 25 июня, 2014 · Жалоба Теперь задался вопросом - можно ли как-то сделать так, чтобы работал и USART2 и MDIO. Но похоже, что нет. Не предусмотрено переключение между Alternate Functions. Да, есть такая штука. Заявлено, что у процессора есть и та и другая периферия, а использовать одновременно и то и другое нет возможности. Столкнулся с этим, выбирал ARM от TI c 3 модулями McASP (EMAC и MMC/SD по возможности) и корпусе с минимальным количеством ног, чтоб плата по-проще получалась. Думал брать AM1705/AM1707, у них как раз по три модуля McASP. Так оказалось используют одни и те же ноги и заюзать все три невозможно. Жаль, теперь только вручную дергать ножки SMI-интерфейса. Это, конечно, можно, но как-то некрасиво. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 26 июня, 2014 Опубликовано 26 июня, 2014 · Жалоба В STM32F407 и новее нет проблем с рамипингом. Правда, и распределение ног по прежнему неудачное. Вся полнота функционала реализуется только в больших корпусах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 26 июня, 2014 Опубликовано 26 июня, 2014 · Жалоба Да, есть такая штука. Заявлено, что у процессора есть и та и другая периферия, а использовать одновременно и то и другое нет возможности. Столкнулся с этим, выбирал ARM от TI c 3 модулями McASP (EMAC и MMC/SD по возможности) и корпусе с минимальным количеством ног, чтоб плата по-проще получалась. Думал брать AM1705/AM1707, у них как раз по три модуля McASP. Так оказалось используют одни и те же ноги и заюзать все три невозможно. С McASP имхо проще - в нём обычно несколько сериализаторов. Я на один McASP умудрялся до 4-х микросхем навешивать и это всего занимало 4 сериализатора из 16-и. И не нужно было два - всё на одном McASP сидело. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 26 июня, 2014 Опубликовано 26 июня, 2014 · Жалоба С McASP имхо проще - в нём обычно несколько сериализаторов. Я на один McASP умудрялся до 4-х микросхем навешивать и это всего занимало 4 сериализатора из 16-и. И не нужно было два - всё на одном McASP сидело. Это так (если всё синхронно и один клок на все Ваши 4 канала), но мне необходимо было, чтоб каждый из модулей был независим от остальных, т.е. главное устройство внешнее (соответственно их три и, вероятно, они несинхронны) и оно задаёт клоки для McASP. Немного подзабыл, но, как помню, такой вариант там не прокатывал, что-то использовало одни и те же ноги, пришлось выбирать другое решение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться