Hi
1. Check that the buffer descriptor status values are all initialised to 0 when they are constructed during initialisation. This means that they are not owned by the Ethernet controller and can be used for new Tx frames.
2. Check how many such buffer descriptors are availabe - at least 2 should be used but often more are present.
3. The first usage of a tx buffer descriptor should work since they are all free (initialisation 1) but are the frames being sent out? If they are not they will fill up and then block further usage.
4. Check that the code includes erratas - the Tx can fail to start if the erratas are not respected. This is usually seen as delayed transmissions rather than blocking but could fail if only one buffer descriptor is used.
5. If the TX blocks with the ready bit set check the content of all of the buffer descriptors since they must all have blocked. In particular, check the length field set in the Tx buffer descriptors because if a length of 0 is set anywhere (which would be an error elsewhere) the Tx will never clear the buffer descriptor and they will effectively stall.
6. It may be best to have a short timeout in the wait loop, with an error return, since it is best to drop a transmission rather than lock up the board. This wait would normally be very short, even in heavily loaded networks.
Regards
Mark
Kinetis: µTasker Kinetis support
K64: µTasker Kinetis FRDM-K64F support / µTasker Kinetis TWR-K64F120M support / µTasker Kinetis TWR-K65F180M support
For the complete "out-of-the-box" Kinetis experience and faster time to market