I use uboot and add tftpboot command into it.But it doesn't work well, though it can transfer data, there are always some timeout during the whole transmission. Console shows like this
My ethernet topology is : board with uboot connect to my router, and my PC connect to router .and my tftp server is on my VM linux of my PC, and the VM is using bridge mode to connect to ethernet
Of course , i tried to connect my board directly to PC, but the problem stood still
I've modified the dm9000x.c line 433, change
tmo = get_timer(0) + 5 * CONFIG_SYS_HZ; //
into
tmo = get_timer(0) + 200; //timeout 200 miliiseconds
The translation time is now endurable. But it still many transmission timeout, the logs show below
dm9000 i/o: 0x88000000, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 1a:2a:3a:4a:5a:6a
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.0.15; our IP address is 192.168.0.12
Filename '/linux-3.14.24/fs/yaffs2/ubifs.img'.
Load address: 0x20000000
Loading: ################################################################transmission timeout
#
####transmission timeout
#############################################################
####################transmission timeout
##########transmission timeout
################transmission timeout
##################transmission timeout
#
#################################################################
#################################################################
#############################################################transmission timeout
####
#####################transmission timeout
######################transmission timeout
######################
#################################################################
###############################################################transmission timeout
##
##################################transmission timeout
#######transmission timeout
########################
#################################################################
#################################################################
#################################################################
###################transmission timeout
###################
61.5 KiB/s
done
Bytes transferred = 4515840 (44e800 hex)
4515840 bytes written to volume rootfs
I still don't know why, because it can actually transfer data. So is there any idea about this?
I've check my u-boot dm9000 driver and found this
When timeout occured,
this line shows that DM9000_ISR's second bit will never set to 1. I don't know why so i changed the codes like this
Now ,everthing is OK. But i'm still confused about why DM9000_ISR's second bit goes wrong. Is it a DM9000 hardware BUG?