BLE handapeun mikroskop (ATTы GATTы…)

BLE handapeun mikroskop (ATTы GATTы...)

BLE handapeun mikroskop (ATTы GATTы…)

Bagian 1, Tinjauan

Rada lila geus kaliwat saprak spésifikasi munggaran pikeun Bluetooth 4.0 dirilis. Sareng, sanaos topik BLE pisan pikaresepeun, éta tetep nyéépkeun seueur pamekar kusabab pajeulitna. Dina artikel kuring saméméhna, kuring utamana nempo tingkat panghandapna, Link Lapisan jeung Lapisan Fisik. Hal ieu ngamungkinkeun urang pikeun nyingkahan kedah nganggo konsép anu rumit sareng ngabingungkeun sapertos Protokol Atribut (ATT) sareng Profil Atribut Umum (GATT). Nanging, teu aya anu badé angkat, tanpa ngartos aranjeunna, mustahil pikeun ngembangkeun alat anu cocog. Dinten abdi hoyong bagikeun pangaweruh ieu sareng anjeun. Dina artikel abdi abdi bakal ngandelkeun buku ajar pikeun beginners ti ramatloka Nordic. Ku kituna hayu urang ngamimitian.

Naha sagalana hésé pisan?

Dina pamanggih kuring, éta langsung écés yén ngatur alat via smartphone mangrupakeun topik pisan ngajangjikeun tur langgeng. Ku alatan éta, aranjeunna mutuskeun pikeun ngawangun éta langsung sareng maksimal. Sangkan pabrik rupa-rupa gadget teu datang nepi ka protokol sorangan, nu lajeng bakal sauyunan. Ku kituna kasusah. Geus dina tahap kahiji, aranjeunna diusahakeun squeeze sagalana mungkin kana protokol BLE. Sareng henteu masalah naha éta bakal mangpaat engké atanapi henteu. Salaku tambahan, aranjeunna nyayogikeun kamungkinan ngalegaan daptar alat pikeun masa depan.

Hayu urang tingali dina gambar dimana diagram protokol BLE digambar. Ieu diwangun ku sababaraha lapisan. Lapisan fisik panghandapna (PHY) tanggung jawab pikeun saluran radio alat. Link Layer (LL) ngandung sakabéh runtuyan bait dina pesen dikirimkeun. Dina artikel saméméhna urang diajar persis ieu. Host Controller Interface (HCI) mangrupikeun protokol pertukaran antara lapisan BLE atanapi chip upami Controller sareng Host dilaksanakeun dina chip anu béda. Logis Link Control na Adaptasi Protocol (L2CAP) tanggung jawab pikeun formasi pakét, framing, kontrol kasalahan jeung assembly pakét. Protokol Manajer Kaamanan (SMP) tanggung jawab pikeun énkripsi pakét. Propil Aksés Umum (GAP) tanggung jawab pikeun bursa awal data antara alat pikeun nangtukeun "Saha saha". Éta ogé kalebet scanning sareng iklan. Dina artikel ieu kuring baris difokuskeun dua bagian sésana tina protokol - GATT na ATT. GATT mangrupakeun superstructure of ATT, ngarah raket intertwined.

BLE handapeun mikroskop (ATTы GATTы...)

Pikeun nyederhanakeun carita, abdi hoyong ngalih kana analogi. Kuring ngadéngé éta wae tur hoyong ngarojong eta. Pikirkeun alat BLE salaku lomari buku sareng sababaraha rak. Unggal rak nyaéta téma anu misah. Contona, urang boga rak kalawan fiksi ilmiah, matématika, jeung énsiklopédi. Dina unggal rak aya buku kalawan topik husus. Sareng sababaraha buku bahkan gaduh téténggér kertas sareng catetan. Salaku tambahan, urang gaduh katalog kertas leutik sadaya buku. Upami anjeun émut, perpustakaan sakola mangrupikeun kotak anu sempit kalayan kartu kertas. Kalayan analogi ieu, kabinét mangrupikeun profil alat kami. Rak mangrupikeun jasa, buku mangrupikeun ciri, sareng katalog mangrupikeun tabel atribut. Tetengger dina buku mangrupikeun deskriptor, anu kuring ogé bakal ngobrol engké dina langkung rinci.

