Atmel智能插頭參考設(shè)計(jì)的無線物聯(lián)網(wǎng)設(shè)計(jì)要求介紹
適用于物聯(lián)網(wǎng) (IoT) 應(yīng)用的器件具有一些共通但非常關(guān)鍵的要求:連接簡(jiǎn)單、安全水平高并且易于使用。 因此,設(shè)計(jì)師應(yīng)仔細(xì)研究 Atmel 的智能插頭參考設(shè)計(jì),將其作為無線物聯(lián)網(wǎng)設(shè)計(jì)的綜合工作指南。
雖然面向苛刻環(huán)境的應(yīng)用通常需要有線連接,但如今消費(fèi)者完全可以指望可靠且易于設(shè)置的無線連接。 在安全性方面,如今的要求已不局限于基本的數(shù)據(jù)加密,還包括要求更復(fù)雜的政策用于將新設(shè)備安全地添加到受信任的網(wǎng)絡(luò),以及確保正常操作期間的安全通信。 最后,任何物聯(lián)網(wǎng)器件最終都應(yīng)滿足應(yīng)用特定的傳感器或致動(dòng)器功能要求。
以下是將 Atmel 的智能插頭參考設(shè)計(jì)用作無線物聯(lián)網(wǎng)設(shè)計(jì)綜合工作指南的原因。 對(duì)設(shè)計(jì)師而言,它整合了安全的互聯(lián)網(wǎng)連接型產(chǎn)品所需的所有軟硬件。 同時(shí),該設(shè)計(jì)是一個(gè)啟用了 Wi-Fi 功能的電源插頭,其中展示了三個(gè)主要的用例模型:使用其電容式觸摸按鈕進(jìn)行本地控制;通過帶 Wi-Fi 連接(帶或不帶云連接)的移動(dòng)應(yīng)用進(jìn)行控制;或通過使用相關(guān)應(yīng)用計(jì)劃開/關(guān)定時(shí)進(jìn)行基于定時(shí)器的控制。
與許多新興物聯(lián)網(wǎng)入門套件不同,Atmel 智能插頭參考設(shè)計(jì)以無云版本提供。 實(shí)際上,Atmel 提供了專為云集成而設(shè)計(jì)的固件版本,但開發(fā)人員還需要密切關(guān)注“霧計(jì)算”的趨勢(shì)。
在霧計(jì)算中,提高數(shù)據(jù)處理、存儲(chǔ)和應(yīng)用的控制水平是以本地方式在“邊緣”位置執(zhí)行的,而不是僅僅依靠云。 除了實(shí)現(xiàn)“始終可用”的服務(wù)外,此方法還能降低服務(wù)延遲,提高安全性,節(jié)省能源,并提升整體用戶體驗(yàn)。
器件設(shè)計(jì)
智能插頭設(shè)計(jì)本身由三塊印刷電路板 (PCB) 組成,分別用于供電、MCU 和觸摸控制。 MCU 板垂直安裝在電源板上,觸摸板通過引腳連接器連接到 MCU 板(圖 1)。 Atmel 提供三種版本的智能插頭,分別符合美國(guó)、歐洲和中國(guó)標(biāo)準(zhǔn)。 三種版本分別提供每個(gè)地區(qū)的標(biāo)準(zhǔn)插頭和插座,但使用相同的印刷電路板。
圖 1: Atmel 智能插頭參考設(shè)計(jì)將數(shù)字電路和電源電路分為單獨(dú)的板,其中三分之一的板用于 LED 和 QTouch 接口。 (圖片: Atmel Corp.)
觸摸板包含 Wi-Fi 和電源 LED 以及基于 QTouch 技術(shù)的觸摸傳感器。 QTouch 采用 Atmel 的電容式觸摸感應(yīng)技術(shù),該技術(shù)具有在不太理想的環(huán)境中獲得可靠性能所需的抗噪能力和環(huán)境耐受力。
電源板包含一個(gè) AC/DC 轉(zhuǎn)換器、一個(gè) DC/DC 轉(zhuǎn)換器、功率測(cè)量電路、繼電器以及插頭和插座。 AC/DC 轉(zhuǎn)換器專用于將 100 V/240 VAC 輸入電壓轉(zhuǎn)換為 12 V/120 mA(典型)DC 輸出,以向繼電器和 DC/DC 轉(zhuǎn)換器供電。 AC/DC 轉(zhuǎn)換器將定制變壓器與 Monolithic Power Systems 的 MP020-5 開關(guān)穩(wěn)壓器結(jié)合使用。
MP020-5 是一種離線式、初級(jí)側(cè)穩(wěn)壓器,不需要光耦合器或次級(jí)反饋電路便可提供準(zhǔn)確的恒定電壓和恒定電流調(diào)節(jié)。 DC/DC 轉(zhuǎn)換器為 MCU 板上的 SAMW25 無線模塊將 DC 電壓電平從 12 V 轉(zhuǎn)換為 3.3 V。
MCU 板包含 ATSAMW25 無線模塊和 32 KHz 晶體。 此外,它還在印刷電路板上為此設(shè)計(jì)不需要的外部閃存設(shè)備提供可用的封裝。
安全連接模塊
Atmel 設(shè)計(jì)的核心部分是結(jié)合了數(shù)字控制、連接和安全功能的 ATSAMW25 模塊。 此模塊設(shè)計(jì)為 Wi-Fi 連接的直接替代型解決方案,結(jié)合了其全面的硬件功能與集成軟件,包括傳輸層安全 (TLS) 等應(yīng)用和安全協(xié)議,以及包括 TCP/IP 堆棧在內(nèi)的集成網(wǎng)絡(luò)服務(wù)。 在智能插頭設(shè)計(jì)中,此模塊不僅提供 Wi-Fi 連接和安全,還管理智能插頭觸摸按鈕、繼電器控制、溫度感應(yīng)以及保護(hù)、LED 指示燈和定時(shí)功能(圖 2)。
圖 2: Atmel 智能插頭參考設(shè)計(jì)提供圍繞 Atmel ATSAMW25 模塊構(gòu)建的完整物聯(lián)網(wǎng)解決方案,可提供數(shù)字控制、連接和安全功能。 (圖片: Atmel Corp.)
此核心模塊在內(nèi)部利用了以下三個(gè)關(guān)鍵 SoC 中集成的全面功能:Atmel ATSAMD21G18A MCU、Atmel ATWINC1500B-MU-T 收發(fā)器以及 Atmel ATECC508A 加密驗(yàn)證器件。
ATSAMD21G18A 基于低功耗 ARM Cortex-M0+ 核心,集成了 256 KB 閃存及 32 KB SRAM 與全套外設(shè),包括串行、USB、14 通道 12 位模數(shù)轉(zhuǎn)換器 (ADC) 以及 10 位數(shù)模轉(zhuǎn)換器 (DAC)。 Atmel ATWINC1500B-MU-T 是一種低功耗、單芯片 IEEE 802.11 b/g/n、2.4 GHz 網(wǎng)絡(luò)控制器。 ATWINC1500 專為簡(jiǎn)化在基于 MCU 的設(shè)計(jì)中集成 Wi-Fi 連接而設(shè)計(jì),集成了全部收發(fā)器信號(hào)鏈并提供多個(gè)外設(shè)接口,包括用于與主機(jī) MCU 連接的 UART、SPI 和 I2C。 ATECC508A 加密器件將在下文中介紹。
對(duì)于無線通信,這些器件只需要在 SAMD21G MCU 和 ATWINC1500 網(wǎng)絡(luò)控制器 SoC 之間進(jìn)行幾處連接(圖 3)。 雖然 SPI 連接能提供雙向數(shù)據(jù)交換,但此設(shè)計(jì)有助于降低平靜期的功耗。 對(duì)于傳入數(shù)據(jù),ATWINC1500 可使用中斷線 (IRQn) 喚醒 MCU,以通知 MCU 處理收到的數(shù)據(jù)。 對(duì)于輸出數(shù)據(jù),MCU 可使用喚醒線來喚醒 ATWINC1500 處理傳輸。
圖 3: Atmel ATSAMW25 模塊將 MCU 與 SoC 集成,以實(shí)現(xiàn) Wi-Fi 連接與安全,為許多物聯(lián)網(wǎng)應(yīng)用提供了直接替代型解決方案。 (圖片: Atmel Corp.)
ATSAMW25 模塊只需很少的額外組件來控制智能插頭功率繼電器并與功率測(cè)量電路接口(圖 4)。 如圖中所示,52 引腳 ATSAMW25 模塊為在模塊外部處理的各項(xiàng)關(guān)鍵功能提供了簡(jiǎn)單的接口。 例如,引腳 24 為隨附的 Atmel ATSAMD21G18A MCU 引出了復(fù)位引腳,引腳 40 和 41 則用于跟功率測(cè)量子系統(tǒng)連接。 此外,此模塊還提供了 9 個(gè)通用輸入/輸出 (GPIO) 引腳,開發(fā)人員可對(duì)其編程以引出特定于應(yīng)用的功能。
圖 4: Atmel ATSAMW25 模塊專為簡(jiǎn)化在設(shè)計(jì)中集成 Wi-Fi 功能而設(shè)計(jì),只需要較少的外部組件,并能提供實(shí)現(xiàn)設(shè)計(jì)所需的最少外部連接。 (圖片: Atmel Corp.)
不同于藍(lán)牙的一對(duì)一配對(duì)連接,Wi-Fi 連接支持器件共用,因此多個(gè)用戶可以共享訪問權(quán)限并控制設(shè)備。 不過設(shè)計(jì)師仍可通過使用專門的藍(lán)牙器件(例如 Atmel ATSAMB11 藍(lán)牙 SoC)和相關(guān)軟件增強(qiáng)基本的智能插頭參考設(shè)計(jì),來構(gòu)建自定義的 Wi-Fi/藍(lán)牙設(shè)計(jì)。 ATWINC1500 支持符合 IEEE 802.15.2-2003 標(biāo)準(zhǔn)的 2 線和 3 線 Wi-Fi/藍(lán)牙共存信號(hào)。
最后,電源板上實(shí)現(xiàn)的功率管理電路使用了 Atmel ATM90E26。 ATM90E26 專為能量計(jì)量而設(shè)計(jì),集成了完整的模擬前端 (AFE) 信號(hào)鏈與數(shù)字信號(hào)處理器 (DSP)。 通過使用 AFE 執(zhí)行電壓和電流測(cè)量,DSP 可計(jì)算即時(shí)功率、RMS 電流、RMS 電壓以及累積的電能。 結(jié)果將通過 UART 端口傳輸至 ATSAMW25。 為了隔離線路電壓和內(nèi)部電源域,此設(shè)計(jì)包含兩個(gè)光耦合器用于保護(hù) ATM90E26 和 ATSAMW25 之間的連接(ATSAMW25 模塊上的引腳 40 和 41)。
軟件設(shè)計(jì)
在智能插頭參考設(shè)計(jì)中,主程序在 ATSAMW25 模塊中嵌入的 ATSAMD21G18 MCU 上運(yùn)行。 此軟件設(shè)計(jì)不使用實(shí)時(shí)操作系統(tǒng) (RTOS)。 相反,所有軟件功能塊在初始化后以無限循環(huán)運(yùn)行。 關(guān)鍵的 MCU 軟件功能包括通過 ATWINC1500 驅(qū)動(dòng)程序提供的 Wi-Fi 連接;通過 ATECC508A 驅(qū)動(dòng)程序和軟件 AES 庫(kù)提供的安全性;通過 ATM90E26 驅(qū)動(dòng)程序提供的能源測(cè)量;以及通過 Atmel QTouch 庫(kù)提供的觸摸按鈕控制。
在智能插頭參考設(shè)計(jì)中,應(yīng)用固件區(qū)分為兩個(gè)分區(qū) — 應(yīng)用 1 和應(yīng)用 2(圖 5)。 除了這些應(yīng)用分區(qū)外,內(nèi)部閃存包括用于存儲(chǔ)用戶信息、Wi-Fi 網(wǎng)絡(luò)信息和使用數(shù)據(jù)的仿真 EEPROM。
圖 5: 由于智能插頭固件的存儲(chǔ)器封裝相對(duì)較小,因此兩個(gè)應(yīng)用副本可在 ATSAMD21G18 MCU 的 256KB 閃存內(nèi)共存,從而在不需外部存儲(chǔ)器的情況下實(shí)現(xiàn)無線升級(jí)。 (圖片: Atmel Corp.)[!--empirenews.page--]
復(fù)位后,使用簡(jiǎn)單的引導(dǎo)程序確定要運(yùn)行的應(yīng)用固件分區(qū)。 在此,引導(dǎo)程序代碼會(huì)查看引導(dǎo)程序頭文件 boot.h(列表 1)中定義的變量。
#define APPLICATION_SIZE (FLASH_SIZE/2UL) // Maintain two copies in flash
#define APP_PAGE_SIZE FLASH_PAGE_SIZE
#define APP1_START_ADDRESS 0x00004000
#define APP2_START_ADDRESS 0x00020000
/** NVM page to save application area info */
#define NVM_APP_AREA_INFO_PAGE 2
typedef enum _valid_app {
APP1_VALID = 1,
APP2_VALID,
NOT_FOUND = 0xFF,
} valid_app_enum;
列表 1: 引導(dǎo)程序頭文件定義了簡(jiǎn)單的引導(dǎo)加載過程所需的幾個(gè)常量和變量。 (代碼: Atmel Corp.)
引導(dǎo)程序代碼自身檢查 APPx_VALID 標(biāo)記(列表 2)
if(app_info.valid_app == APP1_VALID) {
app_check_address = APP1_START_ADDRESS;
app_check_address_ptr = (uint32_t *) app_check_address;
} else if (app_info.valid_app == APP2_VALID) {
app_check_address = APP2_START_ADDRESS;
app_check_address_ptr = (uint32_t *) app_check_address;
} else {
/*
* Factory new device has no valid app flag in EEPROM.
* Application code is in sector 2 for factory new device.
*/
app_check_address = APP2_START_ADDRESS;
app_check_address_ptr = (uint32_t *) app_check_address;
}
列表 2: 引導(dǎo)程序代碼只檢查哪個(gè)應(yīng)用區(qū)域(APP1 或 APP2)有效,并在活動(dòng)的應(yīng)用區(qū)域調(diào)用此代碼以開始執(zhí)行智能插頭設(shè)備軟件。 (代碼: Atmel Corp.)
最后,引導(dǎo)程序設(shè)置為在相應(yīng)的應(yīng)用空間運(yùn)行此代碼,并跳至該應(yīng)用。
得益于設(shè)計(jì)的 SoC 所具有的高集成度,參考設(shè)計(jì)的存儲(chǔ)器封裝極小。 程序存儲(chǔ)器使用量為 83244 字節(jié)(容量的 31.8%),數(shù)據(jù)存儲(chǔ)器使用量?jī)H為 15632 字節(jié)(容量的 47.7%)。 由于此存儲(chǔ)器外形極小,該設(shè)計(jì)能支持典型 IoT 邊緣節(jié)點(diǎn)所需的無線 (OTA) 升級(jí)。 ATSAMD21G18A MCU 的 256 KB 內(nèi)部閃存預(yù)留了足夠的空間來存儲(chǔ)下載的固件映像,同時(shí)將原始固件保留不變。 因此,此參考設(shè)計(jì)不需要外部存儲(chǔ)進(jìn)行 OTA 升級(jí)。
Atmel 為設(shè)備以及整個(gè)安卓應(yīng)用提供了完整的代碼包。 開發(fā)人員可以通過公司的在線工具 Atmel START 訪問軟件配置,該工具適用于配置軟件組件以及時(shí)鐘和引腳布局等器件設(shè)置。 智能插頭配置附帶預(yù)建的 Wi-Fi 堆棧、加密服務(wù)和 IO 管理等中間件以及一整套軟件驅(qū)動(dòng)程序(圖 6)。
圖 6: Atmel 提供了一整套軟件開發(fā)和調(diào)試工具,包括在設(shè)計(jì)的硬件器件組中用于配置軟件組件及器件設(shè)置的在線工具。 (圖片: Atmel Corp.)
完成配置后,開發(fā)人員將導(dǎo)出項(xiàng)目并在 IDE 中打開它,進(jìn)行進(jìn)一步的軟件開發(fā)。 針對(duì)應(yīng)用開發(fā),Atmel 提供了圍繞 Atmel Studio 7 構(gòu)建的全面工具鏈,其中通過 Atmel 調(diào)試器、編程器和仿真器結(jié)合了代碼開發(fā)工具與集成調(diào)試功能。 針對(duì)智能插頭設(shè)計(jì),Atmel 軟件框架 (ASF) 提供了 API 以用于 Wi-Fi 連接、安全、通信協(xié)議、傳感器讀數(shù)和 UI。 開發(fā)人員可以使用 Atmel 的 ASF Explorer 將驅(qū)動(dòng)程序、通信堆棧和服務(wù)從 ASF 導(dǎo)入到其項(xiàng)目中。 ASF Explorer 會(huì)自動(dòng)管理庫(kù)的依賴關(guān)系,確保代碼包中包含需要的驅(qū)動(dòng)程序。
與大多數(shù)新興的物聯(lián)網(wǎng)器件一樣,Atmel 智能插頭依賴于移動(dòng)應(yīng)用實(shí)現(xiàn)用于監(jiān)控和控制的用戶界面。 實(shí)際上,Atmel 提供的安卓應(yīng)用是此參考設(shè)計(jì)不可或缺的一項(xiàng)功能。 通過此應(yīng)用,用戶可以在設(shè)置期間管理 Wi-Fi 部署、與多個(gè)用戶共享設(shè)備、執(zhí)行無線升級(jí)、打開和關(guān)閉設(shè)備、計(jì)劃開/關(guān)定時(shí)甚至包括查看使用歷史記錄。
物聯(lián)網(wǎng)安全機(jī)制
Atmel 安卓應(yīng)用在確保安全操作方面發(fā)揮重要作用。 Atmel 智能插頭參考設(shè)計(jì)實(shí)施了穩(wěn)健安全策略,要求在設(shè)置和正常操作期間,設(shè)備與應(yīng)用之間使用認(rèn)證通信。 由于智能插頭設(shè)計(jì)在功能上代表了大多數(shù)物聯(lián)網(wǎng)邊緣節(jié)點(diǎn)的設(shè)計(jì),因此該參考設(shè)計(jì)為實(shí)施物聯(lián)網(wǎng)安全措施提供了詳細(xì)指南。
此設(shè)計(jì)依賴 Atmel ATECC508A 硬件加密引擎和軟件加密庫(kù)實(shí)施安全功能,包括:
FIPS186-3 橢圓曲線數(shù)字簽名算法 (ECDSA),用于安卓應(yīng)用和智能插頭驗(yàn)證;
FIPS SP800-56A 橢圓曲線 Diffie-Hellman 算法 (ECDH),用于生成會(huì)話密鑰,而決不會(huì)在安全密鑰存儲(chǔ)之外傳輸私鑰;
高級(jí)加密標(biāo)準(zhǔn) (AES)-128 加密塊鏈接 (CBC) 模式,用于對(duì)網(wǎng)絡(luò)通信進(jìn)行數(shù)據(jù)加密和解密;
基于 SHA-256 的 MAC(信息驗(yàn)證代碼),用于數(shù)據(jù)完整性檢查。
安卓應(yīng)用側(cè)的軟件中也實(shí)施了相同的安全功能,以便在智能插頭設(shè)備與應(yīng)用之間進(jìn)行安全通信。
基于密鑰的加密對(duì)任何物聯(lián)網(wǎng)設(shè)計(jì)中的密鑰安全提出了苛刻的要求。 在智能插頭設(shè)計(jì)中,ATECC508A 加密器件通過其基于硬件的安全加密密鑰存儲(chǔ)和加密對(duì)策滿足了這一需求。 當(dāng)設(shè)計(jì)進(jìn)入量產(chǎn)后,將會(huì)在安全的工廠環(huán)境中配置密鑰存儲(chǔ)(例如 ATECC508A 中的密鑰存儲(chǔ)),然后再上市銷售,以確保私鑰安全。
在現(xiàn)場(chǎng),該設(shè)計(jì)使用先進(jìn)的驗(yàn)證方案將新的智能插頭設(shè)備加入現(xiàn)有網(wǎng)絡(luò),并在經(jīng)驗(yàn)證的智能插頭設(shè)備與應(yīng)用之間交換數(shù)據(jù)。 在智能插頭與應(yīng)用相互完成驗(yàn)證后的數(shù)據(jù)交換期間,智能插頭使用其 MAC 地址和一個(gè)隨機(jī)數(shù)質(zhì)詢進(jìn)行應(yīng)答。 由于智能插頭在(安全)加入網(wǎng)絡(luò)后會(huì)收到安卓應(yīng)用公鑰,因此 ATECC508A 可生成一個(gè) ECDH 預(yù)先主 (Pre-master) 密鑰,并使用 MAC 算法隨機(jī)生成密鑰,以輸出僅在會(huì)話期間有效的臨時(shí)密鑰。 反過來,ATECC508A 將此會(huì)話密鑰用作 AES 密鑰,對(duì)在應(yīng)答中傳輸至安卓應(yīng)用的信息進(jìn)行加密。 盡管添加新智能插頭設(shè)備的安全流程更為復(fù)雜,但它遵循相似的安全理念,即隨機(jī)密鑰交換、質(zhì)詢和驗(yàn)證。
但對(duì)開發(fā)人員而言,Atmel 驅(qū)動(dòng)程序和 API 會(huì)處理具體細(xì)節(jié)。 例如,只需在 ecc508a 驅(qū)動(dòng)程序中調(diào)用 cademo_aes_crypt() 即可使用第三方庫(kù) LibTomCrypt 返回 AES-128 CBC 模式的加密或解密數(shù)據(jù)(列表 3)。
static uint8_t cademo_aes_crypt(uint8_t enc_mode, uint8_t* aes_key, uint8_t* plain_txt, uint16_t* plain_txt_size, uint8_t* cypher_txt, uint8_t* iv)
{
uint8_t ret = ATCA_SUCCESS;
uint16_t keysize = AES_KEY_SIZE;
// LibTomCrypt
register_cipher(&aes_desc);
int32_t cypher_idx = find_cipher("aes");
symmetric_CBC cbc;
ret = cbc_start(cypher_idx, iv, aes_key, keysize, 0, &cbc);
if (enc_mode == MODE_ENCRYPT) {
ret = cbc_encrypt(plain_txt, cypher_txt, *plain_txt_size, &cbc);
}
else if (enc_mode == MODE_DECRYPT) {
/* plain_txt is the encrypted data by calling cademo_aes_crypt(),
while cypher_txt is the place to store decrypted data. */
ret = cbc_decrypt(plain_txt, cypher_txt, *plain_txt_size, &cbc);
}
return ret;
}
列表 3: 智能插頭參考設(shè)計(jì)的 Atmel 基本代碼提供了一整套安全實(shí)施例程,例如以上用于 AES-128 CBC 模式加密/解密的例程。 (代碼: Atmel Corp.)
在此,調(diào)用參數(shù)包括:
enc_mode — 定義加密還是解密的標(biāo)記
aes_key — AES 密碼
plain_txt — 要加密的字節(jié)
plain_txt_size — 要加密的字節(jié)數(shù)
cypher_txt — 加密后的文本
iv — CBC 模式的初始化矢量
結(jié)論
物聯(lián)網(wǎng)設(shè)計(jì)要求成功的功能集成,包括連接、安全和應(yīng)用資源。 通過結(jié)合一項(xiàng)穩(wěn)健的物聯(lián)網(wǎng)參考設(shè)計(jì),新物聯(lián)網(wǎng)開發(fā)人員可快速積累經(jīng)驗(yàn),經(jīng)驗(yàn)豐富的開發(fā)人員則可加快實(shí)現(xiàn)物聯(lián)網(wǎng)設(shè)計(jì)。 Atmel 智能插頭參考設(shè)計(jì)為物聯(lián)網(wǎng)設(shè)計(jì)提供了一個(gè)綜合工作示例。 此設(shè)計(jì)通過結(jié)合用于無線連接、安全和能源計(jì)量的軟硬件,針對(duì)物聯(lián)網(wǎng)設(shè)計(jì)組件之間的交互提供了深入見解,并可作為復(fù)雜的自定義物聯(lián)網(wǎng)設(shè)計(jì)的出發(fā)點(diǎn)。