The MAC receiver checks incoming frames for a valid preamble, the frame check sequence (FCS), alignment, and length. The receiver then processes the RX frames and writes packets into the RX packet buffer with status that is to be read by the DMA controller. The MAC also stores the frames destination address for use by the address checking unit.
If the RX frame is too long, a bad frame indication is sent to the RXFIFO. The receiver logic ceases to send data to memory as soon as this condition occurs.
At end of frame reception, the MAC receiver indicates to the DMA controller whether the frame is good or bad. The DMA controller recovers the RX buffer if the frame is bad.
RX Ethernet frames are normally stored with the FCS. The Tx frames can be stored without their FCS by setting the Network_Config [fcs_remove] register bit = 1. The reported frame length field is reduced by four bytes to reflect this operation.
The MAC receiver updates the status registers:
- Increment the alignment
- CRC (FCS)
- Short frame, long frame
- Jabber or receive symbol errors when any of these exception conditions occur
If the Network_Config [ignore_rx_fcs] register bit is set = 1, then errors are ignored and frames with CRC errors are not discarded, though the frame check sequence errors statistic register is still incremented.
Bit [13] of the receiver descriptor word [1] is updated to indicate the FCS validity for the particular frame. This is useful for applications where individual frames with FCS errors must be identified.
Received frames can be checked for length field error by setting the Network_Config [length_field_error_frame_discard] = 1. In this case, the receiver compares a frame's measured length with the length field (bytes 13 and 14) extracted from the frame. The frame is discarded if the measured length is shorter. The RX frame length is checked for the range starting at 64 bytes. The upper limit depends on register bit settings. The upper range is:
- 1,518 bytes (normally)
- 1,536 bytes ( Network_Config [receive_1536_byte_frames] is set = 1)
- 10,240 bytes ( Network_Config [jumbo_frames] is set = 1)
Each discarded frame increments the 10-bit RxFrames_Oversize_Count [count] statistics register bit field.