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