Saha waé anu parantos ngembangkeun alat terang yén seueur proyék gaduh potongan kode anu sami. Kanyataan yén seueur alat gaduh pungsi anu sami. Salaku conto, upami alat didamel ku batré, maka masalah ngecas sareng ngawas tingkatna bakal sami. Sami lumaku pikeun sensor. Sabenerna, pendekatan berorientasi obyék pikeun program "Nyadiakeun kamampuhan pikeun nyieun objék nu ngagabungkeun sipat jeung paripolah kana union mandiri nu lajeng bisa dipaké deui". Dina pamanggih kuring, BLE ngusahakeun pendekatan anu sami. Propil dikembangkeun ku Bluetooth Special Interest Group (SIG). Alat ti pabrik anu béda anu gaduh propil anu sami kedah tiasa dianggo saling tanpa kasusah. Propil, dina gilirannana, diwangun ku jasa, sarta jasa tina ciri, supplemented ku deskriptor. Sacara umum bisa kasampak kawas kieu:

BLE handapeun mikroskop (ATTы GATTы...)

Contona, anggap diagram profil monitor denyut jantung (gelang kabugaran). Éta diwangun ku dua jasa sareng sababaraha ciri. Ti dinya hirarki profil langsung janten jelas. Karakteristik titik pamariksaan ngareset jumlah pengeluaran kalori ka nol.

1. Ladenan denyut jantung ngawengku tilu ciri (0x180D):
    a) Karakteristik denyut jantung wajib (0x2A37)
    b) Karakteristik posisi sensor awak opsional (0x2A38)
    c) Karakteristik kondisional titik kontrol denyut jantung (0x2A39)
2. Ladenan pangropéa batré (0x180F):
    a) Karakteristik tingkat muatan batré wajib (0x2A19)

UUID

Supados urang unik ngakses elemen profil (jasa, ciri jeung deskriptor), urang kudu nomer kabeh kumaha bae. Pikeun tujuan ieu, konsep sapertos Universally Unique ID (UUID) atanapi Universally Unique Identifier diwanohkeun. UUID dituduhkeun dina kurung unggal baris. Sareng aya hiji peculiarity di dieu. Pikeun UUID, kami mutuskeun nganggo kode 16 sareng 128 bit panjangna. Naha, anjeun nanya? Dina protokol BLE, sadayana ngeunaan konservasi énergi. Ku alatan éta, diménsi 16 bit cukup lumrah. Teu dipikaresep yén leuwih ti 65 rébu bakal dijieun dina mangsa nu bakal datang. jasa unik sarta ciri. Ayeuna, sadayana anu aranjeunna tiasa diitung (émut ti mana asalna - "anjeunna ogé ngitung anjeun" :-)) Unsur wilangan propil, jasa, ciri и deskriptor anjeun tiasa ningali dina tautan.

Nanging, kuring nyangka sadayana émut kana carita kalayan 4 bait alamat IP dina Internét. Mimitina urang panginten éta cekap, tapi ayeuna urang masih teu tiasa ngalih ka alamat 6-bait. Dina raraga teu ngulang kasalahan ieu sareng masihan bébas rein ka leungeun playful DIYers, SIG geuwat mutuskeun pikeun ngawanohkeun UUIDs 128-bit. Ieu pribadi reminds kuring tina unlicensed 433 MHz band, nu dibikeun ka sagala sorts Kulibins ti saluran radio. Dina kasus urang, hiji identifier 128-bit tina jasa jeung ciri ieu farmed kaluar. Ieu ngandung harti yén urang, pikeun jasa jeung alat urang, bisa ngagunakeun ampir sagala nilai 128-bit. Sadayana sami, kamungkinan munculna UUID anu sami nuju nol.

