Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
6 years, 10 months ago.
Self defined MAC address
Hello,
I am building a project using a LPC1768 micro on a custom board (not an MBED module). I therefore need to manually assign a MAC address tothe Ethernet interface.
While I can use: EthernetInterface.get_mac_address() to get the MAC address on a standard module, I can't see anyway to set it. Can someone tell me how to do this please?
Thanks
Roger
1 Answer
6 years, 10 months ago.
Hello Roger,
There is a weak function mbed_mac_address
defined in the mbed library - see Ethernet (MAC) address?.
The function is declared in the platform/mbed_interface.h
as follows:
/** This returns a unique 6-byte MAC address, based on the interface UID * If the interface is not present, it returns a default fixed MAC address (00:02:F7:F0:00:00) * * This is a weak function that can be overwritten if you want to provide your own mechanism to * provide a MAC address. * * @param mac A 6-byte array to write the MAC address */ void mbed_mac_address(char *mac);
So you can define a custom MAC address by defining your own mbed_mac_address
function in main.cpp
before the main()
function, for example as below:
/** * @brief Defines a custom MAC address * @note Have to be unique within the connected network! * Modify the mac array items as needed. * @param mac A 6-byte array defining the MAC address * @retval */ extern "C" void mbed_mac_address(char* mac) { mac[0] = 0x00; mac[1] = 0x01; mac[2] = 0x02; mac[3] = 0x03; mac[4] = 0x04; mac[5] = 0x05; };
Hi Zoltan,
Thanks for this, I've added the function to my program and the net result is that it turns the mac address into 00.00.00.00.00.00. (which I'm getting using the ARP command). I'm using Mbed-OS if that makes any difference?
Regards
Roger
posted by 15 Jan 2018Hello Roger,
I used this demo application for testing. It worked fine without and also with custom MAC address on an official mbed LPC1768 as well as on a home made LPC1768 board. I used a LAN8720 module as Ethernet interface for the custom LPC1768 board.
With best regards,
Zoltan
Hi Zoltan,
I've got it working! I added 'memcpy(s, mac, 6);' to the function and then it all sprang into life. I've tested it on my custom board as well as the Mbed board and it's working on both. So the complete working function is:
extern "C" void mbed_mac_address(char *s) { char mac[6]; mac[0] = 0x00; mac[1] = 0x02; mac[2] = 0xF7; mac[3] = 0xF2; mac[4] = 0xD2; mac[5] = 0xFE;
memcpy(s, mac, 6); };
I can only conclude that this is a oddity of the MBED-OS version. I've found that there is very little correlation between the earlier Ethernet implementations and mbed-OS. Documentation is practically non-existent and useful examples rarer than rocking horse dung.
Sorry, not ranting at you. Thanks for all your help, it is greatly appreciated.
Regards
Roger
posted by 16 Jan 2018