CMSIS-Driver  Version 2.8.0
Peripheral Interface for Middleware and Application Code
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Ethernet Interface

Ethernet common definitions (Driver_ETH.h) More...


 Media Interface Types
 Ethernet Media Interface type.
 Ethernet MAC Interface
 Driver API for Ethernet MAC Peripheral (Driver_ETH_MAC.h)
 Ethernet PHY Interface
 Driver API for Ethernet PHY Peripheral (Driver_ETH_PHY.h)

Data Structures

 Ethernet MAC Address. More...


 Ethernet link state. More...


Ethernet common definitions (Driver_ETH.h)

Ethernet is a networking technology for exchanging data packages between computer systems. Several microcontrollers integrate an Ethernet MAC (Media Access Control) data-link layer that interfaces to an Ethernet PHY (Physical Interface Transceiver).

Wikipedia offers more information about the Ethernet.

Block Diagram

The Ethernet PHY connects typically to the Ethernet MAC using an MII (Media Independent Interface) or RMII (Reduced Media Independent Interface).

Block Diagram of a typical Ethernet Interface

Ethernet API

The following header files define the Application Programming Interface (API) for the Ethernet interface:

The driver implementation of the Ethernet MAC is a typical part of a Device Family Pack (DFP) that supports the peripherals of the microcontroller family. The driver implementation of the Ethernet PHY is a typical part of a Network Software Pack, since PHY is typically not integrated into the microcontroller.

For parameters, the value marked with (default) is the setting after the driver initialization.

Driver Functions

The driver functions are published in the access struct as explained in Common Driver Functions

Both drivers are used in combination and usually the Ethernet MAC provides a media interface to the Ethernet PHY. A typical setup sequence for the drivers is shown below:

Example Code

The following example code shows the usage of the Ethernet interface.

static ARM_DRIVER_ETH_MAC *mac;
static ARM_DRIVER_ETH_PHY *phy;
static ARM_ETH_MAC_ADDR own_mac_address;
static ARM_ETH_MAC_CAPABILITIES capabilities;
void ethernet_mac_notify (uint32_t event) {
switch (event) {
void initialize_ethernet_interface (void) {
mac = &Driver_ETH_MAC0;
phy = &Driver_ETH_PHY0;
// Initialize Media Access Controller
capabilities = mac->GetCapabilities ();
mac->Initialize (ethernet_mac_notify);
if (capabilities.mac_address == 0) {
// populate own_mac_address with the address to use
else {
// Initialize Physical Media Interface
if (phy->Initialize (mac->PHY_Read, mac->PHY_Write) == ARM_DRIVER_OK) {
phy->SetInterface (capabilities.media_interface);
static ARM_ETH_LINK_STATE ethernet_link; // current link status
void ethernet_check_link_status (void) {
link = phy->GetLinkState ();
if (link == ethernet_link) {
return; // link state unchanged
// link state changed
ethernet_link = link;
if (link == ARM_ETH_LINK_UP) { // start transfer
else { // stop transfer

Data Structure Documentation


Ethernet link information.

The Ethernet Link information provides parameters about the current established communication.

Returned by:

Data Fields
uint32_t speed: 2 Link speed: 0= 10 MBit, 1= 100 MBit, 2= 1 GBit.
uint32_t duplex: 1 Duplex mode: 0= Half, 1= Full.
uint32_t reserved: 29

Ethernet MAC Address.

Stores the MAC Address of the Ethernet interface as defined by IEEE 802. Wikipedia offers more information about the MAC Address.

Parameter for:

Data Fields
uint8_t b[6] MAC Address (6 bytes), MSB first.

Enumeration Type Documentation

Ethernet link state.

The Ethernet Link status shows if the communication is currently established (up) or interrupted (down).

Returned by:


Link is down.


Link is up.