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

CC2541做主机,协议包为1.4.2.2 ,配对链接成功后,读/写操作提示ATT_ERROR_RSP,为什么?

CC2541做主机,配对链接成功后,执行GATT_WriteCharValue写操作,OSALMsg信息提示ATT_ERROR_RSP,信息如下:

1,执行GATT_WriteCharValue操作

{ attWriteReq_t AttReq; AttReq.handle = (SimpleBLEReadHdl+1)/*0x0036, notify configuration handle */; AttReq.len = 2;
AttReq.sig = 0;
AttReq.cmd = 0;
AttReq.pValue = GATT_bm_alloc( simpleBLEConnHandle, ATT_WRITE_REQ, 2, NULL );
if (AttReq.pValue != NULL)
{ AttReq.pValue[0] = LO_UINT16(GATT_CLIENT_CFG_NOTIFY);
AttReq.pValue[1] = HI_UINT16(GATT_CLIENT_CFG_NOTIFY); if (GATT_WriteCharValue( simpleBLEConnHandle, &AttReq, simpleBLETaskId ) != SUCCESS)
{
GATT_bm_free((gattMsg_t *)&AttReq, ATT_WRITE_REQ);
}

}

2, 系统信息OSALMSG 相应ATT_ERROR_RSP错误,打印错误信息如下: 

sprintf((char *)pStrbug, ": %x %x %x\r\n", pMsg->msg.errorRsp.errCode,
pMsg->msg.errorRsp.handle,
pMsg->msg.errorRsp.reqOpcode);

–> : 3 31 12

3, errCod: 3 查资料是如下意思

#define INVALID_TASK              0x03

烦请各位大侠分析下原因,知道原因的告知下,多谢!

da qin zheng sheng:

使用抓包软件分析一下。

Viki Shi:

用官方例程测试过没?另外,最好提供抓包文件帮助判断

bing zhou:

回复 Viki Shi:

Hi, Viki
1,这个问题的背景资料是,有2个不同型号的BLE模块作为从机,CC2541作为主机分别去连接,其中1款从机工作完全正常,另1款从机出现这个问题,主机完全一样。2, errcode : 3 表示什么意思, 代码里定义是#define INVALID_TASK0x03,但我觉得不是这个意思。对吗?3, 利用Notebook自身的蓝牙资源,运行TI packet sinffer软件,可以实现抓包吗?

Viki Shi:

回复 bing zhou:

看描述怀疑是不同型号蓝牙模块的参数设置问题,这块建议排查.
error code的含义代码里都列出来了, 就是字面意思:
#defineFAILURE0x01Failure.
#defineINVALID_EVENT_ID0x06Invalid Event ID.
#defineINVALID_INTERRUPT_ID0x07Invalid Interupt ID.
#defineINVALID_MEM_SIZE0x0BInvalid Memory Size.
#defineINVALID_MSG_POINTER0x05Invalid Message Pointer.
#defineINVALID_TASK0x03Invalid Task.
#defineINVALIDPARAMETER0x02Invalid Parameter.
#defineKEY_CHANGE0xC0Key Events.
#defineMSG_BUFFER_NOT_AVAIL0x04No HCI Buffer is Available.
#defineNO_TIMER_AVAIL0x08No Timer Available.
#defineNV_BAD_ITEM_LEN0x0CNV Bad Item Length.
#defineNV_ITEM_UNINIT0x09NV Item Uninitialized.
#defineNV_OPER_FAILED0x0ANV Operation Failed.
#defineSUCCESS0x00SUCCESS.
#defineSYS_EVENT_MSG0x8000A message is waiting event.

bing zhou:

回复 Viki Shi:

Hi, Viki:
1,你的意思是排查主机的参数设置,还是从机的参数设置?以下是主机配置基本是跟官网demo一样,如下:

{simpleBLETaskId = task_id;
// Setup Central Profile{uint8 scanRes = DEFAULT_MAX_SCAN_RES;GAPCentralRole_SetParameter ( GAPCENTRALROLE_MAX_SCAN_RES, sizeof( uint8 ), &scanRes );}// Setup GAPGAP_SetParamValue( TGAP_GEN_DISC_SCAN, DEFAULT_SCAN_DURATION );GAP_SetParamValue( TGAP_LIM_DISC_SCAN, DEFAULT_SCAN_DURATION );//GAP_SetParamValue( TGAP_CONN_EST_SUPERV_TIMEOUT, DEFAULT_UPDATE_CONN_TIMEOUT );GGS_SetParameter( GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, simpleBle_GetAttDeviceName()/*(uint8 *) simpleBLEDeviceName*/);
// Setup the GAP Bond Manager{uint32 passkey = simpleBle_GetPassword();uint8 pairMode = DEFAULT_PAIRING_MODE;uint8 mitm = DEFAULT_MITM_MODE;uint8 ioCap = DEFAULT_IO_CAPABILITIES;uint8 bonding = DEFAULT_BONDING_MODE;
if(simpleBle_GetIfNeedPassword()){pairMode = GAPBOND_PAIRING_MODE_INITIATE;}else{pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ;}GAPBondMgr_SetParameter( GAPBOND_DEFAULT_PASSCODE, sizeof( uint32 ), &passkey );GAPBondMgr_SetParameter( GAPBOND_PAIRING_MODE, sizeof( uint8 ), &pairMode );GAPBondMgr_SetParameter( GAPBOND_MITM_PROTECTION, sizeof( uint8 ), &mitm );GAPBondMgr_SetParameter( GAPBOND_IO_CAPABILITIES, sizeof( uint8 ), &ioCap );GAPBondMgr_SetParameter( GAPBOND_BONDING_ENABLED, sizeof( uint8 ), &bonding );}
// Initialize GATT ClientVOID GATT_InitClient();
// Register to receive incoming ATT Indications/NotificationsGATT_RegisterForInd( simpleBLETaskId );
// Initialize GATT attributesGGS_AddService( GATT_ALL_SERVICES );// GAPGATTServApp_AddService( GATT_ALL_SERVICES ); // GATT attributes
// Register for all key events – This app will handle all key eventsRegisterForKeys( simpleBLETaskId );// makes sure LEDs are offHalLedSet( (HAL_LED_1 | HAL_LED_2), HAL_LED_MODE_OFF );// Setup a delayed profile startuposal_set_event( simpleBLETaskId, START_DEVICE_EVT );
}

