Using CELOADER v1.2.0 in many different places I sometimes noticed that the NK.BIN transfer would block during the exchange, the line of dots suddenly freezes.

This happens in very specific situations which seem to depend on network configuration, direct RJ45 link with the PC or specific HUB/Switch in the infrastructure. When the problem occurs, you must launch CELOADER many times to download the kernel to the board - sometimes it fails over and over again :-(

My interpretation is that one TFTP packet does not reach the target, or an ACK packet does not reach the host PC, remember UDP does not guarantee the delivery and you depend ont the lower layers for that (Ethernet is pretty good but it fails in some cases).

To overcome the problem I upgraded CELOADER to v1.3.0 so that its TFTP will resist packet failures. The solution was to use a non-blocking UDP socket and to re-send the faulty packet if no answer comes from EBOOT after a while. If a packet was re-sent, a '+' character will show up in the line of dots.

 

NOTE: From CELOADER v1.2.0, no other modification was made. As the new version consumes more CPU because it polls the UDP socket for TFTP ACK (using a Sleep() to avoid spinlock), I would recommend to use v1.2.0 and switch to v1.3.0 if you encounter transmission problems.