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:
感谢你的反馈,祝顺利~