На всякий случай, может кому пригодится сделал дамп регистров PHY с рабочей платы (это после автонегоциации и с подключенным кабелем, ETH_Speed_10M;) реф дизайн
Reg 0(0x0) 0x1000 (0001000000000000)
Reg 1(0x1) 0x786d (0111100001101101)
Reg 2(0x2) 0x2000 (0010000000000000)
Reg 3(0x3) 0x5c90 (0101110010010000)
Reg 4(0x4) 0x1e1 (0000000111100001)
Reg 5(0x5) 0x45e1 (0100010111100001)
Reg 6(0x6) 0x7 (0000000000000111)
Reg 7(0x7) 0x2801 (0010100000000001)
Reg 8(0x8) 0x0 (0000000000000000)
Reg 9(0x9) 0x0 (0000000000000000)
Reg 10(0xa) 0x0 (0000000000000000)
Reg 11(0xb) 0x0 (0000000000000000)
Reg 12(0xc) 0x0 (0000000000000000)
Reg 13(0xd) 0x0 (0000000000000000)
Reg 14(0xe) 0x0 (0000000000000000)
Reg 15(0xf) 0x0 (0000000000000000)
Reg 16(0x10) 0x615 (0000011000010101)
Reg 17(0x11) 0x0 (0000000000000000)
Reg 18(0x12) 0x2c00 (0010110000000000)
Reg 19(0x13) 0x0 (0000000000000000)
Reg 20(0x14) 0x0 (0000000000000000)
Reg 21(0x15) 0x0 (0000000000000000)
Reg 22(0x16) 0x100 (0000000100000000)
Reg 23(0x17) 0x21 (0000000000100001)
Reg 24(0x18) 0x0 (0000000000000000)
Reg 25(0x19) 0x8021 (1000000000100001)
Reg 26(0x1a) 0x904 (0000100100000100)
Reg 27(0x1b) 0x0 (0000000000000000)
Reg 28(0x1c) 0x0 (0000000000000000)
Reg 29(0x1d) 0x6011 (0110000000010001)
Reg 30(0x1e) 0x83e (0000100000111110)
Reg 31(0x1f) 0x0 (0000000000000000)
static void ETH_MACDMA_Config(void)
{
ETH_InitTypeDef ETH_InitStructure;
/* Enable ETHERNET clock */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx |
RCC_AHB1Periph_ETH_MAC_Rx, ENABLE);
/* Reset ETHERNET on AHB Bus */
ETH_DeInit();
/* Software reset */
ETH_SoftwareReset();
/* Wait for software reset */
while (ETH_GetSoftwareResetStatus() == SET);
/* ETHERNET Configuration --------------------------------------------------*/
/* Call ETH_StructInit if you don't like to configure all ETH_InitStructure parameter */
ETH_StructInit(Ð_InitStructure);
/* Fill ETH_InitStructure parametrs */
/*------------------------ MAC -----------------------------------*/
ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
// ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable;
ETH_InitStructure.ETH_Speed = ETH_Speed_10M;
ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;
ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable;
ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable;
ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable;
ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Disable;
ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable;
ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;
ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;
ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;
#ifdef CHECKSUM_BY_HARDWARE
ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable;
#endif
/*------------------------ DMA -----------------------------------*/
/* When we use the Checksum offload feature, we need to enable the Store and Forward mode:
the store and forward guarantee that a whole frame is stored in the FIFO, so the MAC can insert/verify the checksum,
if the checksum is OK the DMA can handle the frame otherwise the frame is dropped */
ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable;
ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;
ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;
ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;
ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;
ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable;
ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;
/* Configure Ethernet */
ETH_Init(Ð_InitStructure, DP83848_PHY_ADDRESS);
/* Enable the Ethernet Rx Interrupt */
ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R, ENABLE);
}