Kanyataanna, UUIDs 16-bit pondok gaduh ekstensina kana nilai 128-bit. Dina spésifikasi, extension ieu disebut Bluetooth Base UUID sarta ngabogaan nilai 00000000-0000-1000-8000-00805F9B34FB. Upami, contona, UUID atribut 16-bit ngagaduhan nilai 0x1234, maka UUID 128-bit anu sami bakal gaduh nilai 00001234-0000-1000-8000-00805F9B34FB. Sareng rumus anu saluyu dirumuskeun:

                                128_bit_value = 16_bit_value * 2^96 + Bluetooth_Base_UUID

Kuring henteu weruh ti mana angka magic ieu asalna. Lamun salah sahiji pamiarsa nyaho, hayu aranjeunna nulis dina komentar (A pamaké kalawan nickname Sinopteek geus dipigawé ieu. Tempo komentar). Sedengkeun pikeun datang nepi ka 128-bit UUIDs, prinsipna mah anjeun tiasa nganggo husus generatoranu bakal ngalakukeun eta pikeun anjeun.

ATTy GATTy...

Sabenerna, lajeng fun dimimitian. Hayu atuh ngingetan yén ATT dumasar kana hubungan klien-server. Ayeuna urang nempo alat server. Éta ngandung inpormasi sapertos nilai sensor, status switch lampu, data lokasi, jsb. Ayeuna yén sadaya "pamilon dina parade kami" wilanganana, urang kedah kumaha waé nempatkeunana dina mémori alat. Jang ngalampahkeun ieu, urang nempatkeun aranjeunna dina tabel disebut tabel atribut. Inget ieu ogé. Ieu mangrupikeun jantung BLE. Ieu naon urang bakal mertimbangkeun salajengna. Ayeuna urang bakal nelepon unggal garis hiji atribut. tabél ieu lokasina jero dina tumpukan jeung, sakumaha aturan, urang teu boga wasa langsung ka dinya. Urang inisialisasi sareng ngaksés éta, tapi anu kajantenan di jero disumputkeun tina kami di tukangeun tujuh anjing laut.

Hayu urang nempo gambar tina spésifikasi, tapi saméméh éta, abdi hoyong geura-giru ngagambar perhatian kana kabingungan sering dina istilah, nyaéta dina deskriptor. Kalungguhan deskriptor pikeun ngalengkepan pedaran ngeunaan ciri. Nalika perlu dilegakeun kamampuanna, deskriptor dianggo. Éta ogé atribut, sareng sapertos jasa sareng ciri, aranjeunna aya dina tabel atribut. Urang bakal nalungtik aranjeunna di jéntré dina bagian kadua artikel. Sanajan kitu, kadang deskriptor nujul ka nomer baris dina tabel atribut. Ieu kudu tetep dina pikiran. Pikeun ngahindarkeun kabingungan, urang bakal nganggo istilah "penunjuk atribut" pikeun tujuan ieu.
BLE handapeun mikroskop (ATTы GATTы...)

Janten atribut mangrupikeun nilai diskrit anu ngagaduhan sipat-sipat anu aya hubunganana sareng éta:
1. Atribut cecekelan mangrupa indéks tabel pakait jeung atribut
2. Tipe Atribut nyaéta UUID anu ngajelaskeun jinisna
3. Atribut Ajén nyaéta data indéks ku pointer atribut
4. Idin Atribut nyaéta bagian tina atribut, idin, anu teu tiasa dibaca atanapi ditulis nganggo protokol atribut

Kumaha ngartos sadayana ieu? The pointer atribut nyaeta, rélatif diomongkeun, jumlahna dina tabel urang.
Hal ieu ngamungkinkeun klien pikeun nuduhkeun hiji atribut dina requests maca atawa nulis. Urang tiasa nomer garis kami (atribut) ti 0x0001 ka 0xFFFF. Dina asosiasi kami sareng lomari buku, ieu mangrupikeun nomer kartu dina katalog kertas. Nya kitu, sakumaha dina katalog perpustakaan, kartu disusun dina urutan ngaronjatna jumlah. Jumlah unggal baris saterusna kudu leuwih gede ti nu saméméhna. Kawas di perpustakaan, kadang sababaraha kartu leungit, jadi kalawan kami, meureun aya sela dina panomeran garis. Ieu diwenangkeun. Hal utama anu aranjeunna nuju progressively.

