TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2340R5: 修改MAC Address

Part Number:CC2340R5Other Parts Discussed in Thread:SYSCONFIG

我該如何修改CC2340的MAC Address變成我自己要的?

Galaxy Yue:

你好,

可以尝试一下GapAdv_setVirtualAdvAddr() 

https://software-dl.ti.com/simplelink/esd/simplelink_cc13x2_26x2_sdk/5.20.00.52/exports/docs/ble5stack/ble_user_guide/doxygen/ble/html/group___gap_adv.html#ga72696f5a9e5650cc43443a0ec46f86b7

你是想改变BLE名称吗?类似:每个 MCU 都有自己的 MAC 作为其 BLE 名称,而不是每个 MCU 共享相同的固定名称。

,

Ryan:

是的 MAC Address是由6個Byte所組成,而我想要自定義這6個Bytes,讓CC2340廣播出來顯示的MAC Address是我自己定義的

,

Galaxy Yue:

可以参考一下这个link。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1254208/cc2340r5-can-mac-address-be-read-within-codebase

里面提出方案:TI原始代码中的advSetInitParamsSet_1中首次调用scanResData1之前,修改了app/app_peripheral.c中的scanResData1。

结果是:我们发现BLE名称如我们所料成功更改。

,

Ryan:

但是scanResData1裡面的好像是Device Name,並不是MAC Address

我在Syscfg裡找到如下圖,是可以設定Address Mode,只要改成Random Mode就可以自定義MAC Address 但我想要當我呼叫一個函式是用來修改MAC Address,而不是只能透過Syscfg去修改

,

Galaxy Yue:

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1239818/cc2340r5-does-cc2340-support-secondary-ble-mac-address

根据现有资料,目前没有接口或者函数可以去修改MAC ADD,

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1240094/cc2340r5-how-to-set-bd-address

设备BLE地址是BD地址或者也称为ID地址,这个地址是直接烧在硅片中的,每个芯片都有自己的BD地址,根据蓝牙规范是强制性的。 

RP 地址,是蓝牙低功耗协议上使用的地址,它可以自动生成或在 sysconfig 中定义,有关地址的更多信息,请参阅BLE5-Stack > 隐私部分 中 的用户指南。

如果您重置基本 BLE 示例并保留默认设置,您应该能够看到每次重置时 RP 地址的变化。然而,ID地址仍然具有相同的值。 

,

Ryan:

目前我設置Address Mode為Random static Address,底下的CF:FF:FF:FF:FF:FF 是我自己設置的MAC Address,從nRF的藍芽上面看到廣播的MAC Address也是CF:FF:FF:FF:FF:FF ,這樣代表是能成功更改的嗎?

,

Galaxy Yue:

是的,如果不确定看看这个设备是否被其他蓝牙设备发现并连接成功

,

Ryan:

有成功更改,但如果我想用Code去更改Random Address,我有找到他被儲存在BLEAppUtil_GeneralParams_t appMainParams ={ .taskPriority = 1, .taskStackSize = 1024, .profileRole = (BLEAppUtil_Profile_Roles_e)(HOST_CONFIG), .addressMode = DEFAULT_ADDRESS_MODE, .deviceNameAtt = attDeviceName, .pDeviceRandomAddress = pRandomAddress};

的pRandomAddress陣列裡面,如果我更改這個陣列的MAC Address值,我要如何讓藍芽廣播顯示的是我更新的MAC Address?

,

Galaxy Yue:

那就是把mac放在扫描应答数据中广播出去,通过调用scanResData1

,

Ryan:

1. scanResData1這個陣列並不是儲存MAC的,一樣是掃描這個數據廣播出去嗎? 2.哪個Function可以重新掃描應答數據,之後更新廣播呢?

,

Galaxy Yue:

你可以按照如下link尝试一下,逻辑是类似的

https://blog.csdn.net/feilusia/article/details/52510300

有点不太明白你的意思,什么是重新扫描scanResData1?

,

Ryan:

