From e6ae0a7e02c812b57903f274a146559b5a9455b0 Mon Sep 17 00:00:00 2001 From: Ned Konz Date: Thu, 6 Nov 2014 09:48:32 -0800 Subject: [PATCH] Ensure that IG (Global) bit is reset in MAC address for K64F and others See IEE 802.3-2002, Section 3.2.3(b) --- libraries/mbed/common/mbed_interface.c | 1 + .../TARGET_MCU_K64F/TARGET_FRDM/mbed_overrides.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/libraries/mbed/common/mbed_interface.c b/libraries/mbed/common/mbed_interface.c index d018a5f64a..5b27b30879 100644 --- a/libraries/mbed/common/mbed_interface.c +++ b/libraries/mbed/common/mbed_interface.c @@ -98,6 +98,7 @@ WEAK void mbed_mac_address(char *mac) { mac[i] = byte; p += 2; } + mac[0] &= ~0x01; // reset the IG bit in the address; see IEE 802.3-2002, Section 3.2.3(b) } else { // else return a default MAC #endif mac[0] = 0x00; diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_MCU_K64F/TARGET_FRDM/mbed_overrides.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_MCU_K64F/TARGET_FRDM/mbed_overrides.c index ecfba9d23c..c82f6cdcb0 100644 --- a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_MCU_K64F/TARGET_FRDM/mbed_overrides.c +++ b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_MCU_K64F/TARGET_FRDM/mbed_overrides.c @@ -38,12 +38,12 @@ void mbed_mac_address(char *mac) 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 + // and bit 1 forced to 1, bit 0 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; + word1 |= 0x00000002; + word1 &= 0x0000FFFE; mac[0] = (word1 & 0x000000ff); mac[1] = (word1 & 0x0000ff00) >> 8;