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

如何测试CC2640R2F的发送和接收长广播(最长255个字节)功能?

下载了评估SDK simplelink_cc2640r2_sdk_1_50_00_71_Evaluation。

但是如何测试 发送 和 接收 长广播呢?

以前的2540抓包工具好像抓不到,手机扫描也没发现。

只看到了老版本的BLE广播。

 

有做过相关测试的同行们,帮忙指点一下,感谢!

Qingsong Du:

发送和接收长广播功能,调出来了,把方法发出来,分享给需要的朋友:

1. 将SimplePeripheral_processGapMessage函数中的 advHandleLegacy 相关操作注释掉,这个是用来发31字节短广播的;

2. 将宏 GAPADV_PARAMS_AE_LONG_RANGE_CONN 中的 .primPhy 和 .secPhy 改为宏GAPADV_PARAMS_LEGACY_SCANN_CONN一样的值,

  分别是 GAP_ADV_PRIM_PHY_1_MBPS 和 GAP_ADV_SEC_PHY_1_MBPS;

3. 修改广播数组长度,advertData[] 改为 advertData[255]。

 

这样再用Central工程接收广播,处理函数是SimpleCentral_processAppMsg。

这里有个问题,接收到的广播长度打印出来是245,而不是255,暂时不清楚具体原因。

 

注意:我用的是评估版的SDK,SDK simplelink_cc2640r2_sdk_1_50_00_71_Evaluation,不是正式发布的1.4版本。

z z46:

回复 Qingsong Du:

请问,你的SimplePeripheral都做了哪些修改呢,我按你说的改了之后按键菜单都 调不出来了,方便把程序贴出来吗。。。。

Alvin Chen:

回复 Qingsong Du:

”这里有个问题,接收到的广播长度打印出来是245,而不是255,暂时不清楚具体原因。“

前导和校验占用了:

• New Advertising channel extension PDU: ADV_EXT_IND– Allows up to 248 byte ADV payload by offloading payload to Data channels– Supports any PHY– Reduces traffic on ADV channels– Mandatory for Coded PHYs

除去前导和校验剩下的248byte。

如何使用请参照:

下面的的第二通道和上面的同学说的差不多。传统的BLE4.0抓包是抓不见的。

dev.ti.com/…/

z z46:

回复 Alvin Chen:

大神,那一楼同学说的配置方法正确不?我的咋不行啊

Alvin Chen:

回复 z z46:

基本是正确的
建议你去申请SIMPLELINK-CC2640R2-BLE5-EVAL,里面有我们做好的程序。
www.ti.com/…/simplelink-cc2640r2-sdk

z z46:

回复 Alvin Chen:

我刚买了几块CC2652,啊,对了,我是在2652上实现的上述功能,修改的地方一样吗?

Alvin Chen:

回复 z z46:

你要是CC2652就更简单了去看Simple Peripheral的程序:

*/static void SimplePeripheral_processGapMessage(gapEventHdr_t *pMsg){ switch(pMsg->opcode) { case GAP_DEVICE_INIT_DONE_EVENT: { bStatus_t status = FAILURE;

gapDeviceInitDoneEvent_t *pPkt = (gapDeviceInitDoneEvent_t *)pMsg;

if(pPkt->hdr.status == SUCCESS) { // Store the system ID uint8_t systemId[DEVINFO_SYSTEM_ID_LEN];

// use 6 bytes of device address for 8 bytes of system ID value systemId[0] = pPkt->devAddr[0]; systemId[1] = pPkt->devAddr[1]; systemId[2] = pPkt->devAddr[2];

// set middle bytes to zero systemId[4] = 0x00; systemId[3] = 0x00;

// shift three bytes up systemId[7] = pPkt->devAddr[5]; systemId[6] = pPkt->devAddr[4]; systemId[5] = pPkt->devAddr[3];

// Set Device Info Service Parameter DevInfo_SetParameter(DEVINFO_SYSTEM_ID, DEVINFO_SYSTEM_ID_LEN, systemId);

Display_printf(dispHandle, SP_ROW_STATUS_1, 0, "Initialized");

// Setup and start Advertising // For more information, see the GAP section in the User's Guide: // software-dl.ti.com/…/

// Temporary memory for advertising parameters for set #1. These will be copied // by the GapAdv module GapAdv_params_t advParamLegacy = GAPADV_PARAMS_LEGACY_SCANN_CONN;

// Create Advertisement set #1 and assign handle status = GapAdv_create(&SimplePeripheral_advCallback, &advParamLegacy, &advHandleLegacy); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);

// Load advertising data for set #1 that is statically allocated by the app status = GapAdv_loadByHandle(advHandleLegacy, GAP_ADV_DATA_TYPE_ADV, sizeof(advertData), advertData); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);

// Load scan response data for set #1 that is statically allocated by the app status = GapAdv_loadByHandle(advHandleLegacy, GAP_ADV_DATA_TYPE_SCAN_RSP, sizeof(scanRspData), scanRspData); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);

// Set event mask for set #1 status = GapAdv_setEventMask(advHandleLegacy, GAP_ADV_EVT_MASK_START_AFTER_ENABLE | GAP_ADV_EVT_MASK_END_AFTER_DISABLE | GAP_ADV_EVT_MASK_SET_TERMINATED);

// Enable legacy advertising for set #1 status = GapAdv_enable(advHandleLegacy, GAP_ADV_ENABLE_OPTIONS_USE_MAX , 0); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);

// Use long range params to create long range set #2 GapAdv_params_t advParamLongRange = GAPADV_PARAMS_LEGACY_SCANN_CONN;

// Create Advertisement set #2 and assign handle status = GapAdv_create(&SimplePeripheral_advCallback, &advParamLongRange, &advHandleLongRange); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);

// Load advertising data for set #2 that is statically allocated by the app status = GapAdv_loadByHandle(advHandleLongRange, GAP_ADV_DATA_TYPE_ADV, sizeof(advertData), advertData); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);

// Load scan response data for set #2 that is statically allocated by the app status = GapAdv_loadByHandle(advHandleLongRange, GAP_ADV_DATA_TYPE_SCAN_RSP, sizeof(scanRspData), scanRspData); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);

// Set event mask for set #2 status = GapAdv_setEventMask(advHandleLongRange, GAP_ADV_EVT_MASK_START_AFTER_ENABLE | GAP_ADV_EVT_MASK_END_AFTER_DISABLE | GAP_ADV_EVT_MASK_SET_TERMINATED);

// Enable long range advertising for set #2 status = GapAdv_enable(advHandleLongRange, GAP_ADV_ENABLE_OPTIONS_USE_MAX , 0); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);

// Display device address Display_printf(dispHandle, SP_ROW_IDA, 0, "%s Addr: %s", (addrMode <= ADDRMODE_RANDOM) ? "Dev" : "ID", Util_convertBdAddr2Str(pPkt->devAddr));

if (addrMode > ADDRMODE_RANDOM) { SimplePeripheral_updateRPA();

// Create one-shot clock for RPA check event. Util_constructClock(&clkRpaRead, SimplePeripheral_clockHandler, SP_READ_RPA_EVT_PERIOD, 0, true, (UArg) &argRpaRead); } }

break; }

赞(0)
未经允许不得转载:TI中文支持网 » 如何测试CC2640R2F的发送和接收长广播(最长255个字节)功能?
分享到: 更多 (0)