Jinis atribut nangtukeun naon atribut ngagambarkeun. Ku analogi jeung basa C,
dimana aya boolean, variabel numerik jeung string, jadi di dieu. Ku tipe atribut kami mikawanoh
naon urang kaayaan jeung kumaha urang bisa neruskeun gawé bareng atribut ieu. Di handap ieu urang bakal ningali sababaraha jinis atribut khusus. Contona, "deklarasi jasa" (0x2800), "deklarasi karakteristik" (0x2803), "deklarasi deskriptor" (0x2902).

Nilai atribut mangrupa harti sabenerna, hampura tautologi. Upami jinis atribut mangrupikeun senar, maka nilai atribut tiasa, contona, slogan "Halo Dunya !!!". Upami jinis atribut mangrupikeun "deklarasi jasa", maka nilaina nyaéta jasa éta sorangan. Sarta kadangkala ieu informasi ngeunaan dimana manggihan atribut sejen tur sipat maranéhanana.

Idin atribut ngamungkinkeun server ngartos naha aksés maca atanapi nyerat diidinan.
Catet yén idin ieu ngan ukur dilarapkeun kana nilai atribut, sanés kana pointer, jinis, atanapi widang idin éta sorangan. Jelema. upami ngarékam atribut diidinan, maka urang tiasa ngarobih, contona, garis "Halo Dunya !!!" kana baris "Wilujeng enjing". Tapi urang teu bisa nyaram nulis garis anyar atawa ngarobah tipe atribut jeung nunjuk garis salaku "deklarasi jasa". Nalika klien ngahubungi server, klien naroskeun atribut na. Hal ieu ngamungkinkeun klien uninga naon server bisa nyadiakeun. Sanajan teu perlu maca jeung nulis nilai.

Kumaha Sigana mah

Konsep GATT nyaéta ngagolongkeun atribut dina tabel atribut babarengan dina urutan pisan husus tur logis. Hayu urang tingali profil denyut jantung di handap ieu. Kolom paling kénca tabel ieu pilihan. Éta ngan saukur ngajelaskeun ka urang naon garis ieu (atribut). Sadaya kolom anu sanés parantos wawuh ka urang.

BLE handapeun mikroskop (ATTы GATTы...)

Di luhureun unggal grup kami salawasna boga atribut deklarasi jasa. Jinisna sok 0x2800, sareng pointer gumantung kana sabaraha atribut anu parantos aya dina tabél. Idinna sok dibaca wungkul, tanpa auténtikasi atanapi otorisasina. Urang bakal ngobrol ngeunaan konsep ieu saeutik engké. Nilaina nyaéta UUID sanés anu ngidentipikasi naon jasa éta. Dina tabél, nilaina nyaéta 0x180D, anu ditetepkeun ku Bluetooth SIG salaku jasa denyut jantung.

Saatos pengumuman jasa, muncul pengumuman karakteristik. Bentukna sami sareng deklarasi jasa. UUID na sok 0x2803, sareng idinna sok dibaca wungkul tanpa auténtikasi atanapi otorisasina. Hayu urang tingali widang Atribut Nilai, nu ngawengku sababaraha data. Éta salawasna ngandung pointer, UUID, sareng sakumpulan sipat. Tilu unsur ieu ngajelaskeun deklarasi saterusna ngeunaan nilai karakteristik. Pointer sacara alami nunjukkeun lokasi deklarasi nilai karakteristik dina tabel atribut. UUID ngajelaskeun jinis inpormasi atanapi nilai naon anu urang ngarepkeun. Contona, nilai suhu, kaayaan switch lampu, atawa sababaraha nilai sawenang lianna. Sarta pamustunganana sipat, nu ngajelaskeun kumaha nilai karakteristik bisa berinteraksi kalayan.

pitfall sejen awaits kami di dieu. Éta pakait sareng idin atribut sareng sipat karakteristik. Hayu urang tingali gambar tina sipat widang bit tina spésifikasi.

BLE handapeun mikroskop (ATTы GATTы...)

