一、項(xiàng)目介紹
本系統(tǒng)的主控是CY8C624ABZI,負(fù)責(zé)智能門(mén)鎖的控制邏輯和藍(lán)牙的host,通過(guò)sdio和串口外接一個(gè)型號(hào)為cyw43012的wifi & ble controller combo,為系統(tǒng)提供聯(lián)網(wǎng)和藍(lán)牙功能。
本系統(tǒng)在軟件上由門(mén)鎖模塊、gatt模塊組成:gatt模塊實(shí)現(xiàn)一個(gè)基于gatt的智能門(mén)鎖的profile;門(mén)鎖模塊通過(guò)創(chuàng)建一個(gè)任務(wù)為系統(tǒng)其他應(yīng)用提供門(mén)鎖控制的服務(wù),提供注冊(cè)接口給上層應(yīng)用注冊(cè) 具體的門(mén)鎖驅(qū)動(dòng)。
本項(xiàng)目使用的開(kāi)發(fā)板是 RT-Thread 聯(lián)合英飛凌推出的一款集成32位雙核CPU子系統(tǒng)( ARM Cortex-M4 和 ARM Cortex-M0)的Psoc6-evaluationkit-062S2開(kāi)發(fā)板。
二、CY8C624ABZI和CYW43012介紹
2.1 CY8C624ABZI介紹
2.2 CYW43012介紹
英飛凌的AIROC cyw43012是一款超低功耗單芯片組合設(shè)備,具有雙頻2.4 GHz和5 GHz Wi-Fi 4(802.11n)和藍(lán)牙5.4。CYW43012采用低功耗架構(gòu),非常適合電池供電應(yīng)用,在這些應(yīng)用中,同類(lèi)最佳的功耗至關(guān)重要。CYW43012支持256-QAM(適用于5 GHz頻段的20 MHz通道),支持802.11ac接入點(diǎn),數(shù)據(jù)速率最高可達(dá)78 Mbps。2.4和5GHz頻段均內(nèi)置片內(nèi)功率放大器和低噪聲放大器。
三、CYW43012藍(lán)牙SDK介紹和注意事項(xiàng)
3.1 ATT和GATT介紹
3.1.1 ATT屬性
服務(wù)器持有客戶端需要訪問(wèn)的資源,這些數(shù)據(jù)作為屬性存儲(chǔ)在服務(wù)器上。屬性是一種數(shù)據(jù)表示格式,由四個(gè)字段組成:屬性句柄,屬性類(lèi)型,屬性權(quán)限,屬性值。
屬性句柄用于引用屬性,應(yīng)用通過(guò)句柄訪問(wèn)指定的屬性;屬性類(lèi)型通過(guò)UUID編碼,不同類(lèi)型的屬性具有不同的含義和功能,如一個(gè)屬性的UUID如果為0x2803,表示這個(gè)屬性用于作為特征的開(kāi)始,特別地,除了SIG已經(jīng)定義的類(lèi)型,其他的類(lèi)型主要作為用戶自定義的特征值,如在門(mén)鎖應(yīng)用中,自定義0xDD01為門(mén)鎖開(kāi)關(guān)的特征值;屬性權(quán)限決定客戶端能夠?qū)傩圆扇〉牟僮?;屬性值是屬性存?chǔ)數(shù)據(jù)的字段,在門(mén)鎖wifi配網(wǎng)功能中,屬性值存儲(chǔ)了客戶端想要傳給服務(wù)器進(jìn)行配網(wǎng)的wifi ssid和密碼。
屬性類(lèi)型指定此屬性代表什么。這是通過(guò)使用通用唯一標(biāo)識(shí)符(簡(jiǎn)稱(chēng)為UUID)來(lái)實(shí)現(xiàn)的。UUID是一個(gè)128位的值,任何人都可以將其分配給屬性,而無(wú)需將其注冊(cè)到中央機(jī)構(gòu)。兩個(gè)不同方分配相同UUID的概率非常低(1/2128),因此UUID被認(rèn)為是唯一的。由于這些設(shè)備提供的許多功能都是常見(jiàn)的,因此為預(yù)定義的值保留了一系列UUID值,每個(gè)值都為常見(jiàn)用例公開(kāi)了一組操作和數(shù)據(jù)。為了減少傳輸?shù)臄?shù)據(jù)量,這些值的長(zhǎng)度為16位或32位,并且通過(guò)使用藍(lán)牙基本UUID和簡(jiǎn)單的算術(shù)運(yùn)算來(lái)計(jì)算實(shí)際的UUID。
屬性句柄是一個(gè)非零值,用于引用屬性。通過(guò)增加屬性句柄值,將BLE服務(wù)器的所有屬性存儲(chǔ)在其數(shù)據(jù)庫(kù)中。連續(xù)的屬性不一定要有下一個(gè)整型句柄值。屬性句柄值之間允許有空格,但句柄值必須按升序排列。
屬性權(quán)限指定是否可以讀取和/或?qū)懭胭Y源,以及執(zhí)行此操作所需的安全級(jí)別。允許不同的安全組合。例如,屬性可能不需要讀取權(quán)限,但客戶端可能必須進(jìn)行身份驗(yàn)證才能修改資源。
屬性值可以是固定長(zhǎng)度的,也可以是可變長(zhǎng)度的。對(duì)于可變長(zhǎng)度屬性值,一個(gè)PDU中只允許發(fā)送一個(gè)屬性值。如果該值太長(zhǎng),它可能會(huì)被分到多個(gè)PDU中。
有一種特殊類(lèi)型的屬性不允許讀取,但可以寫(xiě)入、通知或指示(我們稍后將討論最后兩個(gè)操作)。這些屬性稱(chēng)為控制點(diǎn)屬性,因?yàn)樗鼈冎饕糜趹?yīng)用程序控制,而不是在設(shè)備之間傳遞數(shù)據(jù)。
3.1.2 ATT屬性方法
ATT協(xié)議還定義了讀取或?qū)懭雽傩缘姆椒?。支持的方法有六種,因此它們定義了六個(gè)協(xié)議數(shù)據(jù)單元(PDU)。就ATT協(xié)議而言,PDU是將被轉(zhuǎn)發(fā)到(或從)較低層,即邏輯鏈路控制和適配協(xié)議(L2CAP)層接收的分組,并且隨后將被封裝以在物理鏈路上發(fā)送(或分別被發(fā)送到較高層)。這六種方法及其PDU類(lèi)型是:
命令:由客戶端發(fā)送到服務(wù)器并且不調(diào)用響應(yīng)請(qǐng)求:由客戶端發(fā)送到服務(wù)器并且調(diào)用響應(yīng)響應(yīng):當(dāng)接收到請(qǐng)求時(shí)由服務(wù)器發(fā)送到客戶端。
通知:由服務(wù)器發(fā)送到客戶端,而不調(diào)用響應(yīng)。它們是在客戶端沒(méi)有請(qǐng)求它們的情況下發(fā)送的。
指示:由服務(wù)器發(fā)送到客戶端,并調(diào)用響應(yīng)。它們是在客戶端沒(méi)有請(qǐng)求它們的情況下發(fā)送的。
確認(rèn):由客戶端發(fā)送到服務(wù)器,作為對(duì)指示的確認(rèn)。
3.1.3 GATT介紹
??Generic Attribute Profile(GATT)建立在屬性協(xié)議(ATT)之上,并為屬性協(xié)議傳輸和存儲(chǔ)數(shù)據(jù)提供通用的操作和框架。
??GATT定義了兩個(gè)角色:服務(wù)器和客戶端。GATT的角色不一定與特定的GAP角色捆綁在一起,而是可以由更高層的profile指定。
??GATT和ATT不不依賴(lài)于特定的controller,可以在BR/EDR和LE中使用。然而,GATT和ATT是在LE中是要求強(qiáng)制實(shí)現(xiàn)的,在LE應(yīng)用中使用GATT來(lái)發(fā)現(xiàn)設(shè)備能夠提供的服務(wù)。
??GATT服務(wù)器存儲(chǔ)著屬性協(xié)議傳輸需要的數(shù)據(jù),接受來(lái)自GATT客戶端的屬性協(xié)議請(qǐng)求、命令和確認(rèn),GATT服務(wù)器發(fā)送對(duì)請(qǐng)求的響應(yīng)。可以通過(guò)配置,讓GATT服務(wù)器在發(fā)生指定事件時(shí)向GATT客戶端異步地發(fā)送指示和通知。
??GATT規(guī)定了GATT服務(wù)器上包含的數(shù)據(jù)的格式,屬性協(xié)議傳輸?shù)膶傩员桓袷交癁榉?wù)和特征,服務(wù)包含一組特征,特征包含值和描述該特征值的任意數(shù)量的描述符。通過(guò)規(guī)定好的服務(wù)、特征和特征描述符的結(jié)構(gòu),GATT客戶端可以遍歷GATT服務(wù)器并向用戶顯示特征值,特征描述符以用戶可理解的方式對(duì)特征值進(jìn)行描述。
3.3 GATT-BASED PROFILE層次結(jié)構(gòu)
GATT Profile規(guī)定了Profile交換數(shù)據(jù)的結(jié)構(gòu)。此結(jié)構(gòu)定義Profile中使用的基本元素,如服務(wù)和特征。結(jié)構(gòu)的頂層是Profile。Profile由實(shí)現(xiàn)用例所必需的一個(gè)或多個(gè)服務(wù)組成。服務(wù)由特征或?qū)ζ渌?wù)的引用組成。每個(gè)特征都包含一個(gè)值,并且可能包含有關(guān)該值的可選信息。服務(wù)和特征以及特征的組成部分(即,值和描述符)包含Profile數(shù)據(jù),存儲(chǔ)在服務(wù)器的屬性中。
Service:服務(wù)是用于實(shí)現(xiàn)設(shè)備或設(shè)備部分的特定功能或特性的數(shù)據(jù)和相關(guān)行為的集合。服務(wù)可以引用其他主要或次要服務(wù)和/或組成該服務(wù)的一組特征。有兩種類(lèi)型的服務(wù):主要服務(wù)和次要服務(wù)。主要服務(wù)是提供設(shè)備的主要功能的服務(wù)。輔助服務(wù)是提供設(shè)備的輔助功能并且從該設(shè)備上的至少一個(gè)主服務(wù)引用的服務(wù)。為了保持與早期客戶端的向后兼容性,服務(wù)定義的較新版本只能添加新的引用服務(wù)或可選特征。服務(wù)定義的較新版本也被禁止更改與服務(wù)定義的先前版本相比的行為。服務(wù)可以在一個(gè)或多個(gè)配置文件中使用,以滿足特定的用例。
Referenced Services:引用的服務(wù)是將服務(wù)器上的另一個(gè)服務(wù)定義合并為引用它的服務(wù)的一部分的方法。當(dāng)一個(gè)服務(wù)引用另一個(gè)服務(wù)時(shí),整個(gè)引用的服務(wù)將成為新服務(wù)的一部分,包括任何嵌套的引用服務(wù)和特征。引用的服務(wù)仍作為獨(dú)立服務(wù)存在。嵌套參照的深度沒(méi)有限制。
Characteristic:特征是在服務(wù)中使用的值,以及有關(guān)如何訪問(wèn)值的屬性和配置信息以及有關(guān)如何顯示或表示值的信息。特征定義包含特征聲明、特征屬性和值。它還可以包含描述服務(wù)器相對(duì)于特征值的值或允許配置的描述符。
3.2 CYW43012 SDK應(yīng)用編程接口
3.2.1 SDK架構(gòu)
SDK由platform和bt協(xié)議棧組成,platform為bt協(xié)議棧提供調(diào)用controller的接口,可以使用串口或者芯片內(nèi)部的ipc,bt協(xié)議棧主要由HCI_TX和HCI_RX兩個(gè)任務(wù)完成,HCI_TX任務(wù)完成串口數(shù)據(jù)的發(fā)送,HCI_RX完成串口數(shù)據(jù)的接收和協(xié)議棧的處理。在協(xié)議棧中,回調(diào)用戶注冊(cè)的gap和gatt事件回調(diào)函數(shù),在回調(diào)函數(shù)中,處理用戶的邏輯。
3.2.2 應(yīng)用編程接口
wiced_bt_stack_init注冊(cè)藍(lán)牙回調(diào),示例中注冊(cè)了app_bt_management_callback,當(dāng)藍(lán)牙準(zhǔn)備好時(shí),在回調(diào)中處理BTM_ENABLED_EVT事件,啟動(dòng)藍(lán)牙應(yīng)用,在app_bt_application_init中初始化gatt服務(wù)器。
在初始化gatt服務(wù)的過(guò)程中,通過(guò)wiced_bt_gatt_register注冊(cè)gatt的回調(diào),這個(gè)回調(diào)是用戶的編程接口;通過(guò)wiced_bt_gatt_db_init初始化屬性表gatt_database,gatt_database是用戶定義的gatt profile。
3.2.3 自定義profile
根據(jù)gatt_database示例,通過(guò)PRIMARY_SERVICE_UUID16和CHARACTERISTIC_UUID16定義服務(wù)和特征。
3.3 SDK調(diào)試方法
默認(rèn)cybt_platform_trace.h中的日志等級(jí)是CYBT_TRACE_LEVEL_ERROR,只在出錯(cuò)的時(shí)候打印log,用戶在遇到問(wèn)題調(diào)試時(shí),可以根據(jù)需要調(diào)整log等級(jí)。
3.4 注意事項(xiàng):取消.heap段從flash加載,減少1M的flash空間占用
startup_psoc6_02_cm4.S中,sdk會(huì)從flash復(fù)制數(shù)據(jù)到內(nèi)存的.heap和.stack段,導(dǎo)致這部分段是READONLY的,占了1M的flash,我理解這部分是在主控做低功耗(standby模式)時(shí)heap掉電的時(shí)候用于從flash恢復(fù)heap中的內(nèi)容,如果主控不需要stanby模式可以注釋相關(guān)代碼釋放1M的flash給到應(yīng)用。
四、創(chuàng)建基于gatt的智能門(mén)鎖的profile
定義智能門(mén)鎖的gattdb
1//---------------------------服務(wù)和特征---------------------------
2
3//智能門(mén)鈴服務(wù)
4
5#define__UUID_SERVICE_SMART_LOCK0xD000
6
7//門(mén)鎖開(kāi)關(guān)
8
9#define__UUID_CHARACTERISTIC_LOCK_SWITCH0xD001
10
11//密碼
12
13#define__UUID_CHARACTERISTIC_LOCK_PASSWORD0xD002
14
15//門(mén)鈴鈴聲
16
17#define__UUID_CHARACTERISTIC_DOORBELL_RINGTONE0xD003
18
19//音量
20
21#define__UUID_CHARACTERISTIC_VOLUME0xD004
22
23//電池電量
24
25#define__UUID_CHARACTERISTIC_BATTERY_LEVEL0xD005
26
27//離家布防
28
29#define__UUID_CHARACTERISTIC_FORTIFICATION0xD006
30
31//逗留偵測(cè)
32
33#define__UUID_CHARACTERISTIC_STAY_DETECTION0xD007
34
35//逗留感應(yīng)距離
36
37#define__UUID_CHARACTERISTIC_STAY_INDUCTION_DISTANCE0xD008
38
39//逗留保持時(shí)間
40
41#define__UUID_CHARACTERISTIC_STAY_INDUCTION_TIME0xD009
42
43//wifi配網(wǎng)服務(wù)
44
45#define__UUID_SERVICE_PROV_WIFI0xD100
46
47//WIFIssid和密碼
48
49#define__UUID_CHARACTERISTIC_SSID_AND_PSWD0xD101
50
51//---------------------------句柄---------------------------------
52
53/*ServiceGenericAccess*/
54
55#defineSMART_LOCK_SERV0x0001
56
57#defineSMART_LOCK_CHARACTER_SWITCH0x0002
58
59#defineSMART_LOCK_CHARACTER_VALUE_SWITCH0x0003
60
61#defineSMART_LOCK_CHARACTER_PASSWORD0x0004
62
63#defineSMART_LOCK_CHARACTER_VALUE_PASSWORD0x0005
64
65#defineSMART_LOCK_CHARACTER_DOORBELL_RINGTONE0x0006
66
67#defineSMART_LOCK_CHARACTER_VALUE_DOORBELL_RINGTONE0x0007
68
69#defineSMART_LOCK_CHARACTER_VOLUME0x0008
70
71#defineSMART_LOCK_CHARACTER_VALUE_VOLUME0x0009
72
73#defineSMART_LOCK_CHARACTER_BATTERY_LEVEL0x000a
74
75#defineSMART_LOCK_CHARACTER_VALUE_BATTERY_LEVEL0x000b
76
77#defineSMART_LOCK_CHARACTER_FORTIFICATION0x000c
78
79#defineSMART_LOCK_CHARACTER_VALUE_FORTIFICATION0x000d
80
81#defineSMART_LOCK_CHARACTER_STAY_DETECTION0x000e
82
83#defineSMART_LOCK_CHARACTER_VALUE_STAY_DETECTION0x000f
84
85#defineSMART_LOCK_CHARACTER_STAY_INDUCTION_DISTANCE0x0010
86
87#defineSMART_LOCK_CHARACTER_VALUE_STAY_INDUCTION_DISTANCE0x0011
88
89#defineSMART_LOCK_CHARACTER_STAY_INDUCTION_TIME0x0012
90
91#defineSMART_LOCK_CHARACTER_VALUE_STAY_INDUCTION_TIME0x0013
92
93#defineSMART_LOCK_PROV_SERV0x0014
94
95#defineSMART_LOCK_CHARACTER_SSID_AND_PSWD0x0015
96
97#defineSMART_LOCK_CHARACTER_VALUE_SSID_AND_PSWD0x0016
五、門(mén)鎖任務(wù)
門(mén)鎖任務(wù)負(fù)責(zé)接收其他任務(wù)對(duì)門(mén)鎖的請(qǐng)求,在smart_door_init初始化的時(shí)候注冊(cè)用戶的門(mén)鎖驅(qū)動(dòng),與具體門(mén)鎖驅(qū)動(dòng)解耦。門(mén)鎖操作集和門(mén)鎖結(jié)構(gòu)體定義如下:
1structsmart_lock_ops
2
3{
4
5 smart_lock_err_t(*smart_lock_switch)(smart_lock_t*lock,uint8_tonoff);
6
7};
8
9structsmart_lock
10
11{
12
13 uint32_tinited:1;
14
15 uint32_tstate:1;
16
17 uint32_trsvd:30;
18
19 uint8_tmsg_num;
20
21 rt_thread_tthread;
22
23 rt_mq_tmsg;
24
25 structsmart_lock_ops*lock_ops;
26
27};
六、總結(jié)
有幸參加了rtthread和英飛凌聯(lián)合舉行的開(kāi)發(fā)板測(cè)評(píng)活動(dòng),領(lǐng)到了心心念念的開(kāi)發(fā)板,rtthread工作人員已經(jīng)適配好了英飛凌CY8C624ABZI的bsp和cyw43012的藍(lán)牙sdk,在實(shí)現(xiàn)智能門(mén)鎖的profile中,主要在回調(diào)中處理。開(kāi)發(fā)過(guò)程得到了微信群里大佬們的幫助,也學(xué)習(xí)到了很多,感謝rtthread和英飛凌提供的機(jī)會(huì)。
-
PSoC
+關(guān)注
關(guān)注
12文章
169瀏覽量
91523 -
藍(lán)牙
+關(guān)注
關(guān)注
114文章
5631瀏覽量
167600 -
RTT
+關(guān)注
關(guān)注
0文章
64瀏覽量
16962
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論