|
本帖最后由 chengying 于 2014-3-19 10:19 编辑
用stm32107+ip101gr,工程里边不定义ip101,可在金牛板上107+DP83848 跑起来,说明RMII配置是没问题,看101pdf,寄存器地址跟DP83848 寄存器地址刚好加1,函数uint32_t ETH_Init(ETH_InitTypeDef* ETH_InitStruct, uint16_t PHYAddress)
里边有我单步跟踪101寄存器的上电后默认值。比如Control Register 手册写地址是0,再调用函数时地址写1
例: test=ETH_ReadPHYRegister(PHYAddress,1); 读到的值是0x3100,与手册一致,
这样就得把
#define PHY_BCR 0 /*!< Tranceiver Basic Control Register */
#define PHY_BSR 1 /*!< Tranceiver Basic Status Register */
改为
#define PHY_BCR 1 /*!< Tranceiver Basic Control Register */
#define PHY_BSR 2 /*!< Tranceiver Basic Status Register */
现在问题是程序执行到函数uint32_t ETH_Init(ETH_InitTypeDef* ETH_InitStruct, uint16_t PHYAddress)里边的
if(ETH_InitStruct->ETH_AutoNegotiation != ETH_AutoNegotiation_Disable)
{
/* We wait for linked satus... */
do
{
timeout++;
} while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO));
/* Return ERROR in case of timeout */
if(timeout == PHY_READ_TO)
{
return ETH_ERROR;
}
就挂了,老是timeout! 谁帮我分析一下 附件一个是工程,一个是资料。
以前调试ip101af不需要怎么改,这次不知为何。硬件没问题。现在都是软件问题。
101grd的19也那个Page Control Register不知干什么用,唉看得晕死了 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|