CC2652R无线MCU:传感器控制器与硬件加密加速器的低功耗物联网设计实践

发布时间:2026/7/15 5:33:21

CC2652R无线MCU:传感器控制器与硬件加密加速器的低功耗物联网设计实践 1. 项目概述为什么CC2652R是物联网节点的“瑞士军刀”在物联网节点和可穿戴设备的设计里我们工程师每天都在和两个“魔鬼”做斗争功耗和性能。你希望设备能持续工作数年又希望它能实时响应、安全通信这听起来就像要求一辆车既省油又能跑F1。传统的单核MCU架构在这里常常捉襟见肘——主CPU要么被频繁唤醒处理传感器数据耗电剧增要么为了省电而牺牲响应速度用户体验大打折扣。更别提还要在资源有限的单片机上跑复杂的加密算法那点可怜的算力和内存光是想想就头疼。TI的CC2652R这款无线MCU我第一次接触时就觉得它像为这个矛盾场景量身定制的“瑞士军刀”。它没有采用简单的“主CPU外设”架构而是引入了两个堪称“秘密武器”的专用协处理器传感器控制器Sensor Controller和硬件加密加速器Cryptography Accelerators。这不仅仅是多了两个模块而是一种设计哲学的转变将确定性的、重复性的、对实时性有要求的任务从通用主CPU中彻底剥离交给更擅长、更省电的专用硬件去执行。传感器控制器本质上是一个超低功耗的微型CPU它能在外设和主系统深度睡眠时独立完成ADC采样、GPIO轮询、电容触摸检测等任务。这意味着你的主CPU可以安心地“睡大觉”只在传感器控制器收集到足够的数据或有重要事件时才被唤醒从而将系统的平均功耗拉低到微安级别。而硬件加密加速器则把AES、SHA-2、ECC这些耗时的加密解密操作从软件层面转移到硬件电路上。这不仅让加密速度有了数量级的提升更重要的是它释放了宝贵的主CPU算力和内存资源同时因为硬件执行效率极高其动态功耗也远低于软件实现。所以当你拿到一颗CC2652R你得到的不仅仅是一个支持多协议蓝牙5.2、Zigbee、Thread的无线射频芯片更是一个经过精心架构设计的低功耗、高安全性的片上系统。理解并用好这两个核心模块是解锁其全部潜力的关键。无论你是设计智能门锁、环境传感器还是复杂的可穿戴医疗设备这套组合拳都能让你在功耗、响应速度和安全性之间找到那个完美的平衡点。接下来我们就抛开数据手册的枯燥描述从一线开发者的视角深入拆解这两个模块到底怎么用以及在实际项目中如何避开那些常见的“坑”。2. 传感器控制器让主CPU“睡到自然醒”的守夜人2.1 架构与核心设计思路CC2652R的传感器控制器Sensor Controller Engine简称SCE不是一个简单的状态机或DMA而是一个拥有独立指令集和内存的、真正的可编程超低功耗CPU。它运行在一个独立的电源域时钟频率可低至2MHzSCLK_MF甚至32.768kHzSCLK_LF。这种设计思路非常明确将事件驱动的、周期性的传感器交互任务固化为一个轻量级、确定性的程序在主系统休眠时独立运行。它的工作模式可以类比为一个尽职的“守夜人”。主系统Cortex-M4F是“白天工作的镇长”处理复杂的应用逻辑和网络协议。而传感器控制器则是“夜晚巡逻的哨兵”按照预设的路线程序定时检查各个传感器门锁、窗户只有发现异常情况如数据超过阈值时才去敲醒镇长。这样一来镇长得到了充分休息整个城镇系统的能耗就大大降低了。这个守夜人拥有自己的“装备库”外设专用4KB SRAM用于存放其程序、数据和配置参数。这块内存的特点是不掉电即使在系统复位后里面的数据依然保持这对于需要维持状态的低功耗算法非常有用。模拟前端包括一个12位200ksps的ADC、一个低功耗比较器带可配置参考DAC以及电容触摸感应模块。数字接口一个最高6MHz的专用SPI Master以及可以通过GPIO进行“比特敲打”bit-bang模拟的UART和I2C。定时器三个灵活的16位定时器AUX Timer 0/1/2用于产生采样周期、PWM波形或进行事件捕获。2.2 开发流程与Sensor Controller Studio实战为这个“守夜人”编程TI提供了专门的图形化集成开发环境——Sensor Controller Studio (SCS)。它使用一种语法类似C的专有语言Sensor Controller Language极大地简化了开发流程。你不需要直接面对底层寄存器而是通过SCS进行可视化配置和逻辑编写。一个典型的开发流程如下任务定义在SCS中新建一个任务Task例如“每秒钟采样一次温度传感器”。外设配置通过图形界面配置ADC的采样率、输入通道、比较器的阈值等。逻辑编写在代码编辑器中用类C语言编写采样、滤波、判断的逻辑。例如// 这是一个简化的SCL代码逻辑示例 var sample; sample adc.read(CHANNEL_0); // 读取ADC值 if (sample THRESHOLD_HIGH) { io.setPin(WAKEUP_PIN, HIGH); // 触发唤醒引脚 task.stop(); // 停止本任务 }仿真与调试SCS内置了仿真器你可以注入模拟的传感器数据观察任务运行状态和变量变化无需实际硬件即可验证逻辑。代码生成点击生成SCS会输出一个C语言驱动文件如scif.cscif.h和一个二进制映像。这个二进制映像就是“守夜人”要执行的程序。主程序集成将生成的C文件加入你的主工程如基于TI-RTOS或FreeRTOS的工程。在你的主应用代码中通过调用scif驱动API来启动、停止传感器控制器任务并通过共享内存那块4KB SRAM或事件标志与它进行数据交换。实操心得内存共享是关键主CPU和传感器控制器通过那片4KB SRAM通信。你需要仔细规划这片内存的布局。通常SCS会在生成的代码中定义一个结构体例如SensorController_io其中包含了输入变量主CPU设置给SCE的参数、输出变量SCE计算的结果和状态变量。主程序通过读写这个结构体的实例来与SCE交互。务必确保主程序和SCS工程中对这个共享内存结构的定义完全一致否则会导致数据错乱。2.3 典型应用场景与配置要点场景一超低功耗温度/湿度监测需求每10分钟测量一次环境温湿度仅在数值超过设定范围时唤醒主CPU并通过无线网络上报警报。SCE实现配置AUX Timer 2每10分钟产生一次中断触发SCE任务。任务中控制SPI接口读取外部温湿度传感器如SHT30的数据。在SCE内部进行简单的滤波如移动平均和阈值比较。仅当数据超限时SCE通过设置一个IO引脚为高电平或触发一个中断事件唤醒主CPU。功耗估算主CPU和射频99.9%的时间处于STANDBY模式~1µA。SCE每10分钟活动约几十毫秒进行SPI读取和计算平均电流可轻松控制在10µA以下。场景二电容触摸按键与滑条需求实现多个电容触摸按键和线性滑条要求响应灵敏、抗干扰且功耗极低。SCE实现利用专用的电容感应模块。该模块包含恒流源、时间数字转换器TDC和比较器。SCE程序负责驱动感应电极、测量充电时间、进行基线跟踪自动补偿环境变化、应用滞后和滤波算法。以直接在SCE内判断按键按下/释放、滑条位置仅将最终结果如KEY_PRESSEDSLIDER_POSITION通过事件通知主CPU。优势所有实时性要求高的信号处理都在SCE内完成避免了主CPU被高频中断打扰。SCE甚至可以处理“手势”比如在检测到特定滑动序列后直接唤醒系统。场景三脉冲计数如水流/气流计量需求持续监测一个低速脉冲信号如霍尔传感器输出的水流脉冲进行计数和累计。SCE实现将一个GPIO配置为输入连接到脉冲信号。使用SCE的IO中断功能在脉冲的上升沿/下降沿触发中断。在中断服务程序中对一个计数器进行累加。可以结合定时器在SCE内计算瞬时频率流量。关键点即使脉冲频率很低如每小时几次主CPU也无需保持活动状态。SCE在2MHz甚至32kHz时钟下运行处理这种低频中断的功耗几乎可以忽略不计。注意事项时钟源选择SCE的时钟源选择直接影响其功耗和精度。对于需要精确计时的任务如定时ADC采样应使用32.768kHz的外部晶体XOSC_LF作为SCLK_LF。如果对时序要求不高仅需周期性唤醒可以使用内部32kHz RC振荡器RCOSC_LF以节省一颗外部晶体但需注意其精度较差典型±10%。SCE的高速模式2MHz RCOSC_MF用于执行复杂计算或高速接口如SPI完成后应立即切回低速模式。3. 硬件加密加速器为物联网安全装上“涡轮增压器”3.1 加密模块全景与性能优势在资源受限的物联网设备上实现软件加密就像用一台老式计算机解压高清电影——慢而且耗电。CC2652R集成的硬件加密加速器就是为解决这个问题而生的专用“协处理器”。它包含以下几个核心模块模块功能描述性能优势与典型用途AES加速器支持128/256位密钥的AES加解密。支持ECB CBC CBC-MAC CCM GCM等多种工作模式。速度提升数十倍。用于加密/解密无线通信数据包如蓝牙LE的链路层加密、安全存储。GCM模式同时提供加密和认证效率极高。SHA-2加速器支持SHA-224 SHA-256 SHA-384 SHA-512哈希算法。硬件计算极低延迟。用于生成数据完整性校验码HMAC、数字签名中的消息摘要、密钥派生如PBKDF2。真随机数生成器(TRNG)基于24个环形振荡器的物理噪声源生成真正的非确定性随机数。安全的随机性来源。用于生成加密密钥、初始化向量IV、随机挑战Challenge是任何加密系统的基石。公钥加速器(PKA)支持大数模运算模幂、模乘用于RSA最高1024位和椭圆曲线加密ECC 曲线最高512位。将分钟级的运算缩短至秒级。用于ECDSA签名/验证、ECDH密钥交换实现设备安全配网、身份认证。硬件加速带来的直接好处功耗大幅降低硬件电路执行特定操作的能量效率远高于软件循环。一次AES-128加密硬件加速可能只需几十微焦耳而软件实现可能需要几百微焦耳。释放CPU资源主CPU无需陷入冗长的加密计算可以更快速地处理应用逻辑或响应网络事件提升系统整体响应能力。减少代码体积复杂的加密算法库如mbedTLS TinyCrypt代码量很大。使用硬件加速后只需调用简单的驱动API显著节省Flash空间。提升安全性硬件TRNG提供了优质的随机数源硬件实现的算法更能抵抗侧信道攻击如时序攻击。3.2 驱动集成与典型应用流程TI通过SimpleLink SDK提供了完善的加密驱动库通常在source/ti/drivers/crypto或source/ti/devices/cc13x2_cc26x2/driverlib中。在实际项目中你通常不会直接操作硬件寄存器而是通过这些高级API来调用加速器。以一次完整的TLS简化握手为例展示硬件加速器的协作流程生成密钥对// 使用TRNG生成随机数作为私钥种子 #include ti/drivers/TRNG.h TRNG_Handle trngHandle; uint8_t randomSeed[32]; TRNG_init(); trngHandle TRNG_open(0, NULL); TRNG_generateEntropy(trngHandle, randomSeed, sizeof(randomSeed)); // 使用PKA基于随机种子生成ECC密钥对例如使用NIST-P256曲线 #include ti/drivers/crypto/CryptoCC26XX.h CryptoCC26XX_Handle cryptoHandle; CryptoCC26XX_ECCParams eccParams { .curveType CRYPTOCC26XX_ECC_CURVE_TYPE_NISTP256 }; uint8_t publicKey[64]; // 未压缩公钥 uint8_t privateKey[32]; // 私钥 cryptoHandle CryptoCC26XX_open(0); CryptoCC26XX_generateECKey(cryptoHandle, eccParams, privateKey, publicKey);执行ECDH密钥交换// 假设已获得对端的公钥 peerPublicKey uint8_t sharedSecret[32]; CryptoCC26XX_ECDHParams ecdhParams { .curveType CRYPTOCC26XX_ECC_CURVE_TYPE_NISTP256, .myPrivateKey privateKey, .theirPublicKey peerPublicKey, .sharedSecret sharedSecret }; CryptoCC26XX_computeECDH(cryptoHandle, ecdhParams); // 此时sharedSecret 即为双方协商出的共享密钥使用共享密钥进行对称加密通信// 使用AES-CCM模式加密一条消息同时提供加密和认证 #include ti/drivers/AESCCM.h AESCCM_Handle aesccmHandle; AESCCM_OneStepOperation operation; uint8_t key[16] ...; // 从sharedSecret派生出的会话密钥 uint8_t plaintext[] Hello, Secure World!; uint8_t ciphertext[sizeof(plaintext) 16]; // 预留认证标签空间 uint8_t nonce[13]; // 使用TRNG生成 AESCCM_init(); aesccmHandle AESCCM_open(0, NULL); operation.key key; operation.nonce nonce; operation.nonceLength 13; operation.input plaintext; operation.output ciphertext; operation.inputLength sizeof(plaintext); operation.mac ciphertext sizeof(plaintext); // 认证标签附加在密文后 operation.macLength 8; AESCCM_oneStepEncrypt(aesccmHandle, operation); // ciphertext 现在包含了加密后的数据和认证标签生成消息认证码// 使用HMAC-SHA256验证数据完整性 #include ti/drivers/SHA2.h SHA2_Handle sha2Handle; SHA2_HMAC_Params hmacParams; uint8_t hmacResult[32]; uint8_t hmacKey[] ...; uint8_t message[] ...; SHA2_init(); sha2Handle SHA2_open(0, NULL); hmacParams.key hmacKey; hmacParams.keyLength sizeof(hmacKey); hmacParams.message message; hmacParams.messageLength sizeof(message); hmacParams.digest hmacResult; SHA2_hmac(sha2Handle, hmacParams, SHA2_HASH_TYPE_256); // hmacResult 即为HMAC值实操心得资源管理与并发加密加速器是一个共享硬件资源。在TI-RTOS或FreeRTOS等多任务环境中必须通过信号量Semaphore或互斥锁Mutex来确保对加密模块的互斥访问防止多个任务同时调用导致的硬件状态冲突。SDK中的驱动通常已经封装了这部分逻辑如CryptoCC26XX驱动但如果你直接使用底层的DriverLib则需要自己管理。3.3 安全启动与密钥存储考量硬件加速器解决了“算得快”的问题但物联网安全还有一个核心“藏得好”。CC2652R本身提供了一些安全特性但完整的解决方案需要结合外元件或更高级的芯片如带有安全区域的CC2652P。密钥存储CC2652R没有不可读的硬件安全存储HSM。生成的私钥和根密钥通常需要存储在Flash中。这是极大的安全风险。为了缓解建议每次启动时使用一个“设备唯一密钥”如从芯片唯一ID派生加密存储在Flash中的实际密钥。对于最高安全等级的应用应使用带有安全存储和防篡改功能的协处理器或安全芯片如TPM SE。安全启动确保设备运行的固件未被篡改。CC2652R支持基于SHA-256的镜像验证。你可以使用TI的secure_boot工具在编译后对固件进行签名。芯片在启动时会先验证镜像的签名只有验证通过才会跳转执行。这个过程可以结合硬件加速器快速完成哈希计算。真随机数的重要性所有加密系统的安全性都建立在随机数的质量上。务必使用硬件TRNG (TRNG驱动) 来生成所有密码学意义上的随机数绝对不要使用软件伪随机数生成器如rand()。4. 低功耗系统设计协同作战的艺术传感器控制器和加密加速器是两把利剑但要发挥最大威力必须将它们融入整体的低功耗架构中。CC2652R提供了精细的电源管理模式我们需要根据应用场景来编排它们的“作息时间”。4.1 电源模式深度解析与切换策略CC2652R的电源模式并非简单的“开”和“关”而是一个有层次的状态机模式CPU状态内存状态传感器控制器加密加速器典型唤醒源进入/退出延迟典型电流Active运行保持可用可用N/AN/A几mA ~ 几十mA (取决于外设和射频)Idle停止保持可用可用任何中断~几µs显著低于Active但比Standby高Standby关闭保持可用关闭RTC、IO引脚、传感器控制器事件~100 µs~1 µA(核心) SCE活动电流Shutdown关闭丢失关闭关闭复位引脚、特定IO引脚上电复位时间~100 nA设计策略最大化Standby时间这是低功耗设计的黄金法则。你的应用逻辑应该被设计成“事件驱动”的完成一个任务如发送完一包数据、处理完一次传感器读数后立即让系统进入Standby模式。利用传感器控制器延长睡眠这是CC2652R的精髓。将所有周期性、低带宽的传感器监测任务温度、按键、脉冲计数都交给SCE。主CPU只在SCE发出“重要事件”信号如数据超阈值、按键长按时才被唤醒。这样系统绝大部分时间都处于Standby模式只有SCE在微功耗下运行。批处理与延迟执行当主CPU被唤醒后不要只处理一件事。例如SCE可能已经积累了10分钟的温湿度数据。主CPU唤醒后应一次性读取所有数据进行必要的处理如滤波、压缩然后通过无线网络批量上传。同时检查是否有其他待处理任务如配置更新一并完成然后再进入睡眠。加密操作的功耗管理加密加速器在Standby模式下是关闭的。因此应将需要加密/解密的数据进行缓存。当主CPU被唤醒进行网络通信时集中处理这些数据的加解密。避免为了单次加密操作而频繁唤醒系统。4.2 实际项目功耗分析与优化案例假设我们设计一个无线温湿度传感器节点每5分钟上报一次数据使用蓝牙LE连接。原始方案无SCE主CPU每5分钟被RTC唤醒。初始化I2C、读取SHT30传感器约15ms。处理数据准备蓝牙广播或连接报文约5ms。开启射频发送数据连接模式下约3-10ms广播模式下更短。关闭射频进入Standby。问题每次唤醒CPU、Flash、所有相关外设都要上电初始化这个过程消耗的能量可能比实际执行任务还多。平均电流可能在几十微安级别。优化方案使用SCESCE任务配置为每5分钟唤醒一次通过I2Cbit-bang读取SHT30将数据存入共享内存的循环缓冲区。如果数据连续多次超限则触发IO中断唤醒主CPU。主CPU长期处于Standby模式。仅当以下事件之一发生时被唤醒SCE发出警报中断数据超限。蓝牙连接请求射频唤醒。一个更长的定时器例如每1小时到期主动唤醒进行批量数据上报或维护连接。唤醒后主CPU从SCE的共享内存中读取累积的数据可能是过去一小时内的12组数据进行聚合处理如取平均值然后一次性通过蓝牙发送。完成后迅速返回Standby。效果主CPU的唤醒频率从每5分钟一次降低到每小时一次或仅在异常时唤醒。系统的平均电流可以优化到10微安以下使用一颗CR2032纽扣电池理论续航可达数年。功耗测量工具一定要利用TI提供的EnergyTrace技术在Code Composer Studio或IAR中集成。它可以实时绘制出设备的电流消耗曲线精确显示CPU、射频、外设各个状态下的功耗是优化低功耗代码不可或缺的“眼睛”。通过EnergyTrace你能清晰地看到每次不必要的唤醒、过长的射频开启时间从而进行针对性优化。5. 开发实战从零构建一个低功耗安全传感节点5.1 硬件准备与工程搭建硬件选择开发板LAUNCHXL-CC26X2R1是首选它集成了XDS110调试器、按钮、LED和丰富的扩展接口。传感器以SHT30温湿度 I2C接口和MPU6050加速度计 I2C接口为例。天线根据频段选择开发板通常已集成PCB天线。软件环境搭建安装Code Composer Studio (CCS)或IAR Embedded Workbench。安装SimpleLink CC13xx/CC26xx SDK。确保版本匹配这是所有驱动、协议栈和示例的源泉。安装Sensor Controller Studio (SCS)。创建工程在CCS中使用File - New - CCS Project。选择CC26x2R1 LaunchPad作为目标设备。选择一个合适的示例工程作为起点例如empty空工程或blinky点灯。对于综合应用tirtos下的ble5_simple_peripheral蓝牙从设备是一个很好的起点它包含了TI-RTOS和蓝牙协议栈。5.2 传感器控制器任务实现打开SCS创建新项目选择你的CC2652R设备型号。设计任务我们创建两个任务。任务A定时采样触发器AUX Timer 2 周期5分钟。动作初始化I2C通过GPIO模拟。向SHT30发送测量命令。等待测量完成可查询或使用SCE的延时函数。读取温湿度原始数据。进行简单的CRC校验和单位转换可选在SCE内进行或留给主CPU。将数据写入共享内存结构体myData.temperature和myData.humidity。更新一个数据计数器myData.sampleCount。任务B运动检测触发器MPU6050的INT引脚连接到CC2652R的一个GPIO配置为下降沿中断。动作当MPU6050检测到运动时产生中断唤醒SCE。SCE在中断服务程序中可以读取加速度计数据判断运动强度。如果运动强度超过阈值设置一个唤醒标志myData.motionAlert true并触发一个IO事件唤醒主CPU。生成代码在SCS中完成逻辑编写和测试后生成C驱动代码。将生成的scif.cscif.h以及SensorController文件夹复制到你的CCS工程目录下并添加到工程中。5.3 主程序集成与协议栈交互初始化在主程序的main()函数中在初始化硬件和RTOS之前先初始化传感器控制器驱动。#include scif.h ... scifInit(); // 初始化SCE驱动 scifStartTasksNbl(BV(SCIF_TASK_ID)); // 启动SCE任务非阻塞数据读取与同步在主程序的任务例如一个每小时执行一次的定时任务或事件处理任务中读取SCE的数据。// 声明外部共享结构体由SCS生成 extern volatile SensorController_io myData; void myTaskFxn(UArg arg0, UArg arg1) { float tempArray[12]; float humidArray[12]; uint16_t count; // 进入临界区安全地复制数据 uint32_t key scifGetTaskStructMutex(); count myData.sampleCount; for(int i0; icount; i) { // 假设myData里是一个循环缓冲区 tempArray[i] myData.tempBuffer[i]; humidArray[i] myData.humidBuffer[i]; } myData.sampleCount 0; // 清空计数器表示数据已取走 scifReleaseTaskStructMutex(key); // 处理数据计算平均值、最大值等 // ... // 通过蓝牙发送处理后的数据 // ... }处理警报在主程序的中断服务程序或高优先级任务中响应SCE发出的运动警报。// GPIO中断服务函数由SCE触发 void motionAlertIsr(void) { // 发送一个信号量或事件给任务触发立即数据上报或警报 Semaphore_post(semaphoreHandle); }安全通信集成在准备通过蓝牙发送数据时调用加密加速器API对数据进行加密和认证。在蓝牙GATT服务器中定义需要加密的特征值Characteristic。在向客户端通知Notify或写入数据前使用前面介绍的AES-CCM或HMAC流程对载荷Payload进行处理。确保蓝牙连接已使用LE Secure Connections配对建立了加密链路。5.4 调试技巧与常见问题排查SCE程序不运行检查SCE的时钟源是否配置正确scifInit()和scifStartTasksNbl()是否被调用使用SCS调试器连接硬件在SCS中启用在线调试。可以单步执行SCE代码查看变量这是最直接的排查手段。检查共享内存在主程序中打印共享结构体的内容看SCE是否写入了数据。功耗高于预期使用EnergyTrace这是最有效的工具。观察电流曲线找出是哪个阶段、哪个模块的电流异常高。检查未关闭的外设确保进入Standby前所有不需要的外设模块如UART I2C 加密加速器都已关闭调用对应的_close()或_deinit()函数。检查IO配置未使用的IO引脚应配置为输出低或带上拉/下拉避免浮空输入导致漏电。检查射频状态确保蓝牙/Zigbee协议栈已正确进入休眠状态例如对于蓝牙确认没有活跃的连接或广播。加密操作失败或卡住检查资源冲突确保没有其他任务同时在使用加密模块。使用RTOS的信号量进行保护。检查输入参数密钥长度、数据长度、Nonce/IV长度是否符合所选算法模式的要求。AES-GCM和CCM对Nonce长度有特定要求。查看驱动返回值所有加密API都应检查返回值。TI的驱动会返回明确的错误码如CRYPTOCC26XX_STATUS_SUCCESS或各种错误状态。无线通信不稳定天线与匹配确保天线设计正确匹配网络良好。参考TI的参考设计LAUNCHXL-CC26X2R1。电源噪声射频发射时电流骤增可能导致电源电压跌落。确保电源路径上有足够且靠近芯片的退耦电容如10µF 100nF 1nF的组合。协议栈配置检查发射功率、信道等参数是否合理。使用SmartRF Studio进行射频性能测试和寄存器配置优化。通过以上步骤你就能将一个强大的、低功耗的、安全的无线传感节点从概念变为现实。CC2652R的传感器控制器和硬件加密加速器就像给你的应用装上了“自动驾驶”和“装甲车”让你能专注于实现产品功能而无需在底层功耗和安全细节上耗费过多精力。记住好的低功耗设计是“系统级”的思考是硬件特性、软件架构和协议栈行为共同协作的结果。

相关新闻