隨著用戶越來越熟悉物聯網(IoT)的應用程序,開發人員需要通過能夠證明新概念或競爭產品的全功能原型快速響應新興機會。然而,大多數物聯網開發解決方案需要付出巨大努力才能使它們正常工作,特別是在軟件方面。
為了加快這一過程,開發人員需要一個能夠消除許多現有障礙的物聯網開發解決方案,從而減緩響應速度適應新物聯網應用的機會。 Nordic Semiconductor的快速開發套件滿足了這一需求,為藍牙連接的無線傳感器設計提供了完整的硬件/軟件解決方案。
本文將討論設計要求,介紹合適的藍牙無線解決方案,并指導開發人員如何快速啟動和運行。
無線物聯網設備要求和解決方案選項
作為高端物聯網應用的數據源,無線傳感器系統需要滿足廣泛需求一系列復雜的要求。在這些要求中,對藍牙連接的期望不斷提高,以及用戶對通過智能手機應用輕松實現物聯網監控的期望。半導體制造商通過一系列解決方案(包括藍牙收發器IC,模塊和片上系統(SoC)器件)滿足了這一日益增長的需求。
雖然每種解決方案都滿足不同類別的應用要求,但藍牙SoC已經成為可穿戴設備和微型物聯網設備的一個特別有吸引力的解決方案。通過集成藍牙通信子系統,這些設備可在不影響功能和性能的前提下,降低BOM,占地面積小,功耗最小。
在此類設備中,Nordic Semiconductor nRF52832藍牙SoC將處理器核心和無線電子系統與靈活的軟件架構集成在一起,旨在簡化無線系統的開發。
無線MCU
基于32位ARM ? Cortex ? -M4F內核,Nordic nRF52832具有嵌入式2.4 GHz收發器,能夠支持包括藍牙低功耗(BLE)在內的標準協議和ANT,以及專有協議。在其外設中,該器件集成了模擬比較器和8通道可編程增益12位模數轉換器(ADC),以及3個實時計數器(RTC),32個GPIO,多個脈沖寬度調制器(PWM)通道和串行接口。
片上可編程外設互連(PPI)矩陣使這些外設能夠同步其活動,直接交互或通過直接內存訪問(DMA)進行交互,無需處理器干預。此外,該器件還集成了多個硬件模塊,用于高級功能,包括正交解碼,AES加密和藍牙加密服務的加速地址解析等。
該器件的功耗為58μA/MHz 512 Kbyte閃存或51.6μA/MHz從其64 KB RAM運行。多種低功耗模式使開發人員能夠在應用程序處于非活動狀態時降低功耗。例如,器件在低功耗空閑狀態下僅消耗1.5μA,其中器件保持完全RAM狀態并且能夠在任何事件中喚醒。實際上,開發人員可以將設備置于特殊的恒定延遲子模式,以確保CPU喚醒和PPI子系統響應的持續時間最短。利用其靈活的工作模式,外設和片上硬件模塊,開發人員可以對nRF52832進行編程,以滿足功耗,性能和功能要求的特定組合。
通信服務
對于其所有集成功能,nRF52832和Nordic nRF52系列其他成員最顯著的特點之一是其通信服務架構。 Nordic在早期的無線SoC系列中引入了SoftDevice架構,以減少開發人員使用通信協議棧時的摩擦。
SoftDevice體系結構作為可更新的固件實現,它通過提供程序員可以利用的預先測試的服務層來簡化軟件開發,而不會使自己的開發過程復雜化。對于BLE應用,Nordic的S132 SoftDevice提供了完整的藍牙協議棧(圖1)。
圖1:Nordic Bluetooth SoftDevice實現了完整的藍牙協議作為固件堆棧,提供全套服務,無需開發人員將協議棧庫鏈接到其應用程序。 (圖片來源:Nordic Semiconductor)
SoftDevice不僅僅是一個簡單的軟件層,它使用復雜的基于中斷的模型,允許開發人員在開發過程中使用SoftDevice服務而無需將SoftDevice代碼鏈接到他們的應用程序中。開發人員只需使用一組C語言API頭文件中定義的一系列Supervisor調用(SVC)訪問SoftDevice應用程序編程接口(API)。
SVC實現為軟件觸發的中斷,因此當開發人員調用API函數,SoftDevice SVC中斷處理程序找到正確的SoftDevice函數并將函數參數傳遞給它,使用回調函數返回結果。這種方法消除了在構建時鏈接SoftDevice資源地址的需要,同時還提供了線程安全的服務實現。
為了實現這個模型,Nordic將SoftDevice與低級中斷機制和硬件資源聯系起來。較低級別的中斷冒泡到SoftDevice,它使用保留的IRQ將應用程序特定的中斷傳遞給應用程序,并自行處理剩余的中斷。此外,作為其服務職責的一部分,SoftDevice直接訪問設備硬件,包括無線電和其他外圍設備。
為了避免可能爭用共享硬件資源,Nordic提供了一個時間段功能,可以調度資源之間的資源分配。 SoftDevice和定義的時間間隔內的應用程序。應用程序可以在給定時間請求最早的時間段或一個時間段。盡管這種機制具有潛在的復雜性,但Nordic的API減少了應用程序對一些高級調用的負擔。例如,應用程序可以通過打開無線電會話(清單1)以及實際廣告操作的回調(清單2)來啟動信標。在每次傳遞期間,回調遞增一個簡單的枚舉類型(清單3)以逐步執行一系列狀態,直到廣告過程完成( mode == ADV_DONE )。
復制 void app_beacon_start(void){if(m_beacon.is_running || m_beacon.keep_running){return; } DEBUG_PRINTF(0,“app_beacon_start:\ r \ n”); m_beacon.keep_running = true; m_beacon.is_running = true; uint32_t err_code = sd_radio_session_open(m_timeslot_callback); if((err_code!= NRF_SUCCESS)&&(m_beacon.error_handler!= NULL)){m_beacon.error_handler(err_code); } err_code = m_request_earliest(NRF_RADIO_PRIORITY_NORMAL); if((err_code!= NRF_SUCCESS)&&(m_beacon.error_handler!= NULL)){m_beacon.error_handler(err_code);清單1:Thingy軟件包包括示例例程,例如 app_beacon_start ,它演示與SoftDevice的交互以創建具有特定回調的無線電會話( m_timeslot_callback )并請求最早的可用無線電時隙用于信標傳輸( m_request_earliest )。 (代碼來源:Nordic Semiconductor)
復制 static nrf_radio_signal_callback_return_param_t * m_timeslot_callback(uint8_t signal_type){static nrf_radio_signal_callback_return_param_t signal_callback_return_param; static enum mode_t mode; signal_callback_return_param.params.request.p_next = NULL; signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE; switch(signal_type){case NRF_RADIO_CALLBACK_SIGNAL_TYPE_START:m_handle_start(); mode = ADV_INIT;模式++;打破; case NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO:if(NRF_RADIO-> EVENTS_DISABLED == 1){NRF_RADIO-> EVENTS_DISABLED = 0; m_handle_radio_disabled(模式); if(mode == ADV_DONE){DEBUG_PRINTF(0,“app_beacon_adv_done:\ r \ n”); NRF_PPI-> CHENCLR =(1 << 8); if(m_beacon.keep_running){signal_callback_return_param.params.request.p_next = m_configure_next_event(); signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END; } else {signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_END;打破} mode ++;打破default:if(m_beacon.error_handler!= NULL){m_beacon.error_handler(NRF_ERROR_INVALID_STATE);打破} return(&amp; signal_callback_return_param);}
清單2:Thingy軟件包提供了樣本軟件,它提供了代表性的設計模式,例如使用此處顯示的回調例程來執行一系列信標廣告的無線電操作。 (代碼來源:Nordic Semiconductor)
復制 enum mode_t {ADV_INIT,/**初始化。 */ADV_RX_CH37,/**在Rx頻道37上做廣告。*/ADV_RX_CH38,/**在Rx頻道38上做廣告。*/ADV_RX_CH39,/**在Rx頻道39上做廣告。*/ADV_DONE/**完成廣告。 */};
清單3:Thingy軟件包中的示例回調例程使用此枚舉類型在信標通告序列期間使系統走過一系列階段。 (代碼來源:Nordic Semiconductor)
nRF52832的SoftDevice服務和集成硬件功能為無線傳感器系統的開發提供了有效的基礎,且零件數量最少。然而,這些SoC器件的復雜性可以為設計人員提供實現傳感器設計的重要學習曲線,更不用說完整的物聯網應用。 Nordic Semiconductor NRF6936 Thingy:52 IoT傳感器套件可幫助開發人員顯著縮短開發有用的藍牙連接傳感器系統所需的時間。
快速開發Thingy
Nordic Thingy:52套件優惠用于無線傳感器設計的快速原型解決方案。該套件基于nRF52832藍牙SoC,旨在提供開箱即用的全部功能,無需硬件或固件開發即可實現帶有連接移動應用程序的物聯網傳感器解決方案。
其功能中, nRF6936板包括一個完整的傳感器套件,包括:
Rohm Semiconductor BH1745色彩傳感器
STMicroelectronics HTS221濕度傳感器
STMicroelectronics LPS22HB壓力傳感器
ams CCS811氣體傳感器
STMicroelectronics MP34DB02 MEMS麥克風
TDK InvenSense MPU-9250慣性測量單元(IMU)傳感器
與...用于完整9軸運動跟蹤的MPU-9250 IMU,Thingy板包括一個獨立的專用運動傳感器,STMicroelectronics LIS3DH加速度計,用于喚醒系統運動。 LIS3DH直接從板載穩壓器獲取電源,確保無論VDD狀態如何都能保持供電。參考設計包括原理圖,顯示LIS3DH如何保持隔離,通過設計中提供的外部I 2 C總線連接以支持外部硬件(圖2)。
圖2:Thingy參考設計提供完整的原理圖并演示設計技術,例如使用STMicroelectronics LIS3DH加速度計在移動時喚醒空閑MCU。 (圖片來源:Nordic Semiconductor)
如圖2所示,此設計中使用的智能傳感器降低了復雜性,需要與主機進行簡單的雙線I 2 C連接。通過這種參考設計,Nordic演示了一種簡單的方法,可以在設計占地面積上進行最小的增量交換,從而在低活動期間顯著降低功耗。在這里,設計將一些傳感器耦合到專用的NXP NX3DV2567模擬開關,當操作條件允許時,MCU允許MCU(通過MPU_WR_CTRL)斷開特定傳感器與電源,MCU中斷和I 2 C總線的連接。 (圖3)。
圖3:Thingy硬件設計利用了集成傳感器(如TDK InvenSense MPU-9250運動傳感器)所需的簡單硬件接口,但是增加了恩智浦NX3DV2567模擬開關,將傳感器與系統分離,以節省電能。 (圖片來源:Nordic Semiconductor)
開發人員可以通過添加外部設備來擴展Thingy硬件補充。四個連接器支持Grove 4針格式,允許設計人員通過大量可用的Grove兼容設備輕松添加硬件功能。額外的2 x 10引腳接頭帶來了額外的MCU端口,甚至包括四條緩沖線。這些線路均包含一個DiodesDMN3190LDW N-MOS晶體管,能夠驅動LED或小型直流電機等外部元件。事實上,Thingy設計為設計人員提供的I/O數量超過了nRF52832自身的GPIO引腳數。 Nordic增加了一套Semtech Corp SX1509 GPIO擴展器,以增強Thingy系統設計的I/O能力。
由于Thingy的I/O可擴展性,硬件開發人員只需將外部設備連接到電路板即可創建原型設計。全面的軟件平臺為軟件工程師提供了相同的易開發性。
軟件平臺
Thingy開發平臺擴展了nRF52軟件開發套件(SDK),并提供了一系列所需的服務。讓應用程序開發人員專注于更高級別的流程而不是低級別的流程(圖4)。例如,Thingy軟件包添加了一層傳感器驅動程序,這些驅動程序構建在SDK的外圍驅動程序和硬件抽象層(HAL)上,以處理諸如配置傳感器,啟動或停止傳感器以及檢索傳感器數據等操作。
圖4:Thingy軟件包擴展了Nordic nRF52軟件開發套件(SDK),其中包含專為Thingy設計的應用級服務和實用程序模塊應用。 (圖片來源:Nordic Semiconductor)
Nordic通過一系列客戶開發資源完善了從傳感器到移動應用的物聯網鏈。該公司提供單獨的開放存儲庫,其中包含適用于iOS開發人員的Swift中的庫和示例應用程序以及適用于Android開發人員的Java。此外,另一個開放式存儲庫提供了一個JavaScript庫,用于開發基于Polymer Web組件庫和Web藍牙API構建的Web應用程序。
只需從Apple App商店或Google Play商店下載Nordic Thingy應用程序,開發人員就可以快速了解Thingy操作。開發商隨后啟動了Thingy,它采用嵌入式1440 mAh鋰離子電池供電,通過USB電源連接進行充電。在應用程序發現并連接到Thingy系統后,它會提供傳感器數據的運行顯示(圖5)。該應用甚至支持與IFTTT的連接,允許用戶使用由Thingy數據觸發的IFTTT事件鏈創建基于云的applet。
圖5:配套應用程序通過藍牙與Thingy系統交互,提供傳感器數據的運行顯示以及Thingy配置和固件的服務更新。 (圖片來源:Digi-Key)
在Thingy參考設計和軟件平臺的基礎上,開發人員可以快速擴展Thingy系統以滿足他們自己的特定要求。開發人員可以使用KeilμVision或GCC使用ARM Cortex-M的GNU工具鏈編譯新的Thingy固件。 Thingy系統提供安全的無線更新設施,用于加載新固件。標準的Thingy應用程序包括一個選項,用于從Nordic更新到最新版本的Thingy固件,或者由開發人員使用Nordic提供的開源實用程序創建的自定義固件包。
結論
在充滿快速變化的物聯網機會的市場中,開發人員面臨著更快地對復雜應用程序進行原型設計的需求。雖然開發人員可以找到越來越多的物聯網開發平臺,但是當工程師完成與這些平臺相關的復雜實現細節時,項目經常會發生絆倒。
Nordic Thingy:52通過快速原型設計平臺簡化了物聯網開發,該平臺隱藏了底層硬件設計和軟件架構的復雜性。使用Nordic Thingy套件,開發人員可以快速構建支持藍牙的多傳感器系統原型 - 后來以Thingy參考設計為基礎,創建自定義物聯網設備。
-
藍牙
+關注
關注
114文章
5812瀏覽量
170215 -
物聯網
+關注
關注
2909文章
44578瀏覽量
372913 -
無線傳感器
+關注
關注
15文章
770瀏覽量
98350
發布評論請先 登錄
相關推薦
評論