2, 另一个背景资料是用手机APP去连接那块不成功的BLE从机,测可以正常通信没有问题,也就是说手机APP去连接2块BLE从机,都能正常工作。CC2541主机相当于扮演手机APP,为什么其中1块BLE从机会出现这个现象?手机APP和CC2541主机的差异在哪里了

bing zhou:

回复 Viki Shi:

Hi, Viki:
1,2款BLE从机的通信通道的差异是 a, 1款是用CHAR3, CHAR4 通道, 通信OKb, 1款是用CHAR6, CHAR7通道, 通信异常2,CC2541主机跟2款BLE从机通信的处理唯一差异是连接使用不同的UUID,而获得不同的手柄地址。

Viki Shi:

回复 bing zhou:

你说的是特征值吧?蓝牙的通道有40个,每个通道2MHz。其中3个广播通道,37个数据通道。
TI的官方例程里默认设置是,在广播阶段三个信道【37、38、39】同时广播。等建议连接以后,按照一定的规律在数据通道channel 0~36进行跳频通信

bing zhou:

回复 Viki Shi:

Hi, Viki:
是特征值,我表述错误。这个问题根源是在从机还是主机?

bing zhou:

回复 Viki Shi:

Hi, Viki:
CC2541 作为主机是BT 4.0版本, 而从机的BLE是BT 4.2版本,版本差异是否是导致这个问题的原因?

赞(0)
未经允许不得转载:TI中文支持网 » CC2541做主机,协议包为1.4.2.2 ,配对链接成功后,读/写操作提示ATT_ERROR_RSP,为什么?
分享到: 更多 (0)