假設我在Syscfg設置的pRandomAddress = { 0xFF , 0xFF , 0xFF ,0xFF, 0xFF , 0xCF},然後我在運行中呼叫某個Function讓pRandomAddress裡的值改變,改變成 { 0x11 , 0x22 , 0x33 ,0x44, 0x55 , 0x66}那我要如何讓廣播去更新成我新的pRandomAddress裡的值,有甚麼函式可以更新嗎

,

Galaxy Yue:

1.

要发送到应用程序的感兴趣的事件。事件将被发送到GapAdv_create()中给出的回调函数。

清单 39. bleapputil_init.c ::BLEAppUtil_initAdvSet – 声明回调函数和寄存器事件¶

 1 bStatus_t BLEAppUtil_initAdvSet(uint8 *advHandle, const BLEAppUtil_AdvInit_t *advInitInfo)
 2 {
 3// BLEAppUtil_advCB is the callback function
 4// The mask is to register all GAP_ADV_EVT_MASK_ALL
 5// That means in BLEAppUtil
 6return bleStk_initAdvSet(BLEAppUtil_advCB, advHandle, GAP_ADV_EVT_MASK_ALL,
 7advInitInfo->advParam, advInitInfo->advDataLen ,
 8advInitInfo->advData, advInitInfo->scanRespDataLen,
 9advInitInfo->scanRespData);
10 }

可以看到,注册的广告回调事件就全部了。但是,这仅适用于 BLEAppUtil 层

或许可以用把你的值作为参数传走

user guide 可以看下

https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_Bluetooth_gap-cc23xx.html

,

Ryan:

我找到了這篇文章 CC2640之广播MAC地址_cc2640设置广播地址-CSDN博客他在scanResData1裡面新增GAP_ADTYPE_MANUFACTURER_SPECIFIC 是可以存MAC Address,之後利用

BLEAppUtil_initAdvSet去更新。

但是在CC2340裡的Syscfg,勾選 這個識別碼會顯示

似乎不太一樣,還是說CC2340本身有其他參數可當作識別碼

,

Galaxy Yue:

通过使用GAP_ADTYPE_MANUFACTURER_SPECIFIC数据类型,我们可以在广告数据中放入我们想要的任何内容。在本例中是0xAA,0xBB,但如果您愿意,您可以将其更改为其他内容。

打开syscfg里面默认的company identifier 就是0x0D00

宏定义描述#define GAP_ADTYPE_MANUFACTURER_SPECIFIC 0xFF Manufacturer Specific Data: first 2 octets contain the Company Identifier Code followed by the additional manufacturer specific data.

请在以下link中找到这部分

https://dev.ti.com/tirex/explore/node?node=A__AWGBpOjezYNvPbjzZTCkqw__SIMPLELINK-ACADEMY-CC23XX__gsUPh5j__LATEST

然后查看使用示例

观察来看应该是syscfg(0x0D00, )和代码(  0x0D,0X00)(分成两段)的表示不一致

,

Ryan:

我嘗試過GAP_ADTYPE_MANUFACTURER_SPECIFIC,但是他所更新的並不是BLE Device Address,而我真正想要在廣播更新的是BLE Device Address,如下圖,我想要達成的目標是,不利用Syscfg,而是程式運行中利用Code更改Random Address的內容之後,讓廣播更新BLE Device Address,但我目前嘗試了很多方法,都無法成功更新BLE Device Address

,

Galaxy Yue:

扫描响应新的add 然后再通过广播发出去?

,

Ryan:

是,我的理想目標是這樣

,

Ryan:

而且我查看了fcfg->deviceInfo.bleAddr的記憶體位址內容,發現他的Addreess是{B5 , 13 , F8 , 93 , 72 , 84} 是因為他有兩個Address,一個是燒錄在晶片上的,一個可以被更改嗎?不然我設定的Address應該要是{CF , FF , FF , FF , FF ,FF}

,

Ryan:

我使用了 已成功修改MAC Address並且廣播出去,謝謝你提供的建議

,

Galaxy Yue:

恭喜

,

Galaxy Yue:

感谢你的反馈,祝顺利~

赞(0)
未经允许不得转载:TI中文支持网 » CC2340R5: 修改MAC Address
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1