[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

boot loader problems and full duplex ethernet on Broadcom 5221

I am having some problems with the boot loader, etrax100boot, and our own board design. It's modeled after the current development board but uses the Broadcom BCM5221 chip rather than the BCM 5201. Apparently Broadcom is telling new/current designs to use the 5221 rather than the 5201. It's unclear to me what the differences are since I can't seem to get the datasheet from the Broadcom website at this time :-( but I understand the pins/registers are slightly different (???)
Anyway, everything sort of works except that I run into the following problem which I wonder if anyone else has seen. I put the board into boot mode and run flashit and this will randomly fail at different points in the file download procedure. After some investigation with ethereal and turning up the debug level in the extra100boot code I was finally able to determine that while dev board was sending an ACK for all the packets it received, the server bootload code was somehow missing the ACK. As a result the client code on the board was looking for the next packet while the server continues to blindly send out the previous packet every 12 seconds (timeout) which is never ACK'ed because the client has a check in handle_network_read() in net_init.c that checks to see that the received seq number is the one we are expecting and it ignore it if not (presumably to verify that the packet was for us). Of course, since the server has missed the ACK it's resending the previous packet and now the sequence numbers between the client and server are out of sync never to recover....
Further investigation turned up the following interesting piece of information: I was connecting the devices through a 100 Mbs Netgear switch. As a result, the BCM5221 would automatically negotiate a 100 Mbs FULL-DUPLEX connection. Thinking this might be part of the problem I replaced the Netgear switch with a Netgear 100 Mbs hub which does NOT support full-duplex mode operation (and I can confirm this because the BCM has a LED driver for full/half-duplex which does indeed change when I plug into hub/switch). When I use the hub and half-duplex mode the bootloader code works fine and I never see any failures. This is the ONLY thing I change between having it work and failure. 
My question is why full-duplex operation would cause the bootload problems I am seeing and what I can do about it? I did put in a change in the client bootload so it could recover but that seems like a bit of a hack and not addressing the root problem which is the server missing the ACK in the first place. Does the Broadcom BCM5201 on the devboardLX support full-duplex operation and is this autonegotiated like the BMC 5221 does?  I would like to configure the board for half-duplex operation but the documentation on how to use the MII interface seems a bit lacking. Section 9 of the Designer's Ref. Manual for the network interface says for more detailed information on the Internal Registers to control the network interface to consult chapter 19 however there is NOTHING in chapter 19 about the network registers that I could find. Could someone send me this information?
Sorry for the long message hopefully it has enough detail to explain the problem.
David Kilp 
Cross Match Technologies, Inc.
3960 RCA Boulevard, Suite 6001
Palm Beach Gardens, Florida 33410
Phone: 561-622-1650
Fax: 561-622-9938