现象描述:
在STM32F7/H7系列编写PHY芯片驱动,读取寄存器得知PHY已经处于LINK UP状态,确认网口电路没问题的情况下,电脑ping不通单片机,调试模式下观察DMARxDscrTab内容没有变化。
解决方案:
使能ICache和DCache,打开MPU,将PHY DMA所用内存如下配置:
void MPU_Config(void)
{
MPU_Region_InitTypeDef MPU_InitStruct;
/* Disable the MPU */
HAL_MPU_Disable();
/* Configure the MPU attributes as Device not cacheable
for ETH DMA descriptors */
MPU_InitStruct.Enable=MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress=0x30000000; //ETH DMA描述符基地址
MPU_InitStruct.Size=MPU_REGION_SIZE_16KB; //ETH DMA描述符占用内存大小
MPU_InitStruct.AccessPermission=MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable=MPU_ACCESS_BUFFERABLE;
MPU_InitStruct.IsCacheable=MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsShareable=MPU_ACCESS_SHAREABLE;
MPU_InitStruct.Number=MPU_REGION_NUMBER5;
MPU_InitStruct.TypeExtField=MPU_TEX_LEVEL0;
MPU_InitStruct.SubRegionDisable=0x00;
MPU_InitStruct.DisableExec=MPU_INSTRUCTION_ACCESS_ENABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}
PHY即可正常工作