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

CC2541 central與peripheral的連線問題

我設計的系統上,是由central端發起連線的,而central端已事先知道peripheral的MAC address

故我做了以下過程

1.peripheral 廣播

2.central scan request

3. 此時我在central端加入,simpleBLEAddDeviceInfo( &(PeripheralMACaddr[0]), 0x00 );,預計透過這個建立連線

4.peripheral scan response

5.central connect request

if ( p->simpleBLEState == BLE_STATE_IDLE ){

peerAddr = simpleBLEDevList[0].addr;
addrType = simpleBLEDevList[0].addrType;

GAPCentralRole_EstablishLink( DEFAULT_LINK_HIGH_DUTY_CYCLE,
DEFAULT_LINK_WHITE_LIST,
addrType, peerAddr );
}

至此可以連線會被建立,也能notify。

但我今天刻意間在central端,填入peripheral的MAC address的地方,也就是simpleBLEAddDeviceInfo( &(PeripheralMACaddr[0]), 0x00 );
PeripheralMACaddr[ ]的內容值改變,意圖使其故意成功無法連線。

但我發現這樣做仍然會有機會"成功"建立起兩者的連線,請問這是為什麼?

Yan:

Huazhen Jiang,

这个原理上是不成立的,你确定你修改地址成功了吗?

Huazhen Jiang:

回复 Yan:

請問您指的修改地址是指在central端上儲存的"預先寫好的peripheral端MAC address嗎"??這點是確認的。

而我也有在central端連線成功時,加了一段程序設break point,查看連線成功的MAC address是不是與我預先寫好的一致,如下:

case GAP_LINK_ESTABLISHED_EVENT: { BLE_DEV *p = &(gDev[simpleBLEScanIdx]);uint8 tempAddr[6]= {0};osal_memcpy(tempAddr ,pEvent->deviceInfo.addr,6);

..

break;

}

結果是不一致,我的central端是與正在進行廣播的peripheral MAC address連線成功。我也感到很納悶,因為我連線動作已經指定對simpleBLEDevList[0]做連接,所以不得其解

#define DEFAULT_LINK_HIGH_DUTY_CYCLE FALSE

#define DEFAULT_LINK_WHITE_LIST FALSE

uint8 addrType= simpleBLEDevList[0].addrType;

uint8 *peerAddr= simpleBLEDevList[0].addr;

GAPCentralRole_EstablishLink( DEFAULT_LINK_HIGH_DUTY_CYCLE, DEFAULT_LINK_WHITE_LIST, addrType, peerAddr );

 

赞(0)
未经允许不得转载:TI中文支持网 » CC2541 central與peripheral的連線問題
分享到: 更多 (0)