Other Parts Discussed in Thread: CC2340R5, UNIFLASH, ENERGYTRACE
主题中讨论的其他器件:CC2340R5、 UNIFLASH、 ENERGYTRACE
我尝试将 CC2340R5模块设置为广播角色、并将广播间隔设置为1000ms、并 使用默认参数启用制造商特定数据。
但 TI 的 BLE 模块无法广播数据包。
请参考下图。
此致、
Sapthagiri.
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.
Other Parts Discussed in Thread: CC2340R5, UNIFLASH, ENERGYTRACE
我尝试将 CC2340R5模块设置为广播角色、并将广播间隔设置为1000ms、并 使用默认参数启用制造商特定数据。
但 TI 的 BLE 模块无法广播数据包。
请参考下图。
此致、
Sapthagiri.
我针对广播执行的步骤:
从适用于 CC2340R5板的 SDK 7.20中导入了基本 BLE 示例代码。
在中、我将器件角色从外设角色更改为广播。
3.启用1000ms 的广播间隔
并在 BLE 堆栈、公司标识符中启用三个特定于制造的数据、使其具有默认值、并将"附加数据"添加为0x11。
配置后我面临的问题:
1.无法检测我的 Android 应用程序中的数据包。
2、如果我尝试禁用广告间隔,我只能在一部手机中发现包,但在所有手机中。
以及我应如何在制造商特定数据中添加额外的特定数据。 因为在我的项目中、我需要从 I2C 获取数据并将这4个字节的 I2C 数据发送到制造特定数据中。
我尝试在文件(ti_ble_config.c)中添加一些硬代码数据、例如0xFF。 但是、当我尝试构建代码时、硬代码会被删除、因为它是派生文件。
请告诉我如何在代码中添加特定于制造商的数据。

您好、Sapthagiri、
const BLEAppUtil_AdvInit_t broadcasterInitAdvSet1 =
{
/* Advertise data and length */
.advDataLen = sizeof(advData1),
.advData = advData1,
/* Scan respond data and length */
//.scanRespDataLen = 0,
//.scanRespData = NULL,
//ADD these two lines and comment the previous ones:
/* Scan respond data and length */
.scanRespDataLen = sizeof(scanResData1),
.scanRespData = scanResData1,
.advParam = &advParams1
};希望它有所帮助。
大卫。
先生,
1.我应用了所有的更改,正如你提到的,但仍然无法检测到它在我的手机。
2.bq452_EVT_ADVRpt_t Stk_Gap 结构存在于 bleStk_pfnGapScanCB_t 结构中、用作函数指针。
声明的函数指针的所有位置都不会在任何位置使用(在 ble_stack_api.h 文件中)。
3.主席先生,请告诉我或提供一些代码片段,说明 如何调用该函数并插入4个 字节的数据。 我尝试了所有的方法,但无法找到解决方案。
typedef void (*bleStk_pfnGapScanCB_t) (uint32_t event,
GapScan_data_t *pBuf,
uint32_t *arg);
尊敬的 David:
1.我使用的是 TI 的 Simplelink Connect 应用
2.我为"传统事件属性选项"使用的配置值:可扫描的不直接。
我卸载了 Simplelink Connect 应用程序并重新安装它。 现在、我能够看到 BLE 器件。
-->但我应该如何在广告包中添加 I2C 数据。
您能为其提供任何代码片段吗?
我正在执行一个 TPMS (轮胎气压监控系统)项目、在其中我需要在广告包本身中宣传压力、温度数据。
尊敬的 David:
我尝试了一种根据 TI BLE5堆栈指南 https://dev.ti.com/tirex/explore/content/simplelink_lowpower_f3_sdk_7_20_00_29/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/gap-cc23xx.html#gap-roles 更新广播数据的方法
请参阅上面链接中的列表44图片。
但通过添加该代码、我的 BLE 模块无法发送任何广播包。 请参考我添加的以下代码。
void Update_Parameters(void)
{
bStatus_t status;
status = GapAdv_prepareLoadByHandle(broadcasterAdvHandle_1, GAP_ADV_FREE_OPTION_DONT_FREE);
if (status == SUCCESS)
{
// Sample buffer modification
advData1[26] = 0xAA;
// Reload buffer to handle
GapAdv_loadByHandle(broadcasterAdvHandle_1, GAP_ADV_DATA_TYPE_ADV, broadcasterInitAdvSet1.advDataLen, advData1);
}
}您好、Sapthagiri、
1.您在何处/何时调用 Update_Parameters (void)函数? 我建议从 Broadcaster_Adv 处理程序调用它、添加 BLEAPPUTIL_ADV_END 事件的案例。 不要忘记在 broadcasterAdvHandler.EventMask 中添加 BLEAPPUTIL_ADV_END 事件标志。 不过、这将触发持续的广播修改、因此最好考虑使用额外的标志(updateAdvData)来评估何时更新数据。 可以通过您选择的中断(例如计时器)将该额外标志设置为 true。
BLEAppUtil_EventHandler_t broadcasterAdvHandler =
{
.handlerType = BLEAPPUTIL_GAP_ADV_TYPE,
.pEventHandler = Broadcaster_AdvEventHandler,
.eventMask = BLEAPPUTIL_ADV_START_AFTER_ENABLE |
BLEAPPUTIL_ADV_END_AFTER_DISABLE |
BLEAPPUTIL_ADV_END
};
void Peripheral_AdvEventHandler(uint32 event, BLEAppUtil_msgHdr_t *pMsgData)
{
switch(event)
{
.
.
.
case BLEAPPUTIL_ADV_END:
{
if(updateAdvData)
{
updateAdvData = false;
//Don't free anything since we're going to use the same buffer to re-load
status = GapAdv_prepareLoadByBuffer(broadcasterAdvHandle_1, GAP_ADV_FREE_OPTION_DONT_FREE);
//Only update the data when return is successful
if (status == SUCCESS)
{
// Sample buffer modification
advData1[26] = 0xAA;
// Reload buffer to handle
// Here the advDataLen = sizeof(advData1) and it is setup in the app\_peripheral.c
// under advSetInitParamsSet_1
GapAdv_loadByHandle(broadcasterAdvHandle_1, GAP_ADV_DATA_TYPE_ADV, broadcasterInitAdvSet1.advDataLen, advData1);
}
break;
}
}
}
}
3、要使用固定地址、可以在 BLE -一般配置-地址模式下从 SYSCFG 执行该操作、然后选择公共地址。 要查找公用地址值、请连接您的电路板、转到 Uniflash - 存储器、然后搜索存储在地址为0x4E000058的特殊寄存器中的6字节长值。 
此致、
大卫。
先生,
1.我已经通过 分别添加 BLEAPPUTIL_ADV_END 事件尝试了上述方法。
但之后仍然没有发生广播。
2.我能够使用以下命令修复 MAC 地址:
#ifdef CC23X0
// IMPORTANT: Please change the the address below
// Note: addresses are byte resevered in the arrays.
uint8_t ownAddr[B_ADDR_LEN] = { 0x0D, 0x35, 0x1E, 0xB0, 0x6F, 0x80 };
#endif
#ifdef CC23X0
// Set the BD Address
HCI_EXT_SetBDADDRCmd(ownAddr);
#endif
在"BLE - General Configurations - Address Mode"中的 SYSCFG 中设置参数、然后选择"Public Address"。