Atmel Evaluation Kit AT91SAM9X25-EK AT91SAM9X25-EK Data Sheet

Product codes
AT91SAM9X25-EK
Page of 1151
1028
SAM9X25 [DATASHEET]
11054E–ATARM–10-Mar-2014
If bit zero is set when the receive buffer manager reads the location of the receive buffer and a frame is being received, 
the frame is discarded and the receive resource error statistics register is incremented.
A receive overrun condition occurs when bus was not granted in time or because HRESP was not OK (bus error). In a 
receive overrun condition, the receive overrun interrupt is asserted and the buffer currently being written is recovered. 
The next frame received with an address that is recognized reuses the buffer. 
If bit 17 of the network configuration register is set, the FCS of received frames shall not be copied to memory. The frame 
length indicated in the receive status field shall be reduced by four bytes in this case.
45.4.2.3  Transmit Buffer
Frames to be transmitted are stored in one or more transmit buffers. Transmit buffers can be between 0 and 2047 bytes 
long, so it is possible to transmit frames longer than the maximum length specified in IEEE Standard 802.3. Zero length 
buffers are allowed. The maximum number of buffers permitted for each transmit frame is 128. 
The start location for each transmit buffer is stored in memory in a list of transmit buffer descriptors at a location pointed 
to by the transmit buffer queue pointer register. Each list entry consists of two words, the first being the byte address of 
the transmit buffer and the second containing the transmit control and status. Frames can be transmitted with or without 
automatic CRC generation. If CRC is automatically generated, pad is also automatically generated to take frames to a 
minimum length of 64 bytes. 
 defines an entry in the transmit buffer descriptor list. To transmit 
frames, the buffer descriptors must be initialized by writing an appropriate byte address to bits 31 to 0 in the first word of 
each list entry. The second transmit buffer descriptor is initialized with control information that indicates the length of the 
buffer, whether or not it is to be transmitted with CRC and whether the buffer is the last buffer in the frame.
After transmission, the control bits are written back to the second word of the first buffer along with the “used” bit and 
other status information. Bit 31 is the “used” bit which must be zero when the control word is read if transmission is to 
happen. It is written to one when a frame has been transmitted. Bits 27, 28 and 29 indicate various transmit error 
conditions. Bit 30 is the “wrap” bit which can be set for any buffer within a frame. If no wrap bit is encountered after 1024 
descriptors, the queue pointer rolls over to the start in a similar fashion to the receive queue. 
The transmit buffer queue pointer register must not be written while transmit is active. If a new value is written to the 
transmit buffer queue pointer register, the queue pointer resets itself to point to the beginning of the new queue. If 
transmit is disabled by writing to bit 3 of the network control, the transmit buffer queue pointer register resets to point to 
the beginning of the transmit queue. Note that disabling receive does not have the same effect on the receive queue 
pointer.
Once the transmit queue is initialized, transmit is activated by writing to bit 9, the Transmit Start bit of the network control 
register. Transmit is halted when a buffer descriptor with its used bit set is read, or if a transmit error occurs, or by writing 
to the transmit halt bit of the network control register. (Transmission is suspended if a pause frame is received while the 
pause enable bit is set in the network configuration register.) Rewriting the start bit while transmission is active is allowed.
Transmission control is implemented with a Tx_go variable which is readable in the transmit status register at bit 
location 3. The Tx_go variable is reset when:
Transmit is disabled
A buffer descriptor with its ownership bit set is read
A new value is written to the transmit buffer queue pointer register
Bit 10, tx_halt, of the network control register is written
There is a transmit error such as too many retries or a transmit underrun.
To set tx_go, write to bit 9, tx_start, of the network control register. Transmit halt does not take effect until any ongoing 
transmit finishes. If a collision occurs during transmission of a multi-buffer frame, transmission automatically restarts from 
the first buffer of the frame. If a “used” bit is read midway through transmission of a multi-buffer frame, this is treated as a 
transmit error. Transmission stops, tx_er is asserted and the FCS is bad. 
If transmission stops due to a transmit error, the transmit queue pointer resets to point to the beginning of the transmit 
queue. Software needs to re-initialize the transmit queue after a transmit error.