dm9000 not found at 0x88000000 id: 0x00000000
從錯誤信息來分析。id號打印出來是錯誤的。
先定位錯誤文件:
root@xjg:/home/xjg/u-boot-2012.10# grep -r "ERROR: resetting DM9000"
drivers/net/dm9000x.c: printf("ERROR: resetting DM9000 -> not responding\n");
發現一開始reset函數就錯誤發生。說明是前面的步驟有問題。
我檢查了下你的lowlevel_init.S文件,發現時鍾初始化有問題。
終於定位是在以下這句 凝視了就能夠。
210 /* CLK_IP1 */
211 /* ldr r1, =0xe9fdf0f9 @ FIMD[0] USBOTG[16]
212 @ NANDXL[24]
213 str r1, [r0, #0x464] @ S5PC110_CLK_IP1
214 */
以下看看這一步為什么不正確?
S5PV210 can disable the clock operation of each IP if it is not required。
//看這樣子像是屏蔽時鍾的寄存器
改動成以下這個樣子就能夠了。說明這個寄存器的第26位(SROM時鍾)是不能屏蔽的。
210 /* CLK_IP1 */
211 ldr r1, =0xeDfdf0f9 @ FIMD[0] USBOTG[16]
212 @ NANDXL[24]
213 str r1, [r0, #0x464] @ S5PC110_CLK_IP1
214
為什么和SROM時鍾相關呢?從原理圖上能夠知道dm9000是使用的自己的時鍾源,dm9000芯片外接了一個25MHz的晶振。
感謝物聯網大講堂朱老師的指導:
210用srom接口來和網卡通信。還記得dm9000是怎么接到210上面的嗎?csn1片選信號。
就是說dm9000是接在210的SROM bank1上面的。這就能夠解釋為什么SROM時鍾不能關閉了。。。。
