一、簡述
在實際BLE應用開發中,需要設備廣播藍牙標籤MAC,比如蘋果手機獲取不到設備Mac,這是需要廣播設備信息中附帶MAC標識,外加自定義廣播數據,如果考慮到存在安全隱患,因爲廣播包隨時都可以被抓包。BLE協議棧自帶加密解密API函數,可以通過調用此函數實現。如下:
//加密函數
LL_Encrypt(uint8 *key,uint8 *plaintextData,uint8 *encryptedData );
//解密函數
LL_EXT_Decrypt( uint8 *key,uint8 *encryptedData,uint8 *plaintextData );
這裏主要介紹如何廣播MAC地址,有兩種實現方式:通過直接讀寄存器和調用系統API函數,本篇介紹通過直接讀寄存器方式獲取MAC,通過調用API函數如下:
GAPRole_GetParameter(GAPROLE_BD_ADDR, MacAddress);
但是在系統初始化的時候只能通過讀寄存器的方式實現,不能調用API獲取MAC,此時MAC還未填入該變量中。
二、軟件環境
協議棧版本:BLE-CC254x-1.4.0
編譯器:IAR 8.20.2
三、步驟
1.讀寄存器值,獲取芯片MAC:
根據數據手冊描述,從0x780e開始讀6個字節就得到MAC地址了。
2.讀取芯片MAC函數如下:
/*
*************************************************
Function name: Get_Mac
description: Read the register value to get the Mac
param[in]: MacAddress
Return: none
*************************************************
*/
static void Get_Mac(uint8 *MacAddress)
{
MacAddress[5] = XREG(0x780E);
MacAddress[4] = XREG(0x780F);
MacAddress[3] = XREG(0x7810);
MacAddress[2] = XREG(0x7811);
MacAddress[1] = XREG(0x7812);
MacAddress[0] = XREG(0x7813);
}
3.修改廣播數組,預留6個字節MAC位置:
// GAP - Advertisement data (max size = 31 bytes, though this is
// best kept short to conserve power while advertisting)
static uint8 advertData[] =
{
// Flags; this sets the device to use limited discoverable
// mode (advertises for 30 seconds at a time) instead of general
// discoverable mode (advertises indefinitely)
0x02, // length of this data
GAP_ADTYPE_FLAGS,
GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,
// three-byte broadcast of the data "1 2 3"
0x07, // length of this data including the data type byte
GAP_ADTYPE_MANUFACTURER_SPECIFIC, // manufacturer specific advertisement data type
0x20,
0x20,
0x20,
0x20,
0x20,
0x20,
};
4.修改系統初始化函數SimpleBLEBroadcaster_Init:
uint8 MacAddress[B_ADDR_LEN];
Get_Mac(MacAddress);
osal_memcpy(advertData+5,MacAddress,6);
GAPRole_SetParameter(GAPROLE_ADVERT_DATA,sizeof( advertData ), advertData );
5.通過SmartRF Flash Programmer查看芯片MAC地址:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-aJSfKavQ-1575379447329)(https://img-blog.csdn.net/20170302220450709?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjI0NjM3Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]
6.通過SmartRF Packet Sniffer進行抓包查看廣播數組中是否添加了MAC地址:
7.在手機端APP驗證,確實獲取到了MAC地址,驗證程序可行:
更多技術文章請關注:
百家號:
https://author.baidu.com/home?context=%7B%22app_id%22%3A%221646108714303504%22%7D&wfr=bjh
頭條號:
https://www.toutiao.com/c/user/8115738721/#mid=1646025109246987