嵌入式AES硬件加速实战:从原理到MSPM0 AESADV模块应用 1. 项目概述为什么嵌入式系统需要AES硬件加速在物联网设备、智能家居、工业传感器这些资源受限的嵌入式场景里数据安全不再是“锦上添花”而是“生死攸关”的底线。你可能遇到过这样的困境设备需要与云端进行加密通信但用软件库跑AES-128加密一个数据包CPU占用率就飙升到30%以上系统响应变慢功耗也上去了。更别提AES-256或者GCM这种带认证的复杂模式纯软件实现几乎能把一个低功耗MCU的算力吃干抹净。这就是AES硬件加速器存在的根本原因——它把那些繁重的、重复的加解密运算从通用CPU的肩上卸下来交给一块专门为此设计的电路去完成。AES也就是高级加密标准是目前全球最主流的对称加密算法。它的核心是Rijndael算法通过多轮的字节替换SubBytes、行移位ShiftRows、列混合MixColumns和轮密钥加AddRoundKey操作对128位的数据块进行混淆和扩散。软件实现这些操作本质上是大量的查表和异或运算非常消耗CPU周期。而硬件加速器比如德州仪器MSPM0系列微控制器里的AESADV模块就是把这些算法步骤“烧”进了硅片里用专用的数据通路和状态机来执行效率有数量级的提升。我手头这个MSPM0 L系列的芯片其AESADV模块的实测数据很能说明问题加密或解密一个128位的数据块无论是128位还是256位密钥都只需要大约80个时钟周期。在32MHz的主频下这就是2.5微秒左右如果跑到80MHz时间能缩短到1微秒以内。这意味着什么意味着你可以在几乎不感知的延迟内完成对通信帧的加密同时让CPU腾出手来处理应用逻辑、传感器数据或者网络协议栈整个系统的实时性和能效比得到了质的改善。接下来我们就深入这个“黑盒子”内部看看它是如何工作的以及怎么把它用起来。2. AESADV硬件加速器架构与核心特性解析2.1 模块整体架构与数据流打开MSPM0的技术参考手册找到AESADV的框图你会发现它的设计非常清晰核心目标就是高效、安全地处理数据流。整个模块可以看作一个精密的“加密/解密流水线”。模块的核心是一个AES处理核心它内部集成了执行标准AES轮运算的逻辑以及一个独立的用于GCM模式的伽罗华域乘法器。这个乘法器能并行工作当你在处理GCM认证加密时AES核心在加密数据乘法器同时在计算认证标签两者互不干扰极大地提升了吞吐率。数据进出这个核心主要通过几个缓冲区输入缓冲区负责接收来自CPU或DMA的明文加密时或密文解密时。软件可以通过DATA0-DATA3这四个32位寄存器依次写入一个128位块也可以配置DMA直接向DATA_IN寄存器连续写入。输出缓冲区存储处理完毕的密文或明文。同样可以通过DATA0-DATA3读取或由DMA从DATA_OUT寄存器自动搬走。密钥与IV寄存器这是模块的“保险箱”。密钥可以来自两个地方一是通过芯片内部的密钥存储控制器通过一条安全私有总线注入这个过程软件无法窥探安全性最高二是软件直接写入KEY0-KEY7寄存器。初始化向量IV则通过IV0-IV3寄存器配置。模块通过一组内存映射的控制寄存器如AES_CTRL来配置工作模式、密钥长度、方向加密/解密等。状态寄存器如STATUS则实时反馈“上下文就绪”、“输入缓冲区空”、“输出缓冲区满”等信息方便软件轮询或触发中断。注意一旦通过密钥存储控制器加载了密钥STATUS.KEYWR位会被置1此时软件再尝试写KEYx寄存器是无效的这是硬件防止“密钥窃取攻击”的一种机制。如果想改用软件加载密钥必须复位整个AES模块。2.2 支持的工作模式全览AESADV不是一个只能干ECB模式的“单功能”模块它几乎支持了所有你在实际通信协议中会用到的模式这也是它名字里“ADV”高级的由来基本加密/解密模式ECB电子密码本模式。最简单每个数据块独立加密。但切记它不能用于加密有规律的数据流因为相同的明文块会产生相同的密文块安全性很差通常仅用于加密随机密钥本身。CBC密码分组链接模式。每个明文块先与前一个密文块异或再加密。解决了ECB的模式重复问题但它是串行的无法并行计算。CFB密文反馈模式。可以将块密码转换为自同步的流密码。支持CFB-1, CFB-8, CFB-128等不同反馈宽度适用于需要逐字节或逐位加密的场景如某些串行通信。OFB输出反馈模式。也是将块密码转为流密码但它生成的密钥流与明文无关加解密操作完全对称。必须确保每个IV对于同一个密钥只使用一次。CTR计数器模式。我个人在物联网项目中最常用的模式。它将一个计数器与Nonce一次性数字拼接后加密生成密钥流再与明文异或。优势非常明显可以并行加密因为每个块的密钥流生成不依赖其他块并且加解密操作完全相同都是加密操作代码实现简单。同样Nonce必须唯一。纯认证模式CBC-MACCMAC基于CBC或改进算法生成消息认证码用于验证数据完整性和真实性但不提供机密性。认证加密模式现代协议首选AES-CCM CTR模式加密 CBC-MAC认证的组合。在蓝牙、Wi-Fi、Thread等协议中广泛应用。AES-GCM伽罗华/计数器模式目前的主流和推荐选择。它结合了CTR模式的高效并行加密和基于伽罗华域的GMAC认证性能极高。AESADV模块的亮点就在于其内置的硬件伽罗华域乘法器专门为GCM加速。2.3 性能数据与功耗考量我们来看手册里那个关键的性能表它是在理想无延迟情况下测得的AESADV 密钥长度操作周期数时间 32MHz时间 80MHz128-bit加密76 cycles2.38 µs0.95 µs128-bit解密76 cycles2.38 µs0.95 µs256-bit加密81 cycles2.53 µs1.01 µs256-bit解密81 cycles2.53 µs1.01 µs解读与实操心得解密为何和加密一样快注意表格备注“with pregenerated decryption key”。在AES中解密需要用到反向轮密钥这个生成过程在软件实现时是耗时的。AESADV模块在硬件中集成了密钥调度逻辑无论是加密密钥还是解密密钥都能在硬件中快速生成所以加解密性能对称。这是硬件加速带来的巨大优势之一。“理想无延迟”意味着什么这个数据是引擎核心的“净计算时间”。实际吞吐率取决于你喂数据和取数据的速度。如果你用CPU一个个字地读写大部分时间会浪费在等待和操作寄存器上。因此要想发挥硬件加速器的全部威力必须搭配DMA直接内存访问。让DMA自动搬运数据AES引擎计算完一块DMA立刻搬走结果并送入下一块数据形成流水线这样才能逼近理论峰值性能。功耗优势除了快硬件加速还能大幅节能。让专用的、优化过的电路在几十个周期内干完活然后迅速进入休眠远比让CPU跑上千条指令要省电。这对于电池供电的物联网设备至关重要。3. 核心操作流程与寄存器级编程指南理解了架构我们进入实战环节。使用AESADV本质上就是正确配置一系列寄存器然后启动数据流。下面我以最常见的几种场景拆解每一步的操作和背后的原理。3.1 单数据块操作从轮询到中断我们先从最简单的单块加密开始不用DMA用CPU直接操作。这个过程是理解所有模式的基础。假设我们要用128位密钥加密一个128位的数据块。以下是基于伪代码的详细步骤解析// 1. 等待模块就绪 while((AES_CTRL CNTXT_RDY_MASK) 0); // 等待上下文就绪表示可以配置新的密钥和模式 while((AES_CTRL INPUT_RDY_MASK) 0); // 等待输入缓冲区就绪表示可以写入新数据 // 2. 加载密钥 (软件方式) AES_KEY0 key[0]; // 写入密钥低32位 AES_KEY1 key[1]; AES_KEY2 key[2]; AES_KEY3 key[3]; // 写入密钥高32位 // 如果是256位密钥则需要继续写入KEY4-KEY7 // 3. 配置控制寄存器 AES_CTRL 0; // 先清空 AES_CTRL | (0 SAVE_CNTXT_POS); // 不保存上下文单次操作 AES_CTRL | (1 KEYSIZE_POS); // 01b 代表 AES-128 AES_CTRL | (1 DIR_POS); // 1 代表加密 // 4. 写入待加密的明文数据块 AES_DATA0 plaintext[0]; // 明文数据块的低32位 AES_DATA1 plaintext[1]; AES_DATA2 plaintext[2]; AES_DATA3 plaintext[3]; // 明文数据块的高32位 // 写入DATA3寄存器这个动作会触发引擎开始计算 // 5. 等待输出就绪并读取结果 while((AES_CTRL OUTPUT_RDY_MASK) 0); // 轮询等待输出缓冲区有有效数据 ciphertext[0] AES_DATA0; // 读取密文数据块的低32位 ciphertext[1] AES_DATA1; ciphertext[2] AES_DATA2; ciphertext[3] AES_DATA3; // 读取密文数据块的高32位为什么是这个顺序先等CNTXT_RDY这个标志位确保之前的操作已经完成密钥寄存器和控制寄存器可以安全写入。如果你在引擎忙的时候写密钥行为是未定义的。再等INPUT_RDY确保输入缓冲区是空的可以接收新的128位数据。在连续块操作时这个标志尤其重要。写入DATA3触发计算模块设计为当128位数据块完整写入即DATA3被写入后自动开始处理。这是一个关键细节。轮询OUTPUT_RDY计算完成后此位置1此时输出缓冲区的数据才是有效的。读取DATA0-DATA3中任意一个都会清空输出缓冲区为下一块数据做准备。中断方式优化轮询太浪费CPU。我们可以使能AES中断并在中断服务程序里检查CPU_INT.IIDX.STAT字段。如果值是0x2(INPUTRDY)说明可以写入下一块数据如果是0x1(OUTPUTRDY)说明可以读取上一块的结果。这样CPU只需要在数据搬运时被唤醒效率更高。3.2 多数据块与DMA实战以ECB和CBC为例单块操作教学意义大于实际意义。真实场景往往是加密一整段数据。这时DMA就是你的最佳拍档。我们以ECB和CBC模式的DMA配置为例看看如何搭建一个“无人值守”的加密流水线。ECB模式DMA加密流程配置输出DMA通道搬密文触发源选择AES Trig1。这个触发会在AES引擎输出一个32位数据后自动产生。源地址设为AES_DATA_OUT寄存器地址。目的地址指向你存放密文的SRAM缓冲区。传输大小设为N * 4其中N是128位块的数量乘以4是因为每个块要搬4次32位数据。模式设为单次触发单次传输模式。使能触发在AES模块的事件屏蔽寄存器中取消对DMA_TRIG1的屏蔽。配置输入DMA通道喂明文触发源选择AES Trig0。这个触发会在AES引擎输入缓冲区空准备好接收新数据时产生。源地址指向你存放明文的SRAM缓冲区。目的地址设为AES_DATA_IN寄存器地址。传输大小同样设为N * 4。模式单次触发单次传输。使能触发取消对DMA_TRIG0的屏蔽。配置DMA传输完成中断使能输出DMA通道的传输完成中断这样当所有密文都搬完后CPU会收到通知。配置AES握手模式设置AES_DMA_HS[DMA_DATA_ACK] 1。这是关键一步它告诉AES模块使用DMA握手协议模块会等待DMA完成一次32位读写后再进行下一次触发确保数据同步。配置AES控制寄存器设置密钥长度 (CTRL.KEY_SIZ)。设置方向为加密 (CTRL.DIR 1)。其他位清零即选择ECB模式。加载密钥通过软件或密钥存储控制器加载密钥。启动加密向AES_C_LENGTH_0和AES_C_LENGTH_1寄存器写入总字节数N * 16(或N * 4的32位字数)。这个写操作就是整个加密流水线的“发令枪”。等待完成CPU进入低功耗模式等待DMA完成中断。中断到来时所有N个数据块的加密和搬运工作均已自动完成。CBC模式与ECB的关键差异CBC模式的DMA配置流程与ECB几乎完全一样只有两个核心区别必须设置初始化向量在启动前需要向IV0-IV3寄存器写入一个随机或不可预测的IV值。这是CBC安全性的基础。控制寄存器配置不同需要设置CTRL.CBC 1来启用CBC模式。其他步骤DMA通道配置、密钥加载、长度设置完全相同。实操心得DMA通道的“乒乓”缓冲技巧对于超大数据流的加密可以考虑使用双缓冲技术。配置两个DMA描述符链表当其中一个DMA通道正在从缓冲区A搬运数据到AES时CPU或另一个DMA正在准备下一个数据块到缓冲区B。两个缓冲区交替使用可以几乎完全隐藏数据准备时间让AES引擎持续满负荷工作达到最大吞吐率。这在处理视频流、大文件加密等场景时非常有效。3.3 流密码模式CTR模式的独特优势与配置CTR模式是我在物联网通信中的最爱因为它兼具安全、高效和易用的特点。它的配置和ECB/CBC的DMA流程类似但原理和细节上有其特殊性。CTR模式工作原理简述它不是直接加密数据而是加密一个“计数器”。这个计数器由两部分组成一个全局唯一的Nonce和一个逐块递增的Counter。加密后的计数器输出作为“密钥流”与明文进行简单的异或操作就得到密文。解密过程完全一样用相同的Nonce和Counter序列生成密钥流再与密文异或。在AESADV中的配置要点IV寄存器的特殊含义在CTR模式下你写入IV0-IV3寄存器的值就是Nonce || Counter的初始值。例如对于最常见的CTR-96模式IV0-IV296位存放NonceIV332位的低位存放Counter的初始值。控制寄存器配置设置CTRL.CTR 1启用CTR模式。通过CTRL.CTR_WIDTH选择计数器宽度。00b(CTR32)表示Counter占32位10b(CTR96)表示Counter占96位这里需要纠正通常CTR_WIDTH选择的是Nonce的宽度Counter是剩余部分。例如CTR-96意味着IV的高96位是Nonce低32位是Counter。务必根据你的协议要求正确设置。自动递增最大的便利在于AESADV硬件内部会自动管理Counter的递增。你只需要设置好初始的Nonce||Counter在加密/解密多个块时硬件会在处理完每个块后自动将Counter部分加1完全无需软件干预。这对于DMA连续操作来说是完美的。加解密同构CTR模式的加密和解密是完全相同的操作都是“用密钥加密Counter然后与数据异或”。因此在配置时CTRL.DIR位加密/解密方向实际上不影响核心的CTR密钥流生成过程。通常为了清晰加密时设为1解密时设为0但硬件行为可能是一致的。这一点与CBC模式加解密流程不同有本质区别。CTR模式DMA配置示例假设我们需要用CTR-96模式加密一段数据。// 1. 配置DMA通道同ECB/CBC略 // 2. 加载密钥略 // 3. 设置初始 IV Nonce || Counter AES_IV0 nonce_part0; AES_IV1 nonce_part1; AES_IV2 nonce_part2; // 非标准96位Nonce这里假设Nonce占3个32位字 AES_IV3 initial_counter; // Counter初始值例如0 // 4. 配置控制寄存器 uint32_t ctrl_value 0; ctrl_value | (1 KEY_SIZ_POS); // AES-128 ctrl_value | (1 DIR_POS); // 加密 ctrl_value | (1 CTR_POS); // 启用CTR模式 ctrl_value | (2 CTR_WIDTH_POS); // 假设10b对应CTR-96请查证具体手册位定义 AES_CTRL ctrl_value; // 5. 设置数据长度并启动同ECB略启动后DMA和AES硬件就会协作自动完成整个数据流的加密。每个数据块使用的Counter值都会自动递增保证了密钥流的唯一性。4. 高级模式GCM认证加密的硬件加速实现GCM模式是当前的行业标杆它一次性解决了机密性CTR加密和完整性/真实性GMAC认证两大问题。纯软件实现GCM非常复杂且耗时尤其是其中的伽罗华域乘法。而AESADV模块的硬件加速使其在嵌入式端成为可能。4.1 GCM原理与硬件分工GCM可以看作是两个并行进行的操作CTR模式加密和前面讲的CTR模式完全一样用于对载荷数据进行加密。GMAC认证计算对所有需要认证的数据包括附加认证数据AAD和加密后的密文进行一种基于伽罗华域乘法的哈希计算最终生成一个128位的认证标签TAG。AESADV模块的巧妙之处在于它内部有一个独立的多项式乘法模块即GHASH引擎。当AES核心在忙着进行CTR加密时这个GHASH引擎可以并行地对密文或AAD进行计算。这种硬件并行化是软件无法比拟的。4.2 GCM操作模式与配置选择根据H哈希子密钥和加密后的Y0是否由硬件计算GCM有三种配置模式对应CTRL.GCM位的不同设置自主GCM模式(GCM11b)这是最省事的模式。你只需要提供原始密钥、IV、AAD和明文。硬件会自己计算H E(Key, 0)并计算Y0 GHASH(IV)然后加密它。适用于单次、独立的加密会话。H预计算模式(GCM10b)如果你要用同一个密钥加密多个数据包这在会话通信中很常见那么每个包的H值是一样的。你可以先单独执行一次ECB加密对全0数据块算出H然后保存起来。在后续每个包的GCM操作中直接提供这个预计算的H节省了重复计算H的时间。你需要将H值写入H0-H3寄存器。仅GHASH模式(GCM01b)此模式下Y0-encrypted被强制为0引擎只执行GHASH运算输出明文的认证标签。这主要用于处理非标准长度的IVGCM允许IV不是96位。你需要先对IV进行GHASH运算得到标准的128位Y0才能用于后续的GCM加密。4.3 GCM DMA操作全流程解析GCM的DMA配置比普通模式稍复杂因为它涉及两种数据AAD和加密载荷。以下是自主GCM加密的步骤精炼DMA通道配置输出DMA监听AES Trig1从DATA_OUT读取密文写入SRAM。传输大小设为N*4N个加密数据块。输入DMA监听AES Trig0从SRAM读取数据写入DATA_IN。关键点输入数据流在内存中必须是AAD数据在前紧接着是明文数据。因此DMA传输总大小是(MN)*4其中M是AAD的32位字数。上下文配置加载加密密钥。将GCMCCM_TAG0-TAG3寄存器清零初始化认证状态。写入IV到IV0-IV3。配置控制寄存器设置密钥长度、方向为加密、CTRL.GCM3自主模式、CTRL.CTR1启用CTR、CTRL.SAVE_CNTXT1允许保存上下文用于续操作。设置长度并启动向C_LENGTH_0/1写入加密数据的字节数 (N*16)。向AAD_LENGTH寄存器写入AAD数据的字节数 (M*16)。写入AAD长度这个动作通常会触发引擎开始处理AAD数据流。等待与获取结果等待DMA输出通道完成中断此时所有密文已输出。最后从TAG0-TAG3寄存器中读取最终的128位认证标签。这个标签需要和密文一起发送给接收方用于验证。重要提示GCM的“续操作”AESADV支持GCM操作的暂停与恢复。这在处理超长数据流或实时流时非常有用。基本流程是在暂停前停止DMA然后设置CTRL.GET_DIGEST位请求获取当前的中间摘要上下文。硬件会计算并保存当前状态。恢复时将保存的上下文包括密钥、IV、当前计数器值、中间摘要等重新加载到寄存器然后重新配置DMA并启动即可从断点继续。这要求软件仔细管理上下文数据。5. 常见问题、调试技巧与安全实践5.1 典型问题排查速查表在实际开发中你肯定会遇到各种问题。下面这个表格总结了我踩过的一些坑和解决方法现象可能原因排查步骤与解决方案加密/解密结果错误1. 密钥加载错误或顺序错误。2. 工作模式ECB/CBC等配置错误。3. IV未设置或设置错误CBC/CTR等模式。4. 数据大小不是128位16字节的整数倍对于需要填充的模式。5. DMA传输源/目的地址或大小配置错误。1.核对密钥用已知的测试向量如NIST标准测试用例验证。确保写入KEY0-KEY7的顺序与你的密钥数组字节序匹配是小端还是大端。2.检查CTRL寄存器逐位确认DIR,CBC,CTR,GCM等模式位是否正确。3.确认IV对于CBC、CTR、GCM等模式必须配置IV。检查IV值是否正确写入IV0-IV3。4.处理填充对于CBC等需要块对齐的模式如果数据不是16字节的整数倍必须在软件侧进行填充如PKCS#7。AES硬件本身不负责填充。5.调试DMA先用CPU轮询模式验证单块加解密是否正确。如果正确再启用DMA。检查DMA通道的源/目的地址、传输宽度必须是32位、传输次数是否正确。利用DMA完成中断和传输计数器辅助调试。DMA操作卡住不触发或只触发一次1. DMA触发事件未正确使能或映射。2.DMA_HS[DMA_DATA_ACK]未设置为1。3. AES引擎未就绪 (CNTXT_RDY或INPUT_RDY为0) 时就启动了DMA或写入了长度。4. DMA传输大小设置错误。1.检查事件映射确认DMA通道的触发源选择寄存器正确选择了AES_TRIG0或AES_TRIG1。在AES模块中确认对应触发事件的IMASK位已清零使能。2.确认握手模式必须设置AES_DMA_HS[DMA_DATA_ACK] 1以启用DMA握手协议。3.遵循启动序列确保在配置DMA和AES后先等待CNTXT_RDY和INPUT_RDY再写入C_LENGTH寄存器启动操作。4.核对传量DMA传输大小是32位字的数量即块数 * 4。GCM认证失败1. AAD数据长度或加密数据长度设置错误。2. AAD数据和加密数据在内存中的顺序或内容错误。3. 未正确读取或比较TAG。4. IV重复使用对于同一个密钥。1.严格设置长度AAD_LENGTH和C_LENGTH必须精确到字节。AAD数据长度必须是填充前的原始长度。2.验证数据流确保输入DMA搬运的数据流严格按照AAD 明文的顺序排列在内存中。可以用调试器查看内存内容。3.完整读取TAG操作完成后必须从TAG0-TAG3四个寄存器完整读取128位标签。比较时注意字节序。4.保证IV唯一性GCM的IV必须是唯一的。通常使用递增的报文计数器或随机数生成。性能远低于预期1. 使用CPU轮询而非DMA。2. DMA配置为单次模式而非连续或Ping-Pong模式。3. 系统总线或内存访问成为瓶颈。4. 中断处理程序耗时过长。1.启用DMA这是提升性能的首要步骤。2.优化DMA对于连续数据流使用DMA的自动重载或链表模式减少CPU配置开销。考虑使用双缓冲区。3.检查系统架构确保AES模块和DMA访问的SRAM位于同一总线且没有其他高优先级主设备如CPU密集访问造成总线拥塞。4.精简ISRDMA完成中断服务函数应只做标志设置等最小工作将数据处理移出ISR。5.2 安全开发实践要点密钥管理是核心尽可能使用芯片的密钥存储控制器来管理密钥。这提供了硬件级别的安全隔离防止软件漏洞导致密钥泄露。如果只能用软件加载确保密钥在内存中停留时间最短使用后立即清空相关变量和寄存器。IV/Nonce必须唯一对于CBC、CTR、GCM等模式IV/Nonce的重复使用会严重破坏安全性。使用高质量的随机数生成器如果芯片有TRNG最好或保证唯一性的计数器来生成IV。模式选择要谨慎绝对不要用ECB加密有意义的数据。它只适用于加密随机数据如本身已加密的密钥。对于需要认证的通信优先选择GCM或CCM。它们提供了“认证加密”的完整性。CTR模式非常适合需要并行加密或随机访问的场景但务必保证Nonce的唯一性。注意时序侧信道攻击虽然硬件加速器本身通常对时序攻击有较好的抵抗力但你的软件控制流程如比较认证标签时的逐字节比较可能引入漏洞。比较TAG时应使用常数时间的比较函数。5.3 调试与验证方法从已知向量开始NIST和芯片厂商通常提供标准测试向量。先用最简单的CPU轮询模式对一个已知的明文、密钥、IV验证加密结果是否正确。这是排除硬件和基础驱动问题的最快方法。善用状态寄存器STATUS寄存器中的CNTXT_RDY,INPUT_RDY,OUTPUT_RDY,KEYWR等位是调试的“眼睛”。在关键操作前后检查它们可以快速定位是配置问题、数据未就绪还是密钥加载问题。分步验证DMA先配置好AES模块用CPU手动写入/读取一块数据确认加解密功能正常。然后单独测试DMA通道让它从一个内存区域搬运数据到另一个区域确认DMA配置正确。最后再将两者结合。使用逻辑分析仪或调试器如果条件允许用调试器观察DATA_IN,DATA_OUT寄存器的值或者用逻辑分析仪抓取总线上的DMA传输序列可以直观地看到数据流是否如预期般流动。最后再分享一个小心得在低功耗应用中AES硬件加速器在SLEEP模式下通常也是可以工作的。这意味着你可以在CPU休眠时让DMA和AES引擎协作完成大量的数据加解密工作完成后通过中断唤醒CPU。这能极大地降低系统整体功耗。具体是否支持需要查阅你所用芯片的“Operating Modes”章节。把这个特性用起来你的电池续航能力可能会有惊喜。