概要: 

   我们有四种方法在WICED中去设置wifi的mac地址, 这篇博客将展示如何通过这些方法去设置。 我的测试是基于

CYW954907AEVAL1F 这个开发板 。

 

  • 第一种:DCT mode:
  1. 1. app.mk中添加这个定义: GLOBAL_DEFINES     += MAC_ADDRESS_SET_BY_HOST
  2. App.mk是泛指,比如在apsta.mk 这样一个application中的定义。
    1. 2. 43xxx_Wi-Fi\generated_mac_address.txt

在前面的地址中修改如下红色重点的部分,可以看到mac地址修改成功。

#define NVRAM_GENERATED_MAC_ADDRESS "macaddr=00:A0:50:38:f6:35"

#define DCT_GENERATED_MAC_ADDRESS "\x00\xA0\x50\xe8\xf3\x48"

       #define DCT_GENERATED_ETHERNET_MAC_ADDRESS "\x00\xA0\x50\xe5\xf3\x47

 

  • 第二种 OTP mode
  1. 在相同的app.mk中屏蔽 //GLOBAL_DEFINES     += MAC_ADDRESS_SET_BY_HOST
  2. 需要点击clean 清楚掉编译文件,重新全部编译,看如下log,mac地址也被修改.

 

Starting WICED vWiced_006.002.001.0002

Platform CYW954907AEVAL1F initialised

Started ThreadX v5.8

Initialising NetX_Duo v5.10_sp3

Creating Packet pools

WLAN MAC Address : B8:D7:AF:4D:1D:D6

WLAN Firmware    : wl0: May 15 2018 19:39:17 version 7.15.168.114 (r689934) FWID 01-d6f88905

WLAN CLM         : API: 12.2 Data: 9.10.74 Compiler: 1.31.3 ClmImport: 1.36.3 Creation: 2018-05-15 19:33:15

下面我们使用MFG 工厂测试模式去查看下OTP 区域内的MAC地址, 注意这边需要重新编译并且下载一个新的应用,此应用专门用于工厂模式测试,命令如下:

test.mfg_test-CYW954907AEVAL1F download download_apps run

比较下地址,这部分完全一样,可以证实这个地址是从OTP 区域内读出:

WLAN MAC Address : B8:D7:AF:4D:1D:D6

 

  • 第三种 在NVRAM中修改

43xxx_Wi-Fi\platforms\CYW954907AEVAL1F\board_revision\P101

     static const char wifi_nvram_image[] =

      "sromrev=11" "\x00"

      "vendid=0x14e4" "\x00"

      "devid=0x43d0" "\x00"

      "macaddr=00:A0:50:38:f6:35" "\x00"

 

  1. 一样需要屏蔽 //GLOBAL_DEFINES     += MAC_ADDRESS_SET_BY_HOST
  2. 全部clean,然后重新编译.
  3. 从结果来看MAC地址依然是: WLAN MAC Address : B8:D7:AF:4D:1D:D6

现在还没有找到那边可以将MAC地址固定在NVRAM 输出,所以假设OTP和NVRAM是有优先级的排列,如果OTP 区域存在有效的mac地址,那么NVRAM的将会被忽略。

  • 第四种 客户定制模式:
  1. 同样需要使能这个宏的定义,app makefile: GLOBAL_DEFINES     += MAC_ADDRESS_SET_BY_HOST
  2. 用户模式的话,需要在代码中添加修改:

在这个路径下的文件中做代码的改动,

43xxx_Wi-Fi\WICED\platform\MCU\BCM4390x\bcm4390x_platform.c

wwd_result_t host_platform_get_mac_address( wiced_mac_t* mac )

{

#ifndef WICED_DISABLE_BOOTLOADER

    wiced_mac_t* temp_mac;

    wiced_result_t result;

result = wiced_dct_read_lock( (void**)&temp_mac, WICED_FALSE, DCT_WIFI_CONFIG_SECTION, OFFSETOF(platform_dct_wifi_config_t, mac_address), sizeof(mac->octet) );

    if ( result != WICED_SUCCESS )

{

        return (wwd_result_t) result;

}

memcpy( mac->octet, temp_mac, sizeof(mac->octet) );

mac->octet[0]= 0x00;

mac->octet[1]= 0x11;

mac->octet[2]= 0x22;

mac->octet[3]= 0x33;

mac->octet[4]= 0x44;

mac->octet[5]= 0x55;

wiced_dct_read_unlock( temp_mac, WICED_FALSE );

#else

UNUSED_PARAMETER( mac );

#endif

    return WWD_SUCCESS;

}

 

Starting WICED vWiced_006.002.001.0002

Platform CYW954907AEVAL1F initialised

Started ThreadX v5.8

Initialising NetX_Duo v5.10_sp3

Creating Packet pools

WLAN MAC Address : 00:11:22:33:44:55

WLAN Firmware : wl0: May 15 2018 19:39:17 version 7.15.168.114 (r689934) FWID 01-d6f88905

WLAN CLM         : API: 12.2 Data: 9.10.74 Compiler: 1.31.3 ClmImport: 1.36.3 Creation: 2018-05-15 19:33:15

Console app

 

从结果看WifiMAC 地址被强制改成了我们想要的地址, 忽略了其他的设置。