Sakumaha anjeun tiasa tingali, aya ogé sawah di dieu anu nyayogikeun kamampuan maca sareng nyerat. Anjeun bisa jadi wondering naha urang geus maca / nulis idin pikeun atribut jeung harta
maca / nulis pikeun nilai ciri? Naha aranjeunna henteu kedah sami? Kanyataan yén sipat pikeun nilai ciri sabenerna ukur rekomendasi pikeun klien dipaké dina GATT sarta lapisan aplikasi. Ieu ngan saukur petunjuk ngeunaan naon anu bakal diarepkeun ku klien tina atribut deklarasi karakteristik. Hayu urang nempo ieu leuwih jéntré. Jenis idin naon anu gaduh atribut?

1. Idin aksés:
     - maca
     - rékaman
     - maca jeung nulis
2. Idin auténtikasi:
     - auténtikasi diperlukeun
     - euweuh auténtikasi diperlukeun
3. Idin otorisasi:
     - otorisasina diperlukeun
     - euweuh otorisasi diperlukeun

Beda utama antara resolusi atribut jeung sipat ciri nyaéta yén urut dilarapkeun ka server, sarta dimungkinkeun pikeun klien. Pangladén tiasa diidinan maca nilai karakteristik, tapi tiasa meryogikeun auténtikasi atanapi otorisasina. Ku alatan éta, nalika klien requests sipat ciri, urang bakal nampa bacaan nu diwenangkeun. Tapi nalika urang nyobian maca, urang meunang kasalahan. Ku alatan éta, urang aman tiasa ngobrol ngeunaan prioritas idin leuwih sipat. Dina sisi klien, urang teu bisa ménta pangaweruh naon idin hiji atribut boga.

Deskriptor

Hayu urang balik deui ka méja urang. Saatos nyatakeun nilai karakteristik, deklarasi atribut di handap ieu mungkin:
1. Deklarasi ciri anyar (jasa tiasa gaduh seueur ciri)
2. Deklarasi jasa anyar (bisa jadi loba di antarana dina tabél)
3. Ngadéklarasikeun cecekelan

Dina hal karakteristik pangukuran denyut jantung, dina tabel kami, deklarasi nilai karakteristik dipirig ku deklarasi deskriptor. Deskriptor mangrupikeun atribut sareng inpormasi tambahan ngeunaan hiji karakteristik. Aya sababaraha jinis deskriptor. Urang bakal ngobrol ngeunaan aranjeunna sacara rinci dina bagian kadua tulisan ieu. Pikeun ayeuna, urang ngan ukur nyabak kana Deskriptor Konfigurasi Karakter Klién (CCCD). Mibanda UUID sarua jeung 0x2902. Ngagunakeun deskriptor ieu, klien ngabogaan kamampuhan pikeun ngaktipkeun indikasi atawa bewara dina server. Beda antara aranjeunna leutik, tapi masih aya. Bewara teu merlukeun konfirmasi tina resi ti klien. Indikasi merlukeun ieu, sanajan lumangsung dina tingkat GATT, teu ngahontal tingkat aplikasi. Naha kitu, anjeun nanya? Alas, kuring henteu terang ieu. Hayu atuh ngan nyebutkeun yén ahli Nordic nyarankeun ngagunakeun bewara. Sumawona, mariksa integritas bungkusan (nganggo CRC) lumangsung dina dua kasus.

kacindekan

Dina ahir tulisan kuring hoyong nyarios ieu. méja panungtungan nyaéta bit ngabingungkeun. Nanging, kuring milih éta sabab dipasihkeun artikel, nu kuring ngandelkeun. Dina bagian kadua artikel abdi, abdi maksudna pikeun delve deeper kana spésifikasi BlueTooth 4.0. Diagram sareng gambar anu langkung leres ngantosan urang di dinya. Dina bagian katilu, abdi hoyong parse log anu dicandak nganggo program Wireshark tina salah sahiji gadget sareng ningali "hirup" sadayana téori anu urang pelajari.

Karyawan Grup Perusahaan "Satelit Caesar"
Pecherskikh Vladimir

sumber: www.habr.com

Tambahkeun komentar