tcp_put_mac(xnetif[WLAN_AP_NETIF_NUM].hwaddr);
Правило у SDK получения MAC в дровах:
1) распаковывается* eFuse в структуру настроек WiFi под названием типа eeprom (struct _ADAPTER, eeprompriv).
2) на неё накладываются* значения из Flash сектора по адресу 0xA000.
3) Если все 6-ть байт MAC равны 0xFF, то ставится mac по умолчанию.
* паковка имеет записи, которые надо заместить. Т.е. в сжатом виде указаны адрес и значения для областей в efuse_eeprom_data[HWSET_MAX_SIZE_512]. Замещения значений MAC там может и не быть. Изначально буфер efuse_eeprom_data 512 байт содержат 0xff. Этим достигается возможность дозаписи в eFuse, которые заместят предыдущие.
pvvx/RTL00_WEB
Кроме того MAC, в структуре есть область efuse_eeprom_data, от куда его скопировали в mac_addr[6], в какой-то момент времени:
Код:
struct eeprom_priv
{
u8 bautoload_fail_flag;
u8 mac_addr[6]; //PermanentAddress
u16 CustomerID;
u8 EepromOrEfuse;
u8 efuse_eeprom_data[HWSET_MAX_SIZE_512];
#ifdef CONFIG_RF_GAIN_OFFSET
u8 EEPROMRFGainOffset;
u8 EEPROMRFGainVal;
#endif
};
От туда он, в какой-то момент попадет в область WiFi регистров
Т.е. существует более 3-х MAC адресов - в eFuse, в Flash, в RAM eeprompriv, в netif-ах у LwIP. И они ещё отличаются для STA и AP драйвера... и могут быть заданы пользователем.
Так-же процедур установки MAC более 3-х