10 years, 1 month ago.

K64F MAC address configuration

All of my K64F boards get the same IP address from DHCP because they expose the same MAC address. Debugging into k64F_emac.c shows that the call to mbed_mac_address() returns a constant MAC address instead of determining the MAC (00 02 F7 F0 00 00) from the board.

Am I missing the right mbed_mac_address() implementation? Do I have to implement this function on my own? What else am I doing wrong?

Thanks Matthias

p.s. I am using the KEIL MDK p.p.s. I tried the WebSockets sample project and found the same issue (http://developer.mbed.org/users/wjenkins7/code/websocketexample/) p.p.p.s. The project on a single board works fine

1 Answer

10 years, 1 month ago.

Hello,

are you using the latest mbed lib, this is mbed address implementation:

// Provide ethernet devices with a semi-unique MAC address from the UUID
void mbed_mac_address(char *mac)
{
    // Fetch word 0
    uint32_t word0 = *(uint32_t *)0x40048060;
    // Fetch word 1
    // we only want bottom 16 bits of word1 (MAC bits 32-47)
    // and bit 9 forced to 1, bit 8 forced to 0
    // Locally administered MAC, reduced conflicts
    // http://en.wikipedia.org/wiki/MAC_address
    uint32_t word1 = *(uint32_t *)0x4004805C;
    word1 |= 0x00000200;
    word1 &= 0x0000FEFF;
    
    mac[0] = (word1 & 0x000000ff);
    mac[1] = (word1 & 0x0000ff00) >> 8;
    mac[2] = (word0 & 0xff000000) >> 24;
    mac[3] = (word0 & 0x00ff0000) >> 16;
    mac[4] = (word0 & 0x0000ff00) >> 8;
    mac[5] = (word0 & 0x000000ff);
}

It should be weak linked so to provide users an option to assign own mac address.

Regards,
0xc0170

Accepted Answer

Martin, If I were to need an absolutely unique ID across all K64 chips, would taking the entire 128 bits of the UIR be guaranteed to be unique? I know it's called the "Unique Identification Register", but I just want to be sure. ;)

posted by Dave M 01 Apr 2015