CC2541廣播MAC地址

一、簡述
在實際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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章