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

Granadoespada

Участник
  • Постов

    28
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Granadoespada

  • Звание
    Участник
    Участник
  1. от PHY не приходил тактирующий сигнал на микроконтроллер, из за того что подтянули данный выход PHY к земле.
  2. Вроде заработало! передача осуществляется. Всем большое спасибо за помощь.
  3. Схему делал человек, который в этом разбирается. Он делал связку stm32f103 + KSZ8873. Взяли данное устройство и на том устройстве тактирующий сигнал от PHY приходит скорее всего причина в отсутсвии сигнала от PHY. Сейчас будем выяснять почему он не приходит. Всем большое спасибо за помощь. Как будет результат то сразу отпишусь.
  4. Частота в норме. Сигнал сброса буду проверять.
  5. PHY тактируется от по MCO от микроконтроллера HSE 25MHz
  6. А если PHY не делает 25 MHz?
  7. Если я правильно Вас понял то на микроконтроллере пин который отвечает за ETH_MII_RX_CLK(либо как вы говорили ETH_RMII_REF_CLK) должно приходить в моем случае 25МГц (в вашем 50 МГц). Если это так то у меня тактирующий сигнал не приходит. Что нужно сделать что бы он был?
  8. MII, и у меня сразу такой вопрос у меня пин PA1 отвечает за ETH_MII_RX_CLK как на него можно завести частоту 25 МГц? Схемы пока нет возможности предоставить
  9. Этот пин относиться к светодиоду он тут не причем.
  10. Вот также инициализация пинов void eth_gpio_config() { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOs clocks */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC, ENABLE); /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* Configure MCO (PA8) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA, GPIO_Pin_8); /* MII/RMII Media interface selection --------------------------------------*/ #ifdef MII_MODE /* Mode MII with STM322xG-EVAL */ /* Output HSE clock (25MHz) on MCO pin (PA8) to clock the PHY */ RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1); SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_MII); #elif defined RMII_MODE /* Mode RMII with STM322xG-EVAL */ SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII); #endif /* Ethernet pins configuration ************************************************/ /* ETH_MDIO -------------------------> PA2 ETH_MDC --------------------------> PC1 ETH_MII_CRS ----------------------> PA0 ETH_MII_COL ----------------------> PA3 ETH_MII_RX_ER --------------------> PB10 ETH_MII_RXD2 ---------------------> PC4 ETH_MII_RXD3 ---------------------> PC5 ETH_MII_TX_CLK -------------------> PC3 ETH_MII_TXD2 ---------------------> PC2 ETH_MII_TXD3 ---------------------> PB8 ETH_MII_RX_CLK/ETH_RMII_REF_CLK---> PA1 ETH_MII_RX_DV/ETH_RMII_CRS_DV ----> PA7 ETH_MII_RXD0/ETH_RMII_RXD0 -------> PC4 ETH_MII_RXD1/ETH_RMII_RXD1 -------> PC5 ETH_MII_TX_EN/ETH_RMII_TX_EN -----> PB11 ETH_MII_TXD0/ETH_RMII_TXD0 -------> PB12 ETH_MII_TXD1/ETH_RMII_TXD1 -------> PB13 */ /* Configure PA0, PA1, PA2, PA3 and PA7 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH); /* Configure PB0, PB1, PB8, PB10, PB11, PB12 and PB13 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB, GPIO_PinSource0, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOB, GPIO_PinSource1, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOB, GPIO_PinSource10,GPIO_AF_ETH); GPIO_PinAFConfig(GPIOB, GPIO_PinSource11,GPIO_AF_ETH); GPIO_PinAFConfig(GPIOB, GPIO_PinSource12,GPIO_AF_ETH); GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_ETH); /* Configure PC1, PC2, PC3, PC4 and PC5 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource2, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource3, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH); } перезагрузка идет MAC на сколько я понимаю. вот код @brief Resets all MAC subsystem internal registers and logic. * @param None * @retval None */ void ETH_SoftwareReset(void) { /* Set the SWR bit: resets all MAC subsystem internal registers and logic */ /* After reset all the registers holds their respective reset values */ ETH->DMABMR ^= ETH_DMABMR_SR; } /** * @brief Checks whether the ETHERNET software reset bit is set or not. * @param None * @retval The new state of DMA Bus Mode register SR bit (SET or RESET). */ FlagStatus ETH_GetSoftwareResetStatus(void) { FlagStatus bitstatus = RESET; if((ETH->DMABMR & ETH_DMABMR_SR) != (uint32_t)RESET) { GPIOB->ODR ^= GPIO_Pin_9; bitstatus = SET; for(int i = 0; i < 1000000; i++); } else { GPIOB->ODR ^= GPIO_Pin_9; bitstatus = RESET; } return bitstatus; }
  11. Просто я на сколько на данный момент понимаю, как у меня происходит на данный момент работа в моем проекте то получается: - Сначала идет инициализация GPIO на которых сидит Ethernet; - Потом идет инициализация eth_mac_dma, где происходит следующее: RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx | RCC_AHB1Periph_ETH_MAC_Rx, ENABLE); /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* MII/RMII Media interface selection --------------------------------------*/ SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_MII); RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1); /* Перзагрузка ETHERNET на шине AHB */ ETH_DeInit(); /* Программная перезагрузка */ ETH_SoftwareReset(); /* Ожидание программной перезагрузки */ while(ETH_GetSoftwareResetStatus() == SET); и вот на "ожидании программной перезагрузки" у меня и встает программа и крутиться в бесконечном цикле. Я на сколько понимаю у меня до работы с регистрами не доходит или я не правильно понимаю?
  12. извините за не корректный вопрос. Я имел ввиду а где это в программе может быть использоваться?
  13. а могли бы вы показать пример своей инициализации пинов?
×
×
  • Создать...