EE/Embedded Systems

[nRF52BLE][2]Connection and Softdevice

esmJK 2021. 1. 4. 13:33

2) Connection

참고: https://devzone.nordicsemi.com/nordic/short-range-guides/b/bluetooth-low-energy/posts/bluetooth-smart-and-the-nordics-softdevices-part-2

Connection 요소는 크게 Initializing - Connection Parameters - Whitelisting - Connection Terminating 으로 나눌 수 있는데, 어떻게 진행되는지, API 요구사항은 뭔지 알아본다.

 

IoT와 밀접한 연관을 가지는 블루투스가 어떤 구조를 목표로 했는지를 먼저 본다. 아래 그림과 같다. 하나의 Central (Master)가 여러개의 Peripheral과 연결될 수 있는 구조이다. BR/EDR은 Bluetooth Classic 을 뜻하며 Nordic Softdevice 는 이를 지원하지 않는다. 기술이 진화할수록 여러 형태의 Topology가 생길 수 있다고 한다.

Initializing

Central이 Advertising Packet을 받고 원하는 기기라고 판단되어 Connect Request를 보낼때 시작된다. Advertiser가 Advertising Packet을 보내고 난 후의 RX 기간동안만 Connect Request를 받을 수 있다.

Connect Request를 승락하기 위한 조건은 Connectable Mode 의 Advertiser 이어야 하며,

  • whitelist 없이 Advertising 또는
  • whitelist 존재하지만 initiator의 주소가 whitelist에 있거나
  • Directed Advertising이며 initiator의 주소와 맞아야 한다.

Connect Request가 승락된다면 다음 사이클에는 Advertising을 중지하고 Connect Request Packet의 인자가 정의한 행동양식에 따라야 한다. 이전 포스팅에서 간략히 다뤘던 Procedure를 다시 보시면 이해가 더 잘 간다. Channel 38에 Connection Request를 받게 될 때의 반응은 다음 그림과 같다.

 

첫 Connection Packet (Connect Event)는 transmit window 안에서 일어나야 하며 trasnmit window는 size 와 offset 이 정의되어 있어야 한다. 이후 다음과 같은 변화가 일어난다.

Advertiser → Slave

Initiator → Master

Master는 Connection interval 마다 Connect Event Packet을 내보내고, Slave는 이에 맞게 RX Windows를 첫 Connection Event 이후 계속 Connection Interval 마다 열어준다. 이 Connection Event Packet은 Data Payload를 포함하거나 포함하지 않을 수 있다.

Advertiser는 여섯 Connection Interval동안 Connection Packet이 오지 않으면 Connection을 Termination 한다. Master는 Connect Request가 Advertiser에 의해 받아들여졌는지 알 수 없기 때문에 Connection Termination이 일어날 때까지 Connection Event Packet을 지속적으로 보낸다.

 

Connection Paramters

Connection이 이루어지려면 Master와 Slave의 소통 방식을 결정하는 Connection Parameter가 정확히 설정되어 있어야 한다. Parameter에 대한 자세한 명세는 위 참고 링크를 참고한다.

 

When in Connection

linklayer 에는 Advertising Data Packet 과 Data Channel Packet을 위한 format은 하나 뿐이다. 형태는 다음과 같다. Access Address는 CONNECT REQ 패킷에 포함된 address 이다.

transmitSeqNum = sn

nextExpectedSeqNum = nesn

Master와 Slave 모두 Packet을 받을 때 Packet의 NESN은 device의 sn 과 비교된다. 같다면 NAK 이며 이전의 TX 데이터를 다시 보내고 다르다면 sn 으로, 새로운 데이터를 보낸다.

 

Nordic Softdevice를 이용해 연결하는 방법

  • Advertising Packet을 Scan하고 Receive하면 알림

sd_ble_gap_scan_start(ble_gap_scan_params_t const *p_scan_params))

  • Advertising Packet을 Scan하고 주소가 일치하면 Connect Request 보냄

sd_ble_gap_connect( ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params))

  • Terminate Connection

sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code))

  • Stop Scanning

sd_ble_gap_scan_stop()

Initiate / Terminate 시 받을 수 있는 GAP Event

각각의 Event는 ble_evt_t 구조체의 Parameter에 정의되어 온다.

BLE_GAP_EVT_ADV_REPORT

BLE_GAP_EVT_CONNECTED

BLE_GAP_EVT_DISCONNECTED