You are here

Project #015 - Bonding | サイプレス セミコンダクタ

Project #015 - Bonding

In project #14, we looked at the Whitelist feature of the Link Layer, which enables the device to accept requests from a selected list of devices. Today we'll look at the feature of Security Manager Layer to secure and encrypt the link and then store the keys to establish the bonding betweent the two Bluetooth Low Energy enabled devices.

In this project, the CY8CKIT-042-BLE Bluetooth Low Energy Pioneer Kit acts as the GAP Peripheral and the GATT Client. For devices to get bonded, it performs the following operations:

  • Authenticates the devices
  • Encrypts the link
  • Exchange the keys
  • Stores the keys and authentication information

Once the devices are bonded, they do not have to go through the above process again upon reconnection.

You can download this PSoC Creator project here from GitHub: https://github.com/cypresssemiconductorco/PSoC-4-BLE/tree/master/100_Projects_in_100_Days/Day015_Bonding

 

Bonding screen Image

Comments

e.pratt_1639216's picture

This example was very helpful for figuring out the bonding process; However, there is an issue with the pass code displayed through the UART.

The code originally has the following:

case CYBLE_EVT_GAP_PASSKEY_DISPLAY_REQUEST:
           printf("\r\n");
           printf("CYBLE_EVT_GAP_PASSKEY_DISPLAY_REQUEST. Passkey is: %d%d.\r\n",
               HI16(*(uint32 *)eventParam),
               LO16(*(uint32 *)eventParam));

 The number it displays  will vary from 5-7 "decimal" digits however, and upon attempting to use the passkey to pair with the HID_Dongle it will fail most of the time. It seems that the eventParam argument is being split into two separate decimal values from a single 6-digit decimal number. I'm not sure why this is in the example code, but if you remove the upper/lower byte splitting and just display the eventParam as the argument to the printf() format statement, then it gives a 6-digit passcode that works on every try.

Here is the modified code that I had to use to get it to tell me the correct passkey value:

case CYBLE_EVT_GAP_PASSKEY_DISPLAY_REQUEST:
           printf("\r\n");
           printf("CYBLE_EVT_GAP_PASSKEY_DISPLAY_REQUEST. Passkey is: %lu.\r\n",
               *(uint32 *)eventParam);

sachinkhanna786_2753541's picture
Manishdhir23_3181476's picture

このサイトに掲示されているすべてのコンテンツと資料は、「そのままの状態」で提供されます。サイプレス セミコンダクタとその関連サプライヤは、これらの資料について、いかなる目的への適合性をも表明することはありません。また、これらの資料について、すべての保証や条件を放棄します。これには、暗示的な保証および条件、商用性、特定の目的への適合性、すべてのサードパーティの知的財産権に対する権利と非侵害などが含まれますが、これらに制限されることはありません。サイプレス セミコンダクタにより、明示または暗示にかかわらず、禁反言などによるライセンスは、付与されないものとします。このサイトに掲示されている情報の使用には、サードパーティまたはサイプレス セミコンダクタからのライセンスが必要となる場合があります。

このサイトのコンテンツには、特定のガイドラインや使用制限が含まれている場合があります。このサイトにおけるすべての掲示やコンテンツの使用は、サイトの利用規約に準じて行われるものとします。このコンテンツを使用するサードパーティは、制限やガイドラインに従い、このサイトの利用規約を遵守するものとします。サイプレス セミコンダクタとそのサプライヤは、コンテンツや資料、その製品、プログラム、サービスに対し、いつでも修正、削除、変更、改善、向上、その他の変更を加える権利を有します。また、いかなるコンテンツ、製品、プログラム、サービスを予告なく変更または閉鎖する権利を有します。