Merge pull request #663 from bikeNomad/master

Ensure that IG (Global) bit is reset in MAC address for K64F and others
pull/686/head
Martin Kojtal 2014-11-10 07:37:52 +00:00
commit 59fa5437e3
2 changed files with 4 additions and 3 deletions

View File

@ -98,6 +98,7 @@ WEAK void mbed_mac_address(char *mac) {
mac[i] = byte; mac[i] = byte;
p += 2; 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 } else { // else return a default MAC
#endif #endif
mac[0] = 0x00; mac[0] = 0x00;

View File

@ -38,12 +38,12 @@ void mbed_mac_address(char *mac)
uint32_t word0 = *(uint32_t *)0x40048060; uint32_t word0 = *(uint32_t *)0x40048060;
// Fetch word 1 // Fetch word 1
// we only want bottom 16 bits of word1 (MAC bits 32-47) // 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 // Locally administered MAC, reduced conflicts
// http://en.wikipedia.org/wiki/MAC_address // http://en.wikipedia.org/wiki/MAC_address
uint32_t word1 = *(uint32_t *)0x4004805C; uint32_t word1 = *(uint32_t *)0x4004805C;
word1 |= 0x00000200; word1 |= 0x00000002;
word1 &= 0x0000FEFF; word1 &= 0x0000FFFE;
mac[0] = (word1 & 0x000000ff); mac[0] = (word1 & 0x000000ff);
mac[1] = (word1 & 0x0000ff00) >> 8; mac[1] = (word1 & 0x0000ff00) >> 8;