适用于物联网 (IoT) 应用的器件具有一些共通但非常关键的要求:连接简单、安全水平高并且易于使用。 因此,设计师应仔细研究 Atmel 的智能插头参考设计,将其作为无线物联网设计的综合工作指南。
虽然面向苛刻环境的应用通常需要有线连接,但如今消费者完全可以指望可靠且易于设置的无线连接。 在安全性方面,如今的要求已不局限于基本的数据加密,还包括要求更复杂的政策用于将新设备安全地添加到受信任的网络,以及确保正常操作期间的安全通信。 最后,任何物联网器件最终都应满足应用特定的传感器或致动器功能要求。
以下是将 Atmel 的智能插头参考设计用作无线物联网设计综合工作指南的原因。 对设计师而言,它整合了安全的互联网连接型产品所需的所有软硬件。 同时,该设计是一个启用了 Wi-Fi 功能的电源插头,其中展示了三个主要的用例模型:使用其电容式触摸按钮进行本地控制;通过带 Wi-Fi 连接(带或不带云连接)的移动应用进行控制;或通过使用相关应用计划开/关定时进行基于定时器的控制。
与许多新兴物联网入门套件不同,Atmel 智能插头参考设计以无云版本提供。 实际上,Atmel 提供了专为云集成而设计的固件版本,但开发人员还需要密切关注“雾计算”的趋势。
在雾计算中,提高数据处理、存储和应用的控制水平是以本地方式在“边缘”位置执行的,而不是仅仅依靠云。 除了实现“始终可用”的服务外,此方法还能降低服务延迟,提高安全性,节省能源,并提升整体用户体验。
器件设计
智能插头设计本身由三块印刷电路板 (PCB) 组成,分别用于供电、MCU 和触摸控制。 MCU 板垂直安装在电源板上,触摸板通过引脚连接器连接到 MCU 板(图 1)。 Atmel 提供三种版本的智能插头,分别符合美国、欧洲和中国标准。 三种版本分别提供每个地区的标准插头和插座,但使用相同的印刷电路板。
图 1: Atmel 智能插头参考设计将数字电路和电源电路分为单独的板,其中三分之一的板用于 LED 和 QTouch 接口。 (图片来源: Atmel Corp.)
触摸板包含 Wi-Fi 和电源 LED 以及基于 QTouch 技术的触摸传感器。 QTouch 采用 Atmel 的电容式触摸感应技术,该技术具有在不太理想的环境中获得可靠性能所需的抗噪能力和环境耐受力。
电源板包含一个 AC/DC 转换器、一个 DC/DC 转换器、功率测量电路、继电器以及插头和插座。 AC/DC 转换器专用于将 100 V/240 VAC 输入电压转换为 12 V/120 mA(典型)DC 输出,以向继电器和 DC/DC 转换器供电。 AC/DC 转换器将定制变压器与 Monolithic Power Systems 的 MP020-5 开关稳压器结合使用。
MP020-5 是一种离线式、初级侧稳压器,不需要光耦合器或次级反馈电路便可提供准确的恒定电压和恒定电流调节。 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 收发器以及 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 连接而设计,集成了全部收发器信号链并提供多个外设接口,包括用于与主机 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 则用于跟功率测量子系统连接。 此外,此模块还提供了 9 个通用输入/输出 (GPIO) 引脚,开发人员可对其编程以引出特定于应用的功能。
图 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 执行电压和电流测量,DSP 可计算即时功率、RMS 电流、RMS 电压以及累积的电能。 结果将通过 UART 端口传输至 ATSAMW25。 为了隔离线路电压和内部电源域,此设计包含两个光耦合器用于保护 ATM90E26 和 ATSAMW25 之间的连接(ATSAMW25 模块上的引脚 40 和 41)。
软件设计
在智能插头参考设计中,主程序在 ATSAMW25 模块中嵌入的 ATSAMD21G18 MCU 上运行。 此软件设计不使用实时操作系统 (RTOS)。 相反,所有软件功能块在初始化后以无限循环运行。 关键的 MCU 软件功能包括通过 ATWINC1500 驱动程序提供的 Wi-Fi 连接;通过 ATECC508A 驱动程序和软件 AES 库提供的安全性;通过 ATM90E26 驱动程序提供的能源测量;以及通过 Atmel QTouch 库提供的触摸按钮控制。
在智能插头参考设计中,应用固件区分为两个分区 — 应用 1 和应用 2(图 5)。 除了这些应用分区外,内部闪存包括用于存储用户信息、Wi-Fi 网络信息和使用数据的仿真 EEPROM。
图 5: 由于智能插头固件的存储器封装相对较小,因此两个应用副本可在 ATSAMD21G18 MCU 的 256KB 闪存内共存,从而在不需外部存储器的情况下实现无线升级。 (图片来源: Atmel Corp.)
复位后,使用简单的引导程序确定要运行的应用固件分区。 在此,引导程序代码会查看引导程序头文件 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: 引导程序代码只检查哪个应用区域(APP1 或 APP2)有效,并在活动的应用区域调用此代码以开始执行智能插头设备软件。 (代码来源: Atmel Corp.)
最后,引导程序设置为在相应的应用空间运行此代码,并跳至该应用。
得益于设计的 SoC 所具有的高集成度,参考设计的存储器封装极小。 程序存储器使用量为 83244 字节(容量的 31.8%),数据存储器使用量仅为 15632 字节(容量的 47.7%)。 由于此存储器外形极小,该设计能支持典型 IoT 边缘节点所需的无线 (OTA) 升级。 ATSAMD21G18A MCU 的 256 KB 内部闪存预留了足够的空间来存储下载的固件映像,同时将原始固件保留不变。 因此,此参考设计不需要外部存储进行 OTA 升级。
Atmel 为设备以及整个安卓应用提供了完整的代码包。 开发人员可以通过公司的在线工具 Atmel START 访问软件配置,该工具适用于配置软件组件以及时钟和引脚布局等器件设置。 智能插头配置附带预建的 Wi-Fi 堆栈、加密服务和 IO 管理等中间件以及一整套软件驱动程序(图 6)。
图 6: Atmel 提供了一整套软件开发和调试工具,包括在设计的硬件器件组中用于配置软件组件及器件设置的在线工具。 (图片来源: Atmel Corp.)
完成配置后,开发人员将导出项目并在 IDE 中打开它,进行进一步的软件开发。 针对应用开发,Atmel 提供了围绕 Atmel Studio 7 构建的全面工具链,其中通过 Atmel 调试器、编程器和仿真器结合了代码开发工具与集成调试功能。 针对智能插头设计,Atmel 软件框架 (ASF) 提供了 API 以用于 Wi-Fi 连接、安全、通信协议、传感器读数和 UI。 开发人员可以使用 Atmel 的 ASF Explorer 将驱动程序、通信堆栈和服务从 ASF 导入到其项目中。 ASF Explorer 会自动管理库的依赖关系,确保代码包中包含需要的驱动程序。
与大多数新兴的物联网器件一样,Atmel 智能插头依赖于移动应用实现用于监控和控制的用户界面。 实际上,Atmel 提供的安卓应用是此参考设计不可或缺的一项功能。 通过此应用,用户可以在设置期间管理 Wi-Fi 部署、与多个用户共享设备、执行无线升级、打开和关闭设备、计划开/关定时甚至包括查看使用历史记录。
物联网安全机制
Atmel 安卓应用在确保安全操作方面发挥重要作用。 Atmel 智能插头参考设计实施了稳健安全策略,要求在设置和正常操作期间,设备与应用之间使用认证通信。 由于智能插头设计在功能上代表了大多数物联网边缘节点的设计,因此该参考设计为实施物联网安全措施提供了详细指南。
此设计依赖 Atmel ATECC508A 硬件加密引擎和软件加密库实施安全功能,包括:
- FIPS186-3 椭圆曲线数字签名算法 (ECDSA),用于安卓应用和智能插头验证;
- FIPS SP800-56A 椭圆曲线 Diffie-Hellman 算法 (ECDH),用于生成会话密钥,而决不会在安全密钥存储之外传输私钥;
- 高级加密标准 (AES)-128 加密块链接 (CBC) 模式,用于对网络通信进行数据加密和解密;
- 基于 SHA-256 的 MAC(信息验证代码),用于数据完整性检查。
安卓应用侧的软件中也实施了相同的安全功能,以便在智能插头设备与应用之间进行安全通信。
基于密钥的加密对任何物联网设计中的密钥安全提出了苛刻的要求。 在智能插头设计中,ATECC508A 加密器件通过其基于硬件的安全加密密钥存储和加密对策满足了这一需求。 当设计进入量产后,将会在安全的工厂环境中配置密钥存储(例如 ATECC508A 中的密钥存储),然后再上市销售,以确保私钥安全。
在现场,该设计使用先进的验证方案将新的智能插头设备加入现有网络,并在经验证的智能插头设备与应用之间交换数据。 在智能插头与应用相互完成验证后的数据交换期间,智能插头使用其 MAC 地址和一个随机数质询进行应答。 由于智能插头在(安全)加入网络后会收到安卓应用公钥,因此 ATECC508A 可生成一个 ECDH 预先主 (Pre-master) 密钥,并使用 MAC 算法随机生成密钥,以输出仅在会话期间有效的临时密钥。 反过来,ATECC508A 将此会话密钥用作 AES 密钥,对在应答中传输至安卓应用的信息进行加密。 尽管添加新智能插头设备的安全流程更为复杂,但它遵循相似的安全理念,即随机密钥交换、质询和验证。
但对开发人员而言,Atmel 驱动程序和 API 会处理具体细节。 例如,只需在 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 — 要加密的字节
- plain_txt_size — 要加密的字节数
- cypher_txt — 加密后的文本
- iv — CBC 模式的初始化矢量
结论
物联网设计要求成功的功能集成,包括连接、安全和应用资源。 通过结合一项稳健的物联网参考设计,新物联网开发人员可快速积累经验,经验丰富的开发人员则可加快实现物联网设计。 Atmel 智能插头参考设计为物联网设计提供了一个综合工作示例。 此设计通过结合用于无线连接、安全和能源计量的软硬件,针对物联网设计组件之间的交互提供了深入见解,并可作为复杂的自定义物联网设计的出发点。