一、将动态生成Setup Code的宏 HOMEKIT_DISPLAY_SUPPORT 的值设置为0
二、使用“homekitsetupcode.exe”工具产生静态Setup Code
工具路径在 C:\SiliconLabs\SimplicityStudio\v4\developer\sdks\gecko_sdk_suite\v2.6\protocol\bluetooth\bin
第一代EFR32请使用以下命令(-f 后面的参数为实际芯片的大小)
.\homekitsetupcode.exe -f 1024 –c 767-12-767
.\homekitsetupcode.exe -f 1024 –n 20 –V summary.txt
.\homekitsetupcode.exe -f 1024 –p out –n 10
.\homekitsetupcode.exe -f 1024 –s 54212 –c 987-32-123
.\homekitsetupcode.exe -f 1024 –r
.\homekitsetupcode.exe -f 1024 –e
.\homekitsetupcode.exe -f 1024 -i A1PX -q BMP,5,2
.\homekitsetupcode.exe -f 1024 -a tokens.csv -u uuids.txt
我们实际使用的是第二代EFR32,所以使用以下命令
.\homekitsetupcode.exe -x -c 111-22-333
生成 SN_000023_PIN_111_22_333_SI_KG2R.nvm3 文件
三、产生一个带固定setup code的烧录固件
APP应用固件名字:soc-homekit-thermometer-rtos.hex
BootLoader固件名字:bootloader-storage-internal-single.s37
setup code的NVM3文件名字:SN_000023_PIN_111_22_333_SI_KG2R.nvm3
3.1 将设备的NVM3读出来,产生文件my_nvm3_data.s37
PS C:\Users\tensi\SimplicityStudio\v4_workspace\Simplicity Commander> commander nvm3 read -o my_nvm3_data.s37
WARNING: No serial number or IP address given, cannot lock access to adapter.
Reading 24576 bytes from 0x000f8000...
Writing to my_nvm3_data.s37...
Overwriting file: my_nvm3_data.s37...
DONE
3.2 解析读出来的my_nvm3_data.s37文件
PS C:\Users\tensi\SimplicityStudio\v4_workspace\Simplicity Commander> commander nvm3 parse my_nvm3_data.s37
Parsing file my_nvm3_data.s37...
Found NVM3 range: 0x000F8000 - 0x000FE000
Using 4096 B as maximum object size, based on given size of NVM3 area.
All NVM3 objects:
KEY - TYPE - SIZE - DATA
0x80001 - Data - 68 B - DE 66 2A 78 DB C9 73 BB (+ 60 more bytes)
0x80002 - Data - 20 B - 79 BE 19 1D 31 CD DE CD (+ 12 more bytes)
0x80003 - Data - 8 B - D7 AC 00 36 58 37 41 49
0x80000 - Counter - 4 B - 0
0x40033 - Data - 2 B - 01 00
0x44000 - Data - 4 B - 01 00 00 00
0x4002c - Data - 6 B - 96 3A 55 C6 A0 E5
0x4003c - Data - 1 B - 01
0x40036 - Data - 0 B -
0x40035 - Data - 4 B - 00 00 00 00
0x4003d - Data - 16 B - C8 D8 D2 53 36 B9 7C E1 (+ 8 more bytes)
0x40037 - Data - 16 B - 16 10 9A A3 92 15 36 45 (+ 8 more bytes)
NVM3 erase count: 1
DONE
3.3 将SN_000023_PIN_111_22_333_SI_KG2R.nvm3重命名为nvm3_objects.txt,并且加到之前读出来的文件里面
PS C:\Users\tensi\SimplicityStudio\v4_workspace\Simplicity Commander> commander nvm3 set my_nvm3_data.s37 --nvm3file nvm3_objects.txt --outfile my_modified_nvm3_data.s37
Parsing file my_nvm3_data.s37...
Found NVM3 range: 0x000F8000 - 0x000FE000
Using 4096 B as maximum object size, based on given size of NVM3 area.
Setting NVM3 object: 0x80003 = 2FDF2AAE4B473252
Setting NVM3 object: 0x80004 = 38106ECFACC6534EED0DA71A6F1230F4
Setting NVM3 object: 0x80005 = 06A22CBA832DE3C553278266AFFE56CD432710A604CAB3399B098CC64BEFAC582FCA395EB04A42B8A0C854CE8E30D227BEAF6A1704E75BBAB7F98B089580D99F529B1E82501C5DD0E054A5155AA438CA11F44AA30CE5044A5793A9FAB2E558D32145371CD64AB7CC552587FB7DB0D061151F8AA5A604C53B48CE852295C7E77B3D79F7EC6A19F5A6AF4F39182363C2DD9980A5E60FCDBEAC7D8AA3B1D65D00F719EAEBF808AA3BBDE99A31EDBA39C9ED682A1F44999084D7B98E6095E34C48371C8ED93D3E3C8C13870728FE4E4782E2EE6A213CE271858029C64E54FD42E946FA2104F427229F801C9AED0A159CA1C0222A83603B0DBA304016E95E1E06721F7AC5D510916E33F78B3E999E387C802AA02F8195AEB322423A2556D1C65056633F2ED00505EF3A4F4D53E2C611FBACEAD14EF9737E2D43EFA81D064CE8E49624C410B0B6BE98AA03C9D2FEFEB37AB60AA5734B4F53E6CEA739F7D6E9388903461326F4FD5BADE0AFCCCDC8B757644D0CB955754AFCCABCBF86EE347104385189
Writing to my_modified_nvm3_data.s37...
DONE
3.4 将添加NVM3后的文件重新解析确认,确认key为0x80003、0x80004和0x80005的已经添加
PS C:\Users\tensi\SimplicityStudio\v4_workspace\Simplicity Commander> commander nvm3 parse my_modified_nvm3_data.s37
Parsing file my_modified_nvm3_data.s37...
Found NVM3 range: 0x000F8000 - 0x000FE000
Using 4096 B as maximum object size, based on given size of NVM3 area.
All NVM3 objects:
KEY - TYPE - SIZE - DATA
0x80001 - Data - 68 B - DE 66 2A 78 DB C9 73 BB (+ 60 more bytes)
0x80002 - Data - 20 B - 79 BE 19 1D 31 CD DE CD (+ 12 more bytes)
0x80000 - Counter - 4 B - 0
0x40033 - Data - 2 B - 01 00
0x44000 - Data - 4 B - 01 00 00 00
0x4002c - Data - 6 B - 96 3A 55 C6 A0 E5
0x4003c - Data - 1 B - 01
0x40036 - Data - 0 B -
0x40035 - Data - 4 B - 00 00 00 00
0x4003d - Data - 16 B - C8 D8 D2 53 36 B9 7C E1 (+ 8 more bytes)
0x40037 - Data - 16 B - 16 10 9A A3 92 15 36 45 (+ 8 more bytes)
0x80003 - Data - 8 B - 2F DF 2A AE 4B 47 32 52
0x80004 - Data - 16 B - 38 10 6E CF AC C6 53 4E (+ 8 more bytes)
0x80005 - Data - 384 B - 06 A2 2C BA 83 2D E3 C5 (+ 376 more bytes)
NVM3 erase count: 1
DONE
3.5 将APP和BootLoader以及NVM3文件合并成一个烧录固件
PS C:\Users\tensi\SimplicityStudio\v4_workspace\Simplicity Commander> commander.exe convert bootloader-storage-internal-single.s37 soc-homekit-thermometer-rtos.hex my_modified_nvm3_data.s37 --outfile BLE-APP-BL-PIN.hex
Parsing file bootloader-storage-internal-single.s37...
Parsing file soc-homekit-thermometer-rtos.hex...
Parsing file my_modified_nvm3_data.s37...
Writing to BLE-APP-BL-PIN.hex...
DONE
四、设备烧录BLE-APP-BL-PIN.hex固件及验证
4.1 将芯片擦除,并烧录
4.2 打开手机Homekit的APP,输入setup code:111-22-333,设备连接成功,LOG打印如下:
[main] start up
------------------------
gecko_evt_system_boot_id
homekit_use_new_static_address
use_new_static_addr = 0
mac addr : 9e:bf:d6:78:48:f6
use_new_static_addr = 0
------------------------
gecko_evt_le_connection_opened_id
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
gecko_evt_homekit_pair_verified_id
verified result :0
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
gecko_evt_homekit_read_request_id : 74
GATTDB_homekit_accessory_flags
------------------------
------------------------
------------------------
gecko_evt_homekit_read_request_id : 129
GATTDB_homekit_lock_current_state
------------------------
gecko_evt_homekit_read_request_id : 137
GATTDB_homekit_lock_target_state
------------------------
gecko_evt_homekit_read_request_id : 44
GATTDB_HOMEKIT_ACCESSORY_INFORMATION_MANUFACTURER
------------------------
gecko_evt_homekit_read_request_id : 49
GATTDB_HOMEKIT_ACCESSORY_INFORMATION_MODEL
------------------------
gecko_evt_homekit_read_request_id : 54
GATTDB_HOMEKIT_ACCESSORY_INFORMATION_NAME
------------------------
gecko_evt_homekit_read_request_id : 59
GATTDB_HOMEKIT_ACCESSORY_INFORMATION_SERIAL_NUMBER
------------------------
gecko_evt_homekit_read_request_id : 64
GATTDB_HOMEKIT_ACCESSORY_INFORMATION_FIRMWARE_REVISION
------------------------
gecko_evt_homekit_read_request_id : 74
GATTDB_homekit_accessory_flags
------------------------
gecko_evt_homekit_read_request_id : 145
GATTDB_homekit_name_2
------------------------
gecko_evt_homekit_read_request_id : 163
GATTDB_homekit_logs
------------------------
gecko_evt_homekit_read_request_id : 169
GATTDB_homekit_audio_feedback
------------------------
gecko_evt_homekit_read_request_id : 175
GATTDB_homekit_lock_management_auto_security_timeout
------------------------
gecko_evt_homekit_read_request_id : 182
GATTDB_homekit_administrator_only_access
------------------------
gecko_evt_homekit_read_request_id : 188
GATTDB_homekit_lock_last_known_action
------------------------
gecko_evt_homekit_read_request_id : 196
GATTDB_homekit_current_door_state
------------------------
gecko_evt_homekit_read_request_id : 204
GATTDB_homekit_motion_detected
------------------------
gecko_evt_homekit_read_request_id : 129
GATTDB_homekit_lock_current_state
------------------------
gecko_evt_homekit_read_request_id : 129
GATTDB_homekit_lock_current_state
------------------------
gecko_evt_homekit_read_request_id : 129
GATTDB_homekit_lock_current_state
------------------------
gecko_evt_homekit_read_request_id : 137
GATTDB_homekit_lock_target_state
------------------------
gecko_evt_homekit_identify_id
------------------------
gecko_evt_le_connection_closed_id
------------------------
gecko_evt_homekit_connection_closed_id
------------------------
gecko_evt_le_connection_opened_id
------------------------
------------------------
------------------------
------------------------
------------------------
gecko_evt_homekit_pair_verified_id
verified result :0
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
------------------------
gecko_evt_homekit_read_request_id : 74
GATTDB_homekit_accessory_flags
------------------------
gecko_evt_homekit_read_request_id : 129
GATTDB_homekit_lock_current_state
------------------------
gecko_evt_homekit_read_request_id : 137
GATTDB_homekit_lock_target_state
------------------------
gecko_evt_homekit_read_request_id : 163
GATTDB_homekit_logs
------------------------
gecko_evt_homekit_read_request_id : 169
GATTDB_homekit_audio_feedback
------------------------
gecko_evt_homekit_read_request_id : 175
GATTDB_homekit_lock_management_auto_security_timeout
------------------------
gecko_evt_homekit_read_request_id : 182
GATTDB_homekit_administrator_only_access
------------------------
gecko_evt_homekit_read_request_id : 188
GATTDB_homekit_lock_last_known_action
------------------------
gecko_evt_homekit_read_request_id : 196
GATTDB_homekit_current_door_state
------------------------
gecko_evt_homekit_read_request_id : 204
GATTDB_homekit_motion_detected
------------------------
gecko_evt_homekit_read_request_id : 129
GATTDB_homekit_lock_current_state
------------------------
gecko_evt_le_connection_closed_id
------------------------
gecko_evt_homekit_connection_closed_id