mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-05-22 01:27:11 +08:00
feat(esp8266): Add get default mac
This commit is contained in:
@ -36,7 +36,7 @@ esp_err_t esp_base_mac_addr_set(uint8_t *mac)
|
|||||||
{
|
{
|
||||||
if (mac == NULL) {
|
if (mac == NULL) {
|
||||||
ESP_LOGE(TAG, "Base MAC address is NULL");
|
ESP_LOGE(TAG, "Base MAC address is NULL");
|
||||||
abort();
|
return ESP_ERR_INVALID_ARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(base_mac_addr, mac, 6);
|
memcpy(base_mac_addr, mac, 6);
|
||||||
@ -65,6 +65,7 @@ esp_err_t esp_efuse_mac_get_default(uint8_t* mac)
|
|||||||
uint8_t efuse_crc = 0;
|
uint8_t efuse_crc = 0;
|
||||||
uint8_t calc_crc = 0;
|
uint8_t calc_crc = 0;
|
||||||
uint8_t version;
|
uint8_t version;
|
||||||
|
uint8_t use_default = 1;
|
||||||
|
|
||||||
efuse[0] = REG_READ(EFUSE_DATA0_REG);
|
efuse[0] = REG_READ(EFUSE_DATA0_REG);
|
||||||
efuse[1] = REG_READ(EFUSE_DATA1_REG);
|
efuse[1] = REG_READ(EFUSE_DATA1_REG);
|
||||||
@ -82,6 +83,8 @@ esp_err_t esp_efuse_mac_get_default(uint8_t* mac)
|
|||||||
mac[1] = efuse[3] >> 8;
|
mac[1] = efuse[3] >> 8;
|
||||||
mac[2] = efuse[3];
|
mac[2] = efuse[3];
|
||||||
|
|
||||||
|
use_default = 0;
|
||||||
|
|
||||||
tmp_mac[0] = mac[2];
|
tmp_mac[0] = mac[2];
|
||||||
tmp_mac[1] = mac[1];
|
tmp_mac[1] = mac[1];
|
||||||
tmp_mac[2] = mac[0];
|
tmp_mac[2] = mac[0];
|
||||||
@ -89,28 +92,28 @@ esp_err_t esp_efuse_mac_get_default(uint8_t* mac)
|
|||||||
efuse_crc = efuse[2] >> 24;
|
efuse_crc = efuse[2] >> 24;
|
||||||
calc_crc = esp_crc8(tmp_mac, 3);
|
calc_crc = esp_crc8(tmp_mac, 3);
|
||||||
|
|
||||||
if (efuse_crc != calc_crc) {
|
if (efuse_crc != calc_crc)
|
||||||
ESP_LOGE(TAG, "High MAC CRC error, efuse_crc = 0x%02x; calc_crc = 0x%02x", efuse_crc, calc_crc);
|
use_default = 1;
|
||||||
return ESP_ERR_INVALID_MAC;
|
|
||||||
}
|
|
||||||
|
|
||||||
version = (efuse[1] >> EFUSE_VERSION_S) & EFUSE_VERSION_V;
|
if (!use_default) {
|
||||||
|
version = (efuse[1] >> EFUSE_VERSION_S) & EFUSE_VERSION_V;
|
||||||
|
|
||||||
if (version == EFUSE_VERSION_1 || version == EFUSE_VERSION_2) {
|
if (version == EFUSE_VERSION_1 || version == EFUSE_VERSION_2) {
|
||||||
tmp_mac[0] = mac[5];
|
tmp_mac[0] = mac[5];
|
||||||
tmp_mac[1] = mac[4];
|
tmp_mac[1] = mac[4];
|
||||||
tmp_mac[2] = mac[3];
|
tmp_mac[2] = mac[3];
|
||||||
tmp_mac[3] = efuse[1] >> 16;
|
tmp_mac[3] = efuse[1] >> 16;
|
||||||
|
|
||||||
efuse_crc = efuse[0] >> 16;
|
efuse_crc = efuse[0] >> 16;
|
||||||
calc_crc = esp_crc8(tmp_mac, 4);
|
calc_crc = esp_crc8(tmp_mac, 4);
|
||||||
|
|
||||||
if (efuse_crc != calc_crc) {
|
if (efuse_crc != calc_crc)
|
||||||
ESP_LOGE(TAG, "CRC8 error, efuse_crc = 0x%02x; calc_crc = 0x%02x", efuse_crc, calc_crc);
|
use_default = 1;
|
||||||
return ESP_ERR_INVALID_MAC;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
if (use_default) {
|
||||||
mac[0] = 0x18;
|
mac[0] = 0x18;
|
||||||
mac[1] = 0xFE;
|
mac[1] = 0xFE;
|
||||||
mac[2] = 0x34;
|
mac[2] = 0x34;
|
||||||
|
Reference in New Issue
Block a user