Other Parts Discussed in Thread: SYSCONFIG
我該如何修改CC2340的MAC Address變成我自己要的?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你好,
可以尝试一下GapAdv_setVirtualAdvAddr()
你是想改变BLE名称吗?类似:每个 MCU 都有自己的 MAC 作为其 BLE 名称,而不是每个 MCU 共享相同的固定名称。
可以参考一下这个link。
里面提出方案:TI原始代码中的advSetInitParamsSet_1中首次调用scanResData1之前,修改了app/app_peripheral.c中的scanResData1。
结果是:我们发现BLE名称如我们所料成功更改。
但是scanResData1裡面的好像是Device Name,並不是MAC Address
我在Syscfg裡找到如下圖,是可以設定Address Mode,只要改成Random Mode就可以自定義MAC Address
但我想要當我呼叫一個函式是用來修改MAC Address,而不是只能透過Syscfg去修改
根据现有资料,目前没有接口或者函数可以去修改MAC ADD,
设备BLE地址是BD地址或者也称为ID地址,这个地址是直接烧在硅片中的,每个芯片都有自己的BD地址,根据蓝牙规范是强制性的。
RP 地址,是蓝牙低功耗协议上使用的地址,它可以自动生成或在 sysconfig 中定义,有关地址的更多信息,请参阅BLE5-Stack > 隐私部分 中 的用户指南。
如果您重置基本 BLE 示例并保留默认设置,您应该能够看到每次重置时 RP 地址的变化。然而,ID地址仍然具有相同的值。
目前我設置Address Mode為Random static Address,底下的CF:FF:FF:FF:FF:FF 是我自己設置的MAC Address,從nRF的藍芽上面看到廣播的MAC Address也是CF:FF:FF:FF:FF:FF ,這樣代表是能成功更改的嗎?
有成功更改,但如果我想用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?
你可以按照如下link尝试一下,逻辑是类似的
https://blog.csdn.net/feilusia/article/details/52510300
有点不太明白你的意思,什么是重新扫描scanResData1?
假設我在Syscfg設置的pRandomAddress = { 0xFF , 0xFF , 0xFF ,0xFF, 0xFF , 0xCF},然後我在運行中呼叫某個Function讓pRandomAddress裡的值改變,改變成 { 0x11 , 0x22 , 0x33 ,0x44, 0x55 , 0x66}
那我要如何讓廣播去更新成我新的pRandomAddress裡的值,有甚麼函式可以更新嗎
1.
要发送到应用程序的感兴趣的事件。事件将被发送到GapAdv_create()中给出的回调函数。
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
6 return bleStk_initAdvSet(BLEAppUtil_advCB, advHandle, GAP_ADV_EVT_MASK_ALL,
7 advInitInfo->advParam, advInitInfo->advDataLen ,
8 advInitInfo->advData, advInitInfo->scanRespDataLen,
9 advInitInfo->scanRespData);
10 }
可以看到,注册的广告回调事件就全部了。但是,这仅适用于 BLEAppUtil 层
或许可以用把你的值作为参数传走
user guide 可以看下
https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_Bluetooth_gap-cc23xx.html
我找到了這篇文章 CC2640之广播MAC地址_cc2640设置广播地址-CSDN博客
他在scanResData1裡面新增GAP_ADTYPE_MANUFACTURER_SPECIFIC 是可以存MAC Address,之後利用
BLEAppUtil_initAdvSet去更新。
但是在CC2340裡的Syscfg,勾選這個識別碼
會顯示,
似乎不太一樣,還是說CC2340本身有其他參數可當作識別碼
通过使用GAP_ADTYPE_MANUFACTURER_SPECIFIC
数据类型,我们可以在广告数据中放入我们想要的任何内容。在本例中是0xAA
,0xBB,
但如果您愿意,您可以将其更改为其他内容。
请在以下link中找到这部分
然后查看使用示例
观察来看应该是syscfg(0x0D00, )和代码( 0x0D,0X00)(分成两段)的表示不一致
我嘗試過GAP_ADTYPE_MANUFACTURER_SPECIFIC,但是他所更新的並不是BLE Device Address,而我真正想要在廣播更新的是BLE Device Address,如下圖,
我想要達成的目標是,不利用Syscfg,而是程式運行中利用Code更改Random Address的內容之後,讓廣播更新BLE Device Address,但我目前嘗試了很多方法,都無法成功更新BLE Device Address
而且我查看了fcfg->deviceInfo.bleAddr的記憶體位址內容,發現他的Addreess是{B5 , 13 , F8 , 93 , 72 , 84}
是因為他有兩個Address,一個是燒錄在晶片上的,一個可以被更改嗎?
不然我設定的Address應該要是{CF , FF , FF , FF , FF ,FF}