1、首先怀疑复位电路出现问题,即由于电容容值小(10nF)导致复位时间不够。分别将复位电容更改为100nF、10uF,问题仍然存在。期间用示波器测量了3.3V电源和复位引脚,并查看XMC4500手册,100nF复位时间足够。
2、怀疑晶振没有起振,即复位结束后晶振才起振正常工作。同样用示波器观察3.3V电源、复位引脚、晶振输出,抓取上电时三者波形,发现有源晶振正常启动。
3、查看XMC4500的boot模式设置引脚,Normal模式TMS上拉,TCK下拉。核对电路,发现TCK没有下拉,于是加上下拉电阻5.1K。结果反而导致程序下载不成功。
结合自己的实际测试,下载接口TCK悬空,TMS接上拉电阻,程序下载运行正常。
4、在网上查找资料,发现有人说是因为外设上电后初始化需要时间。于是尝试在进入main()函数后立即加延时,发现程序可以正常运行了。 然后结合自己的电路板分析,板子上有外设DP83848,上电后XMC4500很快进入工作状态对其进行初始化,但是此时DP83848还处在自己的上电初始化状态,导致XMC4500初始化不成功,造成整个程序运行不正常。
查看DP83848手册,其自身上电稳定需要167ms的时间,因此进入main函数后立即加延时大约200ms,程序运行正常。
由RX0-RX3和CSR这几个脚组成PHYADDR0-4
芯片复位时,会锁存这5个脚的电平,作为芯片地址,以后就找这个作访问了。
所以,如果你是悬空的话,认为是0,一定要接1才认为是1.
DP83848的地址由PHYAD[4:0](总共是32个地址)决定,具体怎么决定请看芯片手册。当对PHY进行读 *** 作发现读出的值都是0xffff时,如果硬件没问题,那就可以看一下是不是PHY的地址弄错了。一个简单的办法就是对0-31地址进行轮训,看哪个地址能读出正确的值。
Table 6-5 PHY Address Mapping
PIN # PHYAD FUNCTION RXD FUNCTION
35 PHYAD0 COL
36 PHYAD1 RXD_0
37 PHYAD2 RXD_1
38 PHYAD3 RXD_2
39 PHYAD4 RXD_3
The DP83848x can be set to respond to any of 32 possible PHY addresses through strap pins. The information is latched into the PHYCR register (address 19h, bits [4:0]) at device power up and hardware reset. The PHY Address pins are shared with the RXD and COL pins. Each DP83848x or port sharing an MDIO bus in a system must have a unique physical address.
来源:
http://www.ti.com.cn/product/cn/DP83848T/datasheet/detailed_description.html
http://blog.sina.com.cn/s/blog_64e5f47b0101fa8b.html
http://www.amobbs.com/thread-5149652-1-1.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)