1.2.5.7.2 PIC32M MAC (ETHMAC) Configurations
ETHMAC Specific User Configurations
MAC Configuration file
MAC Default Configuration for Network Traffic:
- Default configuration settings for low/medium/high network traffic
- Default value: "Medium"
- Symbol TCPIP_EMAC_TRAFFIC
Number of Tx Descriptors to be created:
- Number of the TX descriptors to be created.
- Because a TCP packet can span at most 3 buffers, the value should always be >= 4
- The amount of memory needed per descriptor is not high (around 24 bytes) so when high MAC TX performance is needed make sure that this number is >= 8.
- Default value: 8
- Symbol TCPIP_EMAC_TX_DESCRIPTORS
Number of Rx Descriptors to be created:
- Number of the RX descriptors to be created.
- If not using the run time replenish mechanism (see below) it should match the number of dedicated buffers: TCPIP_EMAC_RX_DEDICATED_BUFFERS;
- Otherwise it should be bigger than the sum of dedicated + non-dedicated buffers:
- TCPIP_EMAC_RX_DESCRIPTORS > TCPIP_EMAC_RX_DEDICATED_BUFFERS + replenish_buffers
- Default value: 8
- Symbol TCPIP_EMAC_RX_DESCRIPTORS
Number of Dedicated MAC RX Buffers:
- Number of MAC dedicated RX packet buffers.
- These buffers are always owned by the MAC.
- Note that the MAC driver allocates these buffers for storing the incoming network packets.
- The bigger the storage capacity, the higher data throughput can be obtained.
- Note that these packet buffers are allocated from the private TCP/IP heap that is specified by the TCPIP_STACK_DRAM_SIZE setting.
- Default value: 4
- Symbol TCPIP_EMAC_RX_DEDICATED_BUFFERS
Number of Non_Dedicated RX Buffers:
- Number of non-dedicated buffers for the MAC initialization
- Buffers allocated at the MAC driver initialization.
- Default value: 0
- Symbol TCPIP_EMAC_RX_INIT_BUFFERS
Minimum Threshold for the Buffer Replenish Process:
- Minumum threshold for the buffer replenish process.
- Whenever the number of RX scheduled buffers is <= than this threshold the MAC driver will allocate new non-dedicated buffers (meaning that they will be released to the TCP/IP heap once they are processed).
- Setting this value to 0 disables the buffer replenishing process.
- Default value: 1
- Symbol TCPIP_EMAC_RX_LOW_THRESHOLD
Rx Buffer Allocate Count during Replenish Process:
- Number of RX buffers to allocate when below threshold condition is detected.
- If 0, the MAC driver will allocate (scheduled buffers - rxThres)
- If !0, the MAC driver will allocate exactly TCPIP_EMAC_RX_LOW_FILL buffers
- Default value: 2
- Symbol TCPIP_EMAC_RX_LOW_FILL
Size of a RX Buffer. Should Be Multiple of 16:
- Size of a RX packet buffer. Should be multiple of 16.
- This is the size of all receive packet buffers processed by the ETHC.
- The size should be enough to accommodate any network received packet.
- If the packets are larger, they will have to take multiple RX buffers and the packet manipulation is less efficient.
- Note: Together with TCPIP_EMAC_RX_DEDICATED_BUFFERS it has impact on TCPIP_STACK_DRAM_SIZE setting.
- Default value: 1536
- Symbol TCPIP_EMAC_RX_BUFF_SIZE
Ethernet RX Filters Selection:
- MAC RX Filters
- These filters define the packets that are accepted and rejected by the MAC driver
- Adjust to your needs
- The default value allows the processing of unicast, multicast and broadcast packets that have a valid CRC
- Default value: none
- Symbol TCPIP_EMAC_RX_FILTERS
Accept Broadcast Packets:
- Allow the receiving of broadcast packets
- Default value: true
- Symbol TCPIP_EMAC_ETH_FILTER_BCAST_ACCEPT, TCPIP_EMAC_RX_FILTERS
Accept Multicast Packets:
- Allow the receiving of multicast packets
- Default value: true
- Symbol TCPIP_EMAC_ETH_FILTER_MCAST_ACCEPT, TCPIP_EMAC_RX_FILTERS
Accept Unicast Packets:
- Allow the receiving of unicast packets
- Default value: true
- Symbol TCPIP_EMAC_ETH_FILTER_UCAST_ACCEPT, TCPIP_EMAC_RX_FILTERS
Accept Not Me Unicast Packets:
- Allow the receiving of not me unicast packets (promiscuous mode)
- Default value: true
- Symbol TCPIP_EMAC_ETH_FILTER_UCAST_OTHER_ACCEPT, TCPIP_EMAC_RX_FILTERS
Reject Runt Packets (< 64 bytes):
- Reject small (runt) packets
- Default value: true
- Symbol TCPIP_EMAC_ETH_FILTER_RUNT_REJECT, TCPIP_EMAC_RX_FILTERS
Accept Runt Packets (< 64 bytes):
- Accept small (runt) packets
- Default value: false
- Symbol TCPIP_EMAC_ETH_FILTER_RUNT_ACCEPT, TCPIP_EMAC_RX_FILTERS
Reject Packets with Wrong CRC:
- The MAC RX should reject packets with wrong CRC
- Default value: true
- Symbol TCPIP_EMAC_ETH_FILTER_CRC_ERROR_REJECT, TCPIP_EMAC_RX_FILTERS
Accept Packets with Wrong CRC:
- The MAC RX should Accept packets with wrong CRC
- Default value: false
- Symbol TCPIP_EMAC_ETH_FILTER_CRC_ERROR_ACCEPT, TCPIP_EMAC_RX_FILTERS
Use Auto Negotiation:
- Use auto-negotiation to select the link speed and duplex
- Default value: true
- Symbol TCPIP_EMAC_ETH_OF_AUTO_NEGOTIATION
Use Full Duplex:
- Use/Advertise full-duplex on the link
- Default value: true
- Symbol TCPIP_EMAC_ETH_OF_FULL_DUPLEX
Use Half Duplex:
- Use/Advertise half-duplex on the link
- Default value: true
- Symbol TCPIP_EMAC_ETH_OF_HALF_DUPLEX
Use 100MBps:
- Use/Advertise 100 Mbps on the link
- Default value: true
- Symbol TCPIP_EMAC_ETH_OF_100
Use 10MBps:
- Use/Advertise 10 Mbps on the link
- Default value: true
- Symbol TCPIP_EMAC_ETH_OF_10
Allow Huge Packets:
- Allow the transfer of huge/jumbo packets
- Default value: false
- Symbol TCPIP_EMAC_ETH_OF_HUGE_PKTS
Loopbacked At The MAC Level:
- Enable MAC loopback
- Default value: false
- Symbol TCPIP_EMAC_ETH_OF_MAC_LOOPBACK
Loopbacked At The PHY Level:
- Enable PHY loopback
- Default value: false
- Symbol TCPIP_EMAC_ETH_OF_PHY_LOOPBACK
Use Auto MDIX:
- Use Auto MDIX on the link
- Default value: true
- Symbol TCPIP_EMAC_ETH_OF_MDIX_AUTO
Use Swapped MDIX:
- Swap the MDIX wires
- Default value: false
- Symbol TCPIP_EMAC_ETH_OF_MDIX_SWAP
RMII Connection:
- Use RMII MAC <-> PHY connection (otherwise MII)
- Default value: true
- Symbol TCPIP_EMAC_ETH_OF_RMII
EMAC Module ID:
- The ID of the MAC module
- Default value: "_ETH_BASE_ADDRESS"
- Symbol TCPIP_EMAC_MODULE_ID
Enable Interrupt?:
- Enable the MAC/Ethernet Controller interrupt
- Default value: true
- Symbol INTERRUPT_ENABLE
Maximum Frame Size - Longer Frames Will Be Discarded:
- Maximum MAC supported RX/TX frame size.
- The default value is 1536 (allows for VLAN tagged frames, although the VLAN tagged frames are discarded on RX).
- On RX: any incoming ETH frame that is longer than this size will be discarded.
- On TX: any frame that is longer than this size will be aborted by the MAC.
- Normally there is no need to touch this value unless you know exactly the maximum size of the frames you want to process on your network.
- Notes:
- It can be used to control RX packets fragmentation (together with the TCPIP_EMAC_RX_BUFF_SIZE).
- Always multiple of 16.
- Default value: 1536
- Symbol TCPIP_EMAC_MAX_FRAME
Link Maximum Transmission Unit - (576 - 1500):
- Link Maximum Transmission Unit (MTU)
- This symbol defines the largest network protocol data unit that can be transmitted over this link in a single frame.
- It relates to the TCPIP_EMAC_MAX_FRAME value - see above.
- The default value for an Ethernet link should be 1500.
- The minimum value for an Eternet link should be 576.
- If need to change this, make sure that the
- TCPIP_EMAC_MAX_FRAME >= TCPIP_EMAC_LINK_MTU + 18
- where the value 18 represents the Ethernet frame header:
- 12 bytes - destination + source address
- 2 bytes - frame type
- 4 bytes - FCS
- Note: setting this value to 0, the maximum possible MTU will be used
- Default value: 1500
- Symbol TCPIP_EMAC_LINK_MTU
MAC Maximum Number of Supported RX Fragments:
- MAC maximum number of supported RX fragments.
- Based on the values of TCPIP_EMAC_MAX_FRAME and TCPIP_EMAC_RX_BUFF_SIZE an incoming frame may span multiple RX buffers (fragments).
- Note that excessive fragmentation leads to performance degradation.
- The default and recommended value should be 1.
- Alternatively you can use the calculation of the number of fragments based on the selected RX sizes:
- TCPIP_EMAC_RX_FRAGMENTS = ((TCPIP_EMAC_MAX_FRAME + (TCPIP_EMAC_RX_BUFF_SIZE -1 )) / (TCPIP_EMAC_RX_BUFF_SIZE))
- Default value: 1
- Symbol TCPIP_EMAC_RX_FRAGMENTS
Auto Flow Control Enable:
- Enable MAC Auto Flow Control
- This symbol enables/disables the auto flow control
- When in full-duplex mode and the auto flow control is enabled, the MAC will send pause frames whenever the number of pending RX packets reached the full watermark.
- Once this number drops to the empty watermark, a pause frame with pause value of 0 is transmitted, resuming the normal traffic
- Default value: true
- Symbol TCPIP_EMAC_AUTO_FLOW_CONTROL_ENABLE
Pause Time Value for the Auto Flow Control, bytes:
- This represents the number of bytes to request the pause for when the auto flow control kicks in.
- It is normally thought of in terms of RX packets: pauseBytes / rxBuffSize = pausePackets
- Using bytes instead of packets allows better granularity
- The value should be a multiple of 64 bytes
- The range is : 64 bytes <= TCPIP_EMAC_FLOW_CONTROL_PAUSE_BYTES <= (4 MB - 64) bytes (0x3fffc0)
- An usual value is 2 full packets. For example 2 * 1536 bytes
- Used only when flow control is enabled
- Default value: 3072
- Symbol TCPIP_EMAC_FLOW_CONTROL_PAUSE_BYTES
The Full Water Mark, in Number of Packets:
- An 8 bit value representing the full water mark, in number of packets
- When the number of pending received packets reaches this threshold the auto flow control kicks in
- A good rule to use for avoiding any packet overflow is to have enough receive room for at least 2 maximum packets, i.e.
- fullWMMark = (rxScheduledBuffers x rxBuffSize) / TCPIP_EMAC_MAX_FRAME - (2 x TCPIP_EMAC_MAX_FRAME ) / rxBuffSize;
- Always TCPIP_EMAC_FLOW_CONTROL_FULL_WMARK > TCPIP_EMAC_FLOW_CONTROL_EMPTY_WMARK
- Used only when auto flow control is enabled
- Adjust to your own value
- Default value should use the calculation of the watermark based on the selected RX sizes and buffers:
- TCPIP_EMAC_FLOW_CONTROL_FULL_WMARK = ((TCPIP_EMAC_RX_DEDICATED_BUFFERS * TCPIP_EMAC_RX_BUFF_SIZE) / TCPIP_EMAC_MAX_FRAME - (2 x TCPIP_EMAC_MAX_FRAME ) / TCPIP_EMAC_RX_BUFF_SIZE)
- Default value: 2
- Symbol TCPIP_EMAC_FLOW_CONTROL_FULL_WMARK
The Empty Water Mark, in Number of Packets:
- An 8 bit value representing the empty water mark, in number of packets
- When the auto flow control is active and the number of pending received packets falls reaching this threshold the auto flow control pause frames will stop
- Always TCPIP_EMAC_FLOW_CONTROL_FULL_WMARK > TCPIP_EMAC_FLOW_CONTROL_EMPTY_WMARK
- Used only when auto flow control is enabled
- Default value could be 0: resume normal traffic when there is no pending RX packet
- Default value: 0
- Symbol TCPIP_EMAC_FLOW_CONTROL_EMPTY_WMARK
External PHY Device:
- The external PHY connected to the MAC device
- Default value: ""
- Symbol DRV_INTMAC_PHY_TYPE
ETHMAC Heap Size (bytes):
- Estimation of the heap size taken by the MAC driver
- Default value: none
- Symbol DRV_ETHMAC_HEAP_SIZE