这一篇在干嘛?

这是 Renesas DA14585(蓝牙 5.0 SoC)数据手册的完整中文精讲合集——原来 15 篇分篇已合并为这一篇长笔记,从芯片速览一路讲到寄存器速查。全文很长,建议配合右侧目录按需跳读。

篇章总览

  • d85-01 d85-01 芯片速览与系统框图
  • d85-02 d85-02 引脚定义
  • d85-03 d85-03 电气规格参数
  • d85-04 d85-04 系统架构与启动流程
  • d85-05 d85-05 复位、内核与总线
  • d85-06 d85-06 存储器与时钟系统
  • d85-07 d85-07 DMA 与 I2C
  • d85-08 d85-08 UART 与 SPI+
  • d85-09 d85-09 定时器与键盘外设
  • d85-10 d85-10 GPIO 与 ADC
  • d85-11 d85-11 音频单元
  • d85-12 d85-12 电源管理、BLE 内核与射频
  • d85-14 d85-14 寄存器速查(上)
  • d85-15 d85-15 寄存器速查(下)
  • d85-16 d85-16 订购信息与封装


d85-01 d85-01 芯片速览与系统框图

这一篇在干嘛?

这一篇带你读懂 Renesas DA14585 数据手册的开头部分:这颗芯片是什么、凭什么省电、适合做哪些产品,以及怎么把系统图和内部框图「看出门道」。读完这一篇,你就有了继续啃后面寄存器章节的地图。

DA14585 是一枚什么芯片?

DA14585 是 Renesas(瑞萨电子)推出的一颗超低功耗蓝牙 5.0 SoC。SoC(System on Chip,片上系统)的意思是:把一颗产品需要的绝大多数部件——处理器、存储器、无线电台、电源管理——全都装进这一小块硅片里。

拆开看它有三大件:

  1. 2.4 GHz 射频收发器(Transceiver):负责收发 2.4 GHz 频段的无线电信号,也就是蓝牙工作的频段。收发器=发射机(TX)+接收机(RX)的合体。
  2. ARM Cortex-M0 微控制器(MCU):16 MHz 主频的 32 位处理器核心,是芯片的「大脑」,跑你的应用代码。
  3. 存储器组合:96 kB SRAM(Random Access Memory,随机存取存储器,断电即失,用来存放运行中的数据和程序)+ 64 kB OTP(One-Time Programmable,一次性可编程存储器——只能烧写一次、之后只读,适合存放固化代码,成本比 Flash 低)+ 128 kB ROM(Read-Only Memory,只读存储器,出厂时就烧好了蓝牙协议栈)。

它有两条亮眼的硬指标:

  • 冷启动快于 50 ms:从完全断电到跑起来程序,不到十分之一秒。对遥控器这种「按下才醒」的设备至关重要。
  • 最多支持 8 条蓝牙 LE 连接:一片芯片可以同时当 8 个蓝牙连接的中心或外围节点。

记忆口诀

「一颗 M0、两片存储、三方省电」:一颗 Cortex-M0,OTP+SRAM 两级存储,快启动、多连接、低电流三张省电王牌。

它还有两种工作角色:独立应用处理器(standalone,所有逻辑都跑在这颗芯片上)或数据泵(data pump,hosted 模式——协议栈和业务逻辑跑在别的主控上,DA14585 只负责收发蓝牙数据)。选哪种,取决于你的系统里有没有另一个主控。

蓝牙协议栈:硬件+固件分工

蓝牙 LE(Low Energy,低功耗蓝牙,蓝牙 5.0 标准的一部分)的协议栈在这颗芯片上是「软硬分工」的:

  • 硬件层:有专用的 Link Layer Processor(链路层处理器),负责最底层的包收发、时序、重传,不占用 CPU。这是它能又快又省电的关键。
  • 固件层:ROM 里出厂烧好了合格的蓝牙协议栈,包括 L2CAP(Logical Link Control and Adaptation Protocol,逻辑链路控制与适配协议)、SM(Security Manager,安全管理器,负责配对加密)、ATT(Attribute Protocol,属性协议)、GATT(Generic Attribute Profile,通用属性配置文件,定义数据的组织方式)和 GAP(Generic Access Profile,通用访问配置文件,负责广播、发现、连接)。
  • 配置文件(Profile):蓝牙 SIG(蓝牙技术联盟,制定蓝牙标准的组织)发布的所有官方 profile 以及自定义 profile 都支持。也就是说你想做心率带、遥控器还是自定义传感器,协议层都不用从零写。

加密也有专门硬件:AES-128 加密处理器(AES,Advanced Encryption Standard,高级加密标准,蓝牙配对用的加密算法),不用 CPU 逐位算。

关键参数总览

认证与合规

项目参数
蓝牙版本Bluetooth 5.0(射频、基带、协议栈全合规)
地区认证ETSI EN 300 328 / EN 300 440 Class 2(欧洲)、FCC CFR47 Part 15(美国)、ARIB STD-T66(日本)
连接数最多 8 条 BLE 连接
冷启动< 50 ms

处理与存储

项目参数
CPU16 MHz 32 位 ARM Cortex-M0,带 SWD 调试接口(Serial Wire Debug,两线制调试口)
协处理器专用链路层处理器、AES-128 加密处理器
OTP64 kB
SRAM96 kB(数据/保持 SRAM)
ROM128 kB

电源管理(省电的秘密)

项目参数
DC-DC片内集成 Buck/Boost(降压/升压)DC-DC 转换器,1.5 V 碱性电池和 3.0 V 纽扣电池都能直接用
GPIO 耐压P0/P1/P2 端口耐 3.3 V
供电设计只需对 4 个电源引脚去耦,PCB 布线极简
1.8 V 冷启动支持
电量监测10 位 ADC 可测电池电压

时钟

项目参数
高速时钟16 MHz 晶振(最大 ±20 ppm 频偏)+ RC 振荡器
低速时钟32 kHz 晶振(±50 ppm / 最大 ±500 ppm)+ RCX 振荡器(校准过的 RC 振荡器,可省掉 32 kHz 晶振)

ppm(parts per million,百万分之一)是频率精度的单位——蓝牙对时序精度有要求,这个数字越小越准。

接口与外设

类别参数
GPIO14 个(WLCSP34 封装)/ 25 个(QFN40)/ 32 个(QFN48)
UART2 路,带硬件流控,最高 1 Mbps
SPI+1 路(增强版 SPI 串行接口)
I2C100 kHz / 400 kHz 两档
正交解码器3 轴正交解码(Quadrature Decoder,直接读光电旋转编码器,鼠标滚轮轨迹球的天菜)
定时器通用定时器、捕获定时器、睡眠定时器
复位系统复位与上电复位(POR)合并到单引脚
模拟4 通道 10 位 ADC

射频(Radio)

项目参数
收发器全集成 2.4 GHz CMOS 收发器
天线单线天线,不需要 RF 匹配网络,也不需要收发切换开关
电流供电 3 V 时(配合理想 DC-DC):发射 3.4 mA,接收 3.7 mA
发射功率0 dBm(1 mW);「近场模式」可降到 -20 dBm(超近距离省电)
接收灵敏度-93 dBm

常见坑

  • dBm 不是「毫瓦」,是相对 1 mW 的对数单位:0 dBm = 1 mW,-20 dBm = 0.01 mW。数字越负功率越小。
  • 接收灵敏度 -93 dBm 意思是「信号弱到 -93 dBm 时还能正确解调」,数字越负,收得越远。
  • 单线天线免匹配是这颗芯片的宣传点,但 PCB 天线区域铺铜仍要按参考设计来,乱铺地铜照样翻车。

封装

封装引脚数尺寸
WLCSP342.40 mm × 2.66 mm(晶圆级封装,比一粒米还小)
QFN405 mm × 5 mm
QFN486 mm × 6 mm(GPIO 最多,需联系销售供货)

三大卖点官方总结为:最低功耗、最小体积、最低系统成本——一颗芯片+一个天线,方案就齐了。

能用在什么产品上?

数据手册给出的典型应用清单:

  • 语音遥控器(RCU):Remote Control Unit,支持语音指令——芯片自带音频单元和 PDM 麦克风接口,这是 DA14585 的招牌场景(电视遥控器按住说话)。
  • Beacon 信标:周期性广播的小发射器,商场定位、资产追踪。
  • 可穿戴与多传感器设备:手环、健康监测、智能手表。
  • HID 人机接口设备(Human Interface Device):键盘、鼠标。
  • 玩具
  • 消费家电
  • 另外明确点名支持蓝牙 Mesh 组网(多设备互转发的蓝牙拓扑)和无线传感器节点

共同点一眼就能看出来:用纽扣电池供电、要长续航、数据量不大。凡是这类产品,都在 DA14585 的主场。

看懂第一张图:系统示意图

数据手册第 2 页给了第一张图——System Diagram(系统示意图),画的是 DA14585 在一个完整产品里扮演的角色:

图 1:DA14585 系统示意图——芯片与电池、天线、外设组成的整机架构

读图方法:把它当成「一台设备的全家福」。电池进来,经过片内 DC-DC 变成合适的电压;2.4 GHz 信号从射频口出去到天线;四周挂的是传感器、按键、蜂鸣器之类的外设。看这张图,你要建立的认知是:DA14585 就是整机的中心,外围只需要很少的东西——这正是「最小系统成本」的图形化表达。

看懂第二张图:内部框图

第 17 页的第二张图才是本文的重头戏——Block Diagram(内部框图):

图 2:DA14585 内部框图——CPU、存储器、射频、外设的内部连接关系

框图怎么读?给你三条路线:

  1. 中间找大脑:ARM Cortex-M0 内核居中,通过 AMBA 总线(ARM 芯片内部的标准总线,相当于芯片里的「国道网」)连接各个模块。
  2. 左侧看存储:ROM(协议栈)、OTP(固化配置)、SRAM(运行内存)挂在总线上,CPU 取指令、存数据都走这条路。
  3. 右侧看世界:数字接口(UART/SPI/I2C)、模拟接口(ADC、音频单元)通向 GPIO 引脚;射频收发器独占天线一侧。电源管理单元(DC-DC、LDO 低压差稳压器)负责给所有模块按需供电。

框图里模块的分组方式还暗示了电源域(Power Domain)的划分——后面章节会讲到芯片能单独关掉射频域、外设域只留睡眠定时器,这就是长续航的底层机制。

通关标准

学完这一篇,你应该能不看原文回答:① DA14585 的三块存储器各多大、各干什么用?② 冷启动多快、最多几条连接?③ 发射/接收电流各多少毫安?④ WLCSP34 封装多大?⑤ 框图里 CPU、存储、射频、外设四类模块大致挂在哪?答得上来,就可以进入下一篇学引脚和规格了。

自测一下


d85-02 d85-02 引脚定义

这一篇在干嘛?

芯片再强大,最终也得靠一根根引脚和外部世界打交道。这一篇把 DA14585 的引脚布局(Pinout,即每个引脚在芯片上的位置与功能定义)讲明白:三种封装长什么样、每组引脚干什么活、哪些引脚有「隐藏身份」,以及画板子时最容易踩的坑。

三种封装:同一个芯片,三副面孔

DA14585 有三种封装形式可选,封装不同,引脚数量和排列也不同:

  • WLCSP34:Wafer Level Chip Scale Package,晶圆级芯片尺寸封装,只有 34 个锡球(ball)。体积最小,适合手环、耳塞这类极致空间要求的可穿戴设备。
  • QFN40:Quad Flat No-lead,40 引脚的无引脚四方扁平封装。
  • QFN48:同样是 QFN 封装,但引脚数增加到 48 个,把 P2、P3 端口的全部 GPIO 都引了出来。

一个直观的理解:WLCSP34 是「浓缩版」,QFN40 是「标准版」,QFN48 是「全家桶版」。核心功能三者都有,差别只在引出了多少 GPIO。WLCSP 直接在晶圆上做封装,芯片本身就是封装,因此可以做到和裸片差不多大,代价是焊球间距极小、手工焊接和返修都很困难,一般交给贴片厂处理;QFN 封装四周是平贴的焊盘,没有向外伸的引脚,占地小、散热好,开发和量产都友好。选型时先想清楚:产品要多少个 GPIO、谁来生产焊接、需不需要调试和返修,再定封装。

图 3:WLCSP34 封装引脚分布(俯视图,Top View)

图 4:QFN40 封装引脚分布

图 5:QFN48 封装引脚分布

常见坑:选错封装,引脚悬空

P2_3 之后的 P2 端口引脚只在 QFN40 和 QFN48 上可用;P3 端口里只有 P3_0 在 QFN40 上可用,整个 P3 端口(P3_0~P3_7)只有 QFN48 才引齐了。如果你用 WLCSP34 或 QFN40 设计时把程序写到了 P3_5 这类引脚上,代码不会报错,但外部什么都不会发生——画原理图前先对照封装图确认引脚存在。

读表基本功:引脚表每一列是什么意思

数据手册的引脚描述表(Table 1)有五列,先搞懂列名,后面读表就轻松了:

列名含义初学者解读
Pin Name引脚名称如 P0_0,读作「0 号端口第 0 位」
Type信号类型见下方缩写表
Drive (mA)驱动能力输出能提供的最大电流,GPIO 统一为 3.5 mA
Reset State复位后状态芯片刚上电/复位时引脚的默认配置
Description功能描述具体干什么活

Type 列常见的缩写,一次记牢:

  • DI / DO:数字输入(Digital Input)/ 数字输出(Digital Output)。
  • DIO:数字输入输出双向。
  • AI / AO:模拟输入(Analog Input)/ 模拟输出。
  • AIO:模拟双向。
  • DIOD:开漏输出的数字双向,典型如 I2C 的 SDA/SCL。

Reset State 列的 I-PD 表示复位期间及之后使能内部下拉电阻(Pull-down),I-PU 表示使能内部上拉电阻(Pull-up)。也就是说,芯片刚醒来时,大多数 GPIO 都被默认按住「低电平」,只有 P1_5(SWD 数据线)默认上拉为高。

GPIO:P0~P3 四个端口是主角

DA14585 的通用输入输出口(GPIO,General Purpose Input/Output)按端口分组:P0 有 8 位(P0_0~P0_7),P1 有 6 位,P2 有 10 位,P3 有 8 位。每个 GPIO 都可以:

  1. 作为普通数字输入或输出;
  2. 选择使能内部上拉或下拉电阻;
  3. 复位期间和复位之后自动使能下拉;
  4. 携带「状态保持」机制——芯片进入掉电(power down)省电模式时,引脚电平状态不会丢。这条对蓝牙产品很关键:BLE 设备绝大部分时间都在睡觉省电,醒来后引脚电平还能接上之前的状态,外接电路不会因为芯片打了个盹就误动作。

另外注意驱动能力:GPIO 的输出驱动统一为 3.5 mA。想直接点亮一颗 LED 没问题(限流电阻算好),但想驱动继电器、电机这类大电流器件就必须外加三极管或 MOS 管缓冲,别指望 GPIO 自己扛。

引脚类型驱动 (mA)复位状态说明
P0_0 ~ P0_7DIO3.5I-PD输入/输出,可选上/下拉电阻,复位期间及之后使能下拉;支持多功能复用模式;掉电时带状态保持
P1_0 ~ P1_3DIO3.5I-PD同上(P1_2、P1_3 见 Note 1 的晶振干扰问题)
P1_4/SWCLKDIO3.5I-PD默认为 JTAG 调试时钟(SWD 时钟线)
P1_5/SW_DIODIO3.5I-PU默认为 JTAG 调试数据输入输出(SWD 数据线)
P2_0 ~ P2_9DIO3.5I-PD同 P0(注意:P2_3 及之后的引脚仅 QFN40/QFN48 封装提供)
P3_0 ~ P3_7DIO3.5I-PD同 P0(注意:完整 P3 端口仅 QFN48 封装提供,QFN40 只有 P3_0)

复用:一个引脚的「多重身份」

初学者最容易懵的概念来了——引脚复用(Pin Multiplexing,也叫 Alternate Function,复用功能)。芯片引脚是稀缺资源,不可能每个功能都独占一根,所以让一个物理引脚在不同配置下扮演不同角色。

以 P0_0 为例,它可以是:普通 GPIO → 模数转换器(ADC,Analog to Digital Converter)的第 0 通道输入 → UART 的发送/接收脚 → SPI 的某个信号……具体当什么用,由软件配置寄存器决定。

表里反复出现的 「Mapped on Px ports」 就是这个意思:该信号并不绑定某根固定引脚,而是可以「映射」到某个 Px 端口的引脚上,由你在软件里选位置。这给了画板子极大的自由度——布线走不通时,换个引脚映射 UART 即可。

I2C 的 SDA/SCL 还有个贴心设计:映射到某根 Px 引脚后,芯片会自动给这根脚配上 25 kΩ 的内部上拉电阻,电源域由 Px_PADPWR_CTRL_REG 寄存器指定——掉电时也能保证 I2C 总线挂在正确的电源上。不过 25 kΩ 偏大、驱动能力弱,总线较长或速率较高时,外接 4.7 kΩ~10 kΩ 上拉更稳妥。

功能信号分几大类(都是映射式),汇总如下:

接口信号说明
UARTUTX / URX / URTS / UCTS第一路串口:发送、接收、请求发送、清除发送
UART2UTX2 / URX2 / URTS2 / UCTS2第二路串口,功能同上
SPISPI_CLK / SPI_DI / SPI_DO / SPI_EN时钟、数据输入、数据输出、片选(见 Note 2/3)
I2CSDA / SCL数据线与时钟线,开漏输出;映射脚自动配置 25 kΩ 上拉到指定电源域(由 Px_PADPWR_CTRL_REG 寄存器设置)
正交解码器QD_CHA_X / QD_CHB_X / QD_CHA_Y / QD_CHB_Y / QD_CHA_Z / QD_CHB_ZX/Y/Z 三轴各两路正交信号输入,典型用于鼠标滚轮、旋钮编码器

记忆口诀

GPIO 四端口,P0 到 P3 排成行;一根引脚多身份,软件映射说了算。UART 串口跑调试,SPI 快、I2C 省脚,正交解码接滚轮。

必须认识的几个「明星引脚」

P1_4 和 P1_5:调试专用通道

这两根引脚默认身份是 SWD 调试接口(Serial Wire Debug,串行线调试,一种用两根线完成烧录和调试的接口标准):

  • SW_CLK/P1_4:调试时钟输入,复位后为下拉状态;
  • SWDIO/P1_5:调试数据输入输出,双向,复位后为上拉状态(这也是它和 P1_4 复位状态不同的原因)。

开发板上接 J-Link、KEIL、调试器一般就接这两根线(再加电源和地)。它们当然也能当普通 GPIO 用——但劝你留着别动,不然程序把调试口复用掉了,芯片就「失联」了。

P0_0 ~ P0_3:模拟量的入口

这四根引脚复用为 ADC 输入通道 0~3。要读电池电压、温度传感器、电位器这类模拟信号,就把它们接到 P0_0~P0_3 上。

RST:复位引脚

复位信号,高电平有效(active high,注意很多单片机是低有效,别搞混)。不用复位功能时必须接地(GND)——这是数据手册的硬性要求,悬空可能带来不可预测的复位。

时钟引脚:两颗晶振一颗「心脏」一颗「闹钟」

引脚类型说明
XTAL16MpAI16 MHz 晶振输入(正端)
XTAL16MmAO16 MHz 晶振输出(负端)
XTAL32kpAI32.768 kHz 晶振输入(正端)
XTAL32kmAO32.768 kHz 晶振输出(负端)

p 和 m 后缀分别代表晶振的正端(plus)和负端(minus),两两一对。16 MHz 晶振是系统主时钟和蓝牙射频的心脏;32.768 kHz 晶振(俗称 32k 表晶)走时精准、功耗极低,负责睡眠期间的计时和定时唤醒。

常见坑:P1_2、P1_3 别剧烈翻转

数据手册 Note 1 明确提示:P1_2 和 P1_3 靠近片内 16 MHz 晶振振荡电路。如果这两根 GPIO 在高频、剧烈翻转(toggling),可能干扰时钟,表现为蓝牙丢包率(Packet Error Rate,PER)升高。板子上有干扰敏感应用时,尽量避开用这两根脚输出高频信号,或注意布线远离晶振。

射频与电源:芯片的「嘴」和「饭碗」

射频收发(Radio Transceiver)部分只有两根引脚,是蓝牙信号的出入口:

引脚类型说明
RFIOpAIO射频输入/输出,阻抗 50 Ω
RFIOmAIO射频地

电源部分(Power Supply)是画原理图时最容易画错的地方,逐个看:

引脚类型说明
VBAT3VAIO电池连接:单颗纽扣电池(3 V)直接接这里;若用 1.5 V 电池,此脚是 DC-DC 变换器的第二输出
VBAT1VAI电池连接:接碱性或镍氢电池(1.5 V);若用的是 3 V 纽扣电池,此脚必须接地
SWITCHAIO外接 DC-DC 变换器电感的连接脚
VDCDCAODC-DC 变换器的输出
VBAT_RFAIOPCB 上接到 VBAT3V
VDCDC_RFAIOPCB 上接到 VDCDC
VDDAI仅用于测试。正常使用时保持悬空
GNDAIO

供电有两种方案:单颗 3 V 纽扣电池方案(接 VBAT3V,VBAT1V 接地),或 1.5 V 碱性/镍氢电池方案(接 VBAT1V,内部 DC-DC 升压,从 VBAT3V 脚输出第二路电源)。DC-DC 变换器(把一种直流电压变换成另一种直流电压的开关电路)需要外接电感,接到 SWITCH 脚。

另外,杂项(Miscellaneous)里还有几个专属脚:VBAT_RF 接 VBAT3V、VDCDC_RF 接 VDCDC,都是给射频部分单独供电的镜像脚,PCB 上按手册连好即可;VDD 测试专用,普通产品悬空别接

通关标准

看到任意一根引脚名,能答上三件事:它在哪个封装上存在?默认复位状态是什么?它有哪几种复用身份?比如 P1_5:QFN/WLCSP 上都有;复位后上拉(I-PU);默认是 SWD 数据线,可复用为普通 GPIO 或 UART 映射脚。做到这一步,本章就通了。

自测:你真的分清了吗?


d85-03 d85-03 电气规格参数

这一篇在干嘛?

数据手册第 3 章是一大堆表格:电压、电流、温度、频率……这一篇带你像读「体检报告」一样,看懂 DA14585 的每一条规格数字,知道哪些数字决定电池寿命、哪些数字决定「碰一下就烧」。

先搞懂两张「体检报告」的区别

规格章开头有一句很关键的话:所有 MIN/MAX 极限都由设计、生产测试或统计特性保证;而 Typ(典型值) 只是表征结果,仅供参考。另外,默认测量条件是:Buck 模式下 VBAT3V = 3.0 V,Boost 模式下 VBAT1V = 1.2 V,环境温度 25 °C;射频测量全部在 50 Ω 阻抗的标准仪器上完成。

所谓 Buck(降压)模式Boost(升压)模式,指的是芯片内置 DC-DC 变换器的两种接法:Buck 是「输入电压比芯片内核电压高」,比如 3 V 纽扣电池;Boost 是「输入电压比内核电压低」,比如 1.5 V 干电池。整章的功耗数字都会分 BOOST / BUCK 两套来给。

这一章还附了两张参考电路图,规格表里的所有数字都以这两张图为准:

Boost 模式:碱性电池供电系统参考电路图

图 6:碱性电池供电系统图(Boost 升压模式)

Buck 模式:纽扣电池供电系统参考电路图

图 7:纽扣电池供电系统图(Buck 降压模式)

绝对最大额定值:芯片的「死亡红线」

绝对最大额定值(Absolute Maximum Ratings,AMR) 的意思是:超过任何一条,芯片可能当场损坏或寿命大幅缩短。这不是「工作范围」,而是「不烧死的最坏边界」。

参数含义极限值通俗解释
V_PIN(LIM)(default)普通引脚对地电压-0.1 ~ min{3.6, VBAT_RF+0.2} V引脚电压不许比地低 0.1 V,也不许比 3.6 V 高,且不能超过自身电源 0.2 V 以上
V_BAT(LIM)电池供电电压-0.1 ~ 3.6 V无论 Boost 还是 Buck 接法,电池输入最高 3.6 V
V_PIN(LIM)(1V2)晶振引脚 XTAL16M/32Km 等-0.2 ~ min(1.2, VBAT_RF+0.2) V晶振脚特别娇气,上限只有 1.2 V
T_STG存储温度-50 ~ 150 °C不通电能扛的温度范围
t_R(SUP)电源上升时间≤ 100 ms上电爬升别太慢,慢慢悠悠上电反而危险
V_ESD(HBM)人体模型静电(ESD)2000 V(WL CSP34)/ 4000 V(QFN40/48)能扛住的静电等级,QFN 封装比晶圆级 CSP 更耐静电
V_ESD(CDM)器件带电模型静电500 V工厂装配场景的静电指标,同样不算高

最常见的坑:把 3.3 V 直接怼上 1.2 V 的晶振脚

普通引脚上限 3.6 V,很多人就以为「这颗芯片是 3.3 V 系统,随便接」。但 XTAL16Mp、XTAL16Mm、XTAL32Km 这几个晶振引脚的上限只有 1.2 V,XTAL32Kp 也只有 1.5 V——接上 3.3 V 信号线当场报废。另外,手册注明不要让芯片长时间停留在「额定值与推荐工作条件之间」的灰色区间,偶尔超一点不死,长期泡在那里会悄悄劣化。

记忆口诀:AMR 是「太平间标准」,ROC 是「健身房标准」——前者只保证不烧,后者才保证好用。

推荐工作条件:真正的「安心区」

推荐工作条件(Recommended Operating Conditions,ROC) 才是设计时应遵守的范围。在这个区间里,后面所有 DC / 射频规格表中的数字才成立

参数含义MinMax通俗解释
V_BAT(VBAT1V)Boost 模式电池电压0.9 V3.3 V一节快没电的干电池(0.9 V)也能用
V_BAT(VBAT3V)Buck 模式电池电压1.8 V(注 1)3.5 V两节电池到锂纽扣电池都行
V_BAT(OTP_PROG)OTP 编程时电池电压2.25 V烧写一次性存储器时供电不能低于 2.25 V
V_PIN(default)普通引脚电压0 Vmin(3.3, VBAT_RF+0.2)正常 GPIO 高电平最高 3.3 V
V_PIN(1V2)晶振脚电压0 V1.2 V与 AMR 一致,1.2 V 红线
T_A工作环境温度-40 °C+85 °C工业级温度范围,户外与车载基本够用

注 1 很重要:VBAT3V 低于 1.8 V 时禁止冷启动,因为 OTP 中烧写的校准值(trim 值)和应用程序镜像到 RAM 的过程可能被破坏。低电压冷启动可能拿到一堆错的校准参数,射频性能直接崩掉。

通关标准

能独立回答这两个问题就算过关:①「3.7 V 锂电池能不能直连 VBAT3V?」——不能,AMR 上限 3.6 V、ROC 上限 3.5 V,充满电的锂电池约 4.2 V,必须先降压。②「1.5 V 干电池怎么用?」——接 VBAT1V 走 Boost 模式。

DC 特性:数字里的电池寿命

这是全章对产品定义最要命的一张表——睡眠电流决定一节电池能撑几个月还是几年

参数条件典型值通俗解释
I_BAT(DP_SLP) BOOST_0kBBoost 深睡,不保 RAM610 nA深度睡眠不保留任何 RAM,芯片只留一个 32 kHz 时钟跳心跳
I_BAT(DP_SLP) BOOST_16kBBoost 深睡,保 16 kB RAM1.4 μA多保一块 RAM,电流翻倍多,因为 RAM 要持续供电才不忘事
I_BAT(EXT_SLP) BOOST_96kBBoost 扩展睡,保 96 kB RAM4.6 μARAM 越多睡眠电流越大
I_BAT(DP_SLP) BUCK_0kBBuck 深睡,不保 RAM520 nA同样的睡姿,Buck 比 Boost 省约 15%
I_BAT(EXT_SLP) BUCK_96kBBuck 扩展睡,保 96 kB RAM4 μA典型信标/传感器应用的实际待机水平
I_BAT(ACT_RX) BOOSTBoost 接收中13.4 mA从电池角度看收包电流(含变换器损耗)
I_BAT(ACT_TX) BOOSTBoost 发射中12.4 mA发射反而比接收略省
I_BAT(ACT_RX) BUCKBuck 接收中5.3 mA3 V 纽扣电池场景,Buck 效率高得多
I_BAT(ACT_TX) BUCKBuck 发射中4.9 mA同上

几个关键读法:

  • 深睡(deep-sleep)比扩展睡(extended-sleep)更省,代价是唤醒后要重拷代码、恢复更慢。数据手册 3.4 节给了唤醒代价:Boost 从扩展睡眠到软件启动 ≤ 1.2 ms,Buck ≤ 1 ms——蓝牙连接间隔通常几百毫秒起步,所以多数应用选「扩展睡 + 保留 RAM」这条省电又好醒的路线。
  • 粗算电池寿命:一节 220 mAh 的 CR2032 纽扣电池,若平均电流 2 μA,理论可撑约 12500 小时(一年半);若平均 20 μA,就只剩两个多月。睡眠电流每差 1 μA,产品寿命差一截。
  • Buck 全面优于 Boost(睡眠省 10%~15%,活动电流省一半以上),能选 3 V 供电就别选 1.5 V。

记忆口诀:睡眠看 nA/μA,活动看 mA;RAM 每多 32 kB,睡眠电流加 1 μA 上下;Buck 是省钱高手。

时序与晶振:唤醒要多久、时钟准不准

启动时间(startup time):扩展睡眠 → 软件开始运行,Boost ≤ 1.2 ms、Buck ≤ 1 ms(16 MHz RC 振荡器跑 RAM)。这意味着每次广播事件醒来只花约 1 ms,睡 990 ms 也能保持 99% 以上的睡眠占空比——低功耗的关键正是「快睡快醒」。

16 MHz 晶振(系统主时钟) 关键参数:

参数规格通俗解释
频率16 MHz给 CPU 和射频提供节拍
ESR 等效串联电阻≤ 100 ΩESR 越大越难起振,选型别超
负载电容 C_L10~12 pF,无需外部电容芯片内部集成了电容,省料
频率容差(可修调)±20 ppm用内部变容管修调后,含老化和温漂
频率容差(未修调)±40 ppm不做修调的出厂水平
最大驱动功率≥ 100 μW买的晶振要能扛住 100 μW 驱动,太小会被打坏
启动时间0.5~3 ms(典型 2 ms)每次唤醒都要等它起振

ppm(parts per million,百万分之一)是频率误差单位:16 MHz ±20 ppm 意味着实际频率偏差最多 ±320 Hz。蓝牙协议靠时间对齐收发,频率偏差大会导致接收方「对不上表」,所以 ±20 ppm 这条线直接影响射频指标。

32 kHz 晶振(睡眠期间的节拍器):频率可外接 10100 kHz 时钟或 32.000/32.768 kHz 晶体;ESR ≤ 100 kΩ;负载电容 69 pF(6/7 pF 晶体无需外部电容);容差 ±250 ppm——它决定睡眠期间的定时精度,误差大就得多留余量、多耗电。它的启动时间典型 0.4 s,相当慢,而且强烈依赖晶体本身参数。

RCX 振荡器是免晶振方案:内部 RC 振荡,默认 10 kHz,频漂 ±500 ppm,仅 Buck 模式可用,且推荐蓝牙连接间隔(含从机延迟 slave latency)不超过 2 s——漂移太大,隔久了会对不上收发窗口。省掉一颗 32k 晶体的成本,但牺牲精度。

数字 IO 与 ADC:和外设打交道的电平

数字 IO 特性

参数规格通俗解释
V_IH 输入高电平≥ 0.84 V高于此才算「1」
V_IL 输入低电平≤ 0.36 V低于此才算「0」
V_OH 输出高电平≥ 0.72 V(VBAT1V 场景)/ ≥ 1.44 V(VBAT3V 场景)输出「1」时的最低保证电压
V_OL 输出低电平≤ 0.18 V / 0.36 V输出「0」时的最高电压
I_IH / I_IL 输入漏电流±1 μA悬空脚几乎不吸电
内部上拉/下拉电流50~150 μA使能内部上/下拉时引脚自身会吃这点电流

Boost 模式的驱动能力陷阱

手册注明 Boost 模式下输出拉/灌电流被限制在 250 μA——这远低于 Buck 模式的 3.5 mA。如果你用 1.5 V 电池方案去直接驱动 LED 或其他外设,很可能推不动,需要外加上拉或驱动管。

ADC(模数转换器):10 bit 分辨率,即把 0~1.18 V 的输入量化成 1024 级。零点误差 ±2.5 mV,满量程典型 1180 mV;INL / DNL(积分/微分非线性)都是 ±2 LSB,意思是没有丢码、线性度尚可。转换一次典型 0.25 μs、最坏 0.4 μs(不含 LDO 稳定的 20 μs 和 3x 衰减器稳定的 1 μs)——单次采样是微秒级的事,但别忘了把前置稳定时间算进总延迟。注意满量程只有约 1.2 V,测电池电压这类高于它的信号,要用内部 3x 衰减器或外部分压。

DC-DC 变换器:省电的发动机

参数规格通俗解释
电感 L1.5~3 μH(典型 2.2 μH)外置电感选 2.2 μH 最稳
输出电容 C_OUT0.510 μF(建议 12 μF)电容越小越省电,但别小于 0.5 μF
输出电压 Buck / Boost1.42 V / 1.41 V给内核供电的稳定电压
峰值转换效率Buck 86% / Boost 80%电池能量有 14%~20% 损耗在这
纹波电压Buck 2.42 mV / Boost 8 mV输出电压的小幅波动,越小越好

这颗内置 DC-DC 就是一颗「微型开关电源」:Buck 把 3 V 降下来,Boost 把 1.5 V 升上去。它效率 80%86%,比传统 LDO(线性稳压)高得多——这正是前面 Buck 模式电流小的根本原因。外围只需一个 2.2 μH 电感和 12 μF 电容,BOM 成本几乎可以忽略。

射频特性:灵敏度和功率是灵魂数字

电流(假设 DC-DC 效率 100%,便于横向对比):接收 3.7 mA,发射 3.4 mA——这是纯射频内核的开销,和前面「从电池端看的」5.3 mA / 4.9 mA 作对比,就能算出变换器环节吃掉了约 1~1.5 mA。

灵敏度(sensitivity):接收机还能正确解包时的最小信号强度,数值越负越强

参数条件数值通俗解释
P_SENS正常工作条件-92.5 dBm常规环境下的标称灵敏度
P_SENS(CLEAN)干净发射源-93 dBm理想测试环境可以更好一点点
P_SENS(EOC)极端条件(-40~+85 °C)≤ -87 dBm全温区最坏情况仍优于蓝牙规范要求
P_SENS_EPKT255 字节扩展包-91 dBm包越长越难解对,灵敏度略降
P_I(max)最大输入电平≥ 10 dBm天线口很强的信号也不会把接收机打饱和

dBm 是以 1 mW 为基准的对数功率单位,-92.5 dBm 约等于 0.0000000006 mW——灵敏度数字越「负得厉害」,说明机器越能听见「耳语」。-92.5 dBm 比 BLE 规范要求的 -70 dBm 好出 20 多 dB,链路预算每多 10 dB,通信距离大约翻倍。

发射功率与频谱:输出功率 P_O 为 -2 ~ 0 dBm(典型 -1 dBm),即 1 mW 上下,这是 BLE 典型的「够用且省电」档位;二次/三次谐波典型 -54 / -40 dBm 且上限受控,保证频谱干净、过认证。邻道功率 ACP(adjacent channel power)2 MHz 偏移典型 -53 dBm、3 MHz 偏移 -57 dBm——发射能量不会「漏」到隔壁信道去干扰别人。

抗干扰能力:CIR(载干比,carrier-to-interferer ratio)表示「信号比干扰强多少还能正常收」。同频干扰(n=0)典型 7 dB;偏 ±1 MHz 时典型 -3 dB(干扰比信号强 3 dB 也能解);±2 MHz(镜像频率)典型 -20 dB。还有 blockers(阻塞)指标:30 MHz~2 GHz 的带外强干扰达 -5 dBm 时仍能收 -67 dBm 的有用信号。RSSI(接收信号强度指示)不仅能看趋势还能测绝对功率,全温区精度 ±3 dB,分辨率约 0.474 dB/LSB——做「靠近即连」这类应用够用了。

通关标准

遮住表格能答出:灵敏度 -92.5 dBm 是「最弱能听清」,输出功率 -1 dBm 是「嗓门多大」,睡眠电流 0.5~4.6 μA 是「待机多省电」——这三个数字就是一颗 BLE SoC 的名片。

全章小结:设计检查清单

  • 供电:锂电池先降到 3.5 V 以下再接 VBAT3V;1.5 V 电池走 VBAT1V(Boost);低于 1.8 V 禁止冷启动。
  • 引脚:晶振脚 1.2 V 红线,普通 GPIO 上限 3.3 V,别把 3.3 V 信号插到 1.2 V 引脚上。
  • 功耗:优先 Buck 模式;睡眠电流看 RAM 保留量;唤醒时间约 1 ms,连接间隔可以放得很大。
  • 时钟:16 M 晶振 ±20 ppm、无需外部电容;32k 晶振选 ±50 ppm 以内更好;想省晶体可用 RCX 但连接间隔 ≤ 2 s。
  • 射频:灵敏度 -92.5 dBm、功率 0 dBm、全温区最坏 -87 dBm,都优于 BLE 规范,天线匹配做好就能兑现。

自测题


d85-04 d85-04 系统架构与启动流程

这一篇在干嘛?

这一章是整份数据手册的「地图」:先认识 DA14585 芯片内部各个模块,再沿着一条主线——上电、唤醒、OTP 镜像、BootROM 执行——把芯片从按下电池那一刻到开始跑应用的全部过程讲清楚。读完你就能回答:芯片上电后到底发生了什么?

芯片里都住着谁?——内部模块一览

在讲启动流程之前,先快速认识一下 DA14585(瑞萨 Renesas 出品的蓝牙 5.0 片上系统 SoC,即 System on Chip)内部的主要成员:

  • ARM Cortex-M0 CPU:主处理器,性能约 0.9 dMIPS/MHz。它负责辅助蓝牙 LE 协议运行、替应用做计算取数,还有一件很重要的事——管理系统电源策略。它还带一个 WIC(Wake-up Interrupt Controller,唤醒中断控制器),让芯片睡眠时也能被中断唤醒。
  • BLE core:蓝牙 LE 协议的基带硬件加速器,重活不用 CPU 亲自干。
  • ROM:128 kB,出厂固化了蓝牙协议栈和启动代码(BootROM 就住在这里)。
  • OTP:64 kB 一次性可编程存储器(One-Time Programmable),用来存你的应用代码、蓝牙 profile、系统配置和校准数据。「一次性」意味着烧进去就改不了了。
  • System RAM(SysRAM):共 96 kB,由 4 块低漏电 SRAM 组成。芯片上电或唤醒时,代码会先从 OTP(或外部 flash)「镜像」到这里再执行;进睡眠时它还能保住蓝牙协议的全局变量和处理器栈。每块 SRAM 都可以独立开关电源,按需保留。
  • 外设们:音频接口(PDM、PCM/I2S、采样率转换器 SRC)、两个带 FIFO 和 DMA 的 UART、SPI、I2C、10 位 4 通道的 GPADC(通用模数转换器)、定时器与 PWM、正交解码器(读旋转编码器)、键盘控制器(自动消抖)等。
  • Radio Transceiver(射频收发器):蓝牙 LE 协议的 RF 部分。
  • Clock Generator(时钟发生器):包含两颗晶振——16 MHz 的 XTAL16M(激活模式用)和 32.768 kHz 的 XTAL32K(睡眠模式用);还有三个 RC 振荡器:RC16M、RC32K(精度差,大于 500 ppm)和 RCX(精度高,小于 500 ppm)。RCX 可以替代 XTAL32K 当睡眠时钟,省掉一颗外部晶振、降低物料成本。RC16M 的特殊用途是:上电后 XTAL16M 还没稳定时,临时给 OTP 镜像提供时钟。
  • Power Management(电源管理):带 Buck/Boost DC-DC 转换器和若干可软件开关的 LDO(低压差线性稳压器)。

记忆口诀

「M0 管脑子,BLE 管跑腿,ROM 住协议,OTP 存应用,RAM 做镜像,时钟分快慢,电源自己管。」

三种功能模式:开发、校准、量产

DA14585 的使用分三个阶段,理解它们对后面讲启动流程很关键:

  1. Development Mode(开发模式):代码还在写,通过 SWD(JTAG 调试口)或串口(如 UART)下载到 SysRAM 里跑。地址 0x00 会被重映射到实际存放代码的物理内存,方便随时改、随时调。
  2. Calibration Mode(校准模式):开发和量产之间的中间步骤,要往 OTP 里烧两样东西——蓝牙设备地址、外部 16 MHz 晶振的微调值(trim value,校准值)。每个晶振个体都有差异,必须产线校准才能达到蓝牙协议要求的精度。
  3. Normal Mode(正常模式):应用验证完毕烧进 OTP,系统从此自主运行。每次上电/唤醒,OTP 控制器的 DMA 会自动把代码从 OTP 拷进 SysRAM,然后跳过去执行。这就是最终产品里的状态。

OTP 内存布局与 OTP Header

OTP 必须按规定的布局来编程,这样 BootROM 代码和应用才能快速找到所需信息。

OTP 布局示意图 图 1:OTP 布局示意图——从低地址到高地址依次是中断向量、客户代码和 OTP Header

OTP 共 8K 个 64 位字,内容分三段:

  • 中断向量:固定在地址 0x0,共 64 字,属于应用代码的一部分。
  • 客户代码:你写的应用和 profile,量产烧写前大小就确定了。
  • OTP Header(OTP 头):记录系统配置和蓝牙相关数据的「元信息区」,位于高地址段。

OTP Header 里都有什么

OTP Header 是一张从 0xFFFF8 往低地址铺开的表格,关键条目如下:

地址作用
0xFFFF8SWD 使能标志:0x00 允许 JTAG 调试,0xAA 禁止调试
0xFFFF0OTP DMA 长度(要拷贝到 SysRAM 的字数)
0xFFA8蓝牙设备地址(8 个 64 位字)
0xFFA0 + 0xFF28签名算法选择器(MD5/SHA-1/CRC32)+ 代码签名,用于可信启动,可选
0xFF20~0xFEF8一排校准值:VCO、XTAL16M、RC16M、BandGap、RFIO、LNA
0xFEF0校准标志位:0xA5A5 表示至少校准过一次,各 bit 指明哪个校准值有效
0xFEE8睡眠时钟源标志:外部 XTAL32K 还是内部 RC32K
0xFEC0Boot 专用映射:自定义 SPI 启动的引脚配置、flash 唤醒命令码
0xFEB8UART STX 超时(BootROM 等外部设备通过 UART 发起通信的时间,默认 60 ms)
0xFEB0OTP 控制值 0xC0DEBABE,BootROM 多次检查它以确认 OTP 工作正常
0xFE20客户自定义字段(18 个 64 位字)
0xFE08 / 0xFE00应用已烧写标志 #2 / #1,两个都要匹配才认定「OTP 里有应用」

几点值得强调:

  • 晶振校准值由客户在产线校准阶段烧写(晶振是外部元件,每颗不一样);而 VCO、BandGap、RFIO、LNA 等射频相关校准值由原厂 Dialog 在生产测试时烧好,用户不用管。
  • Sleep Clock Source Flag 只是「告诉」应用用的哪种睡眠时钟,不会替你使能 XTAL32K——选了外部晶振还得应用代码自己去开。
  • Boot specific mapping 可以让 BootROM 用指定的 SPI 引脚从外部 flash 启动,还能负责唤醒处于深度掉电状态的 flash(默认发送 0xAB 唤醒命令,也可通过 CS 引脚拉唤醒)。
  • 两个应用烧写标志是 BootROM 判断「现在是 Normal 模式还是 Development 模式」的唯一依据。

常见坑

忘记烧写应用烧写标志(0xFE00/0xFE08 的魔数)是最常见的错误之一——代码明明烧进了 OTP,芯片却始终进开发模式四处找串口。烧写工具生成的镜像一般会带上这些标志,自定义烧写流程时千万别漏。

启动流程主线:上电 → 唤醒 → OTP 镜像 → BootROM

这是本章的主菜。启动过程由三个顺序衔接的阶段组成:

  1. 电源/唤醒时序(Power/Wake-Up sequence):硬连线状态机,负责打开 LDO、建立内部电压。
  2. OTP 镜像(OTP mirroring):硬连线状态机,在 ARM CPU 还没启动前就把 OTP 内容拷进 SysRAM。
  3. BootROM 启动流程(BootROM booting sequence):只有冷上电或硬件复位时才会执行。

总体启动流程图 图 2:总体启动流程图——冷上电走 BootROM 分支,睡眠唤醒走硬件镜像分支

区分「冷上电」和「从睡眠唤醒」靠一个触发器(Flip-Flop):冷上电时它被置 1。从按下电池到开始蓝牙广播,全程约 50 ms 以内(取决于 OTP 内容大小)。

第一步:电源/唤醒时序

每次冷上电或从睡眠唤醒,这个硬连线状态机都会先跑。它用内部模拟比较器自动判断电源配置:VBAT3V > 1.8 V 则处于 BUCK 模式,VBAT1B > 0.5 V 则处于 BOOST 模式,并据此配置 DC-DC 转换器。

流程大致是:先检查 VBAT1V 引脚电压判断是否 BOOST 模式并启动 DC-DC;否则依次使能 BandGap(带隙基准)和数字 LDO,给内核供 1.2 V、给 OTP 供 1.8 V;接着启动 XTAL16M,同时二次确认 DC-DC 模式。

由于 LDO 和晶振起振都需要时间,状态机会轮询「启动完成」信号;如果超时了也没等到,它就忽略状态强行继续(超时可通过 SYS_CTRL_REG[TIMEOUT_DISABLE] 关闭)。不超时的话,从上电到芯片就绪约 1.2~1.5 ms

电源唤醒时序图 图 3:电源/唤醒时序图——各电源轨和时钟依次建立的过程

第二步:OTP 镜像

镜像就是把 OTP 内容拷贝到 SysRAM,让 CPU 从省电的 SRAM 而不是费电的 OTP 里取指执行。它由 SYS_CTRL_REG[OTP_COPY] 控制,但冷上电和睡眠唤醒的执行者不一样

  • 冷上电:BootROM 软件(也就是 ARM CPU 亲自跑代码)负责镜像。
  • 睡眠唤醒:BootROM 不执行,改由一个小的硬件状态机完成镜像。

唤醒时 OTP 镜像流程图 图 4:唤醒时 OTP 镜像流程图——硬件状态机自动完成拷贝

硬件状态机怎么知道要拷多少字?答案在 OTP Header 的长度字段里:冷上电时 BootROM 会把它写入 OTPC_NWORDS 寄存器,而这个寄存器在睡眠期间保持数值不丢,所以唤醒时硬件随时知道拷贝多少。整个睡眠-唤醒周期只需要冷上电时做一次设置。

第三步:BootROM 三种启动场景

BootROM 代码先读 OTP Header 里的「应用已烧写」标志来判断模式。注意:未编程的 OTP 内容全是 0。由此分出三种场景:

场景一:OTP 已烧写(Normal 模式)。两个标志魔数都匹配,说明 OTP 功能正常且应用已烧好。BootROM 把 Header 配置写进寄存器(部分寄存器睡眠也保值),把应用代码镜像到 SysRAM,执行补丁(patching)机制应用软件更新,再把重映射寄存器 SYS_CTRL_REG[REMAP_ADR0] 设为指向 SysRAM,最后来一次软件复位——CPU 从地址 0 开始跑你的应用。

场景二:OTP 未烧写(全 0,Development 模式)。BootROM 初始化所有可能下载代码的外设:UART、SPI(主/从)、I2C,然后在各种 GPIO 组合上逐个「敲门」等回应。搜索顺序是:SPI Master A → SPI Master B → UART AD(波特率分别 57600、115200、57600、9600)→ SPI Slave A(以 8/4/2/1 MHz 循环 4 次)→ I2C AD(100 kbps 标准模式)。每一步发一个约定字符等回复,超时就换下一步;收到回应就建立通信、开始下载代码。如果 OTP 里指定了 SPI 启动配置,BootROM 会先试这条路,失败再退回标准搜索流程。

场景三:OTP 数据异常(读到随机数据)。全 0 以外又不匹配魔数,说明 OTP 可能因供电问题失效了(比如电池快耗尽、LDO 产不出所需电压)。BootROM 仍会激活外设,让系统保持可用、可以调试。

BootROM 流程图 图 5:BootROM 流程图——判断 OTP 状态后进入 Normal 或 Development 分支

通关标准

合上手册能独立画出这条主线:冷上电 → 硬件状态机建电源(1.2~1.5 ms)→ BootROM 读烧写标志 → 三选一(正常启动镜像 / 开发模式找串口 / OTP 异常保底)→ 重映射地址 0 → 软复位跑应用;睡眠唤醒则绕过 BootROM,硬件直接镜像 OTP。

电源域与电源模式

九个电源域

DA14585 用多个电源域(Power Domain)分区供电,不用的区域整域断电、彻底消灭漏电流:

电源域内容何时供电
PD_AONAlways-On:ARM/WIC、定时器、电源管理/时钟、按键、正交解码、焊盘环、唤醒所需寄存器永远供电
PD_SYS系统:AHB 总线、OTP、ROM、SysRAM、看门狗、GPIO 复用仅 CPU 运行时
PD_PER外设:UART、SPI、I2C、键盘控制器、ADC、音频干完活即可关
PD_DBG调试:Cortex-M0 的调试部分调试时
PD_RAD射频:Radio 数字部分(DPHY)和 BLE Core,由专用 LDO 管理需要射频时
PD_SR1~SR4四块 SysRAM 独立供电线(32k+16k+16k+32k)按需保留

记住一个原则:用不到的 SRAM 块应始终关闭

四种电源模式对比

电源模式特点RAM 保留蓝牙连接
Active(激活)全速运行,无特殊省电全部正常
Sleep(睡眠)无电源门控,CPU 空等中断;PD_SYS 开,PD_PER/PD_RAD 可编程全部可维持
Extended Sleep(扩展睡眠)除 PD_AON 和选保留的 PD_SRx 外全部断电可编程保留可维持,唤醒后可能要重新镜像
Deep Sleep(深度睡眠)所有电源域全关,含全部 SRAM无法维持

此外还有「永久睡眠」式的用法——Deep Sleep 模式下系统功耗最低,唤醒后只能靠外部中断或上电复位,蓝牙连接状态数据全丢,必须重新复位启动,因此常被用作产品出厂运输模式。

进入 Extended/Deep Sleep 的代码动作是:配置 PMU_CTRL_REG 关掉相应电源域,再置位 ARM CPU 系统控制寄存器里的 SLEEPDEEP 位。但要注意,硬件不会自动关掉所有域——进入睡眠前,某些域需要软件先手动关闭:

电源模式PD_SYSPD_PERPD_DBGPD_RADPD_SRx模拟部分
Extended/Deep Sleep自动关可编程自动关可编程可编程自动关

「模拟部分」指 BandGap、DC-DC、XTAL16M、RC 振荡器、ADC 及各 LDO,硬件会在进睡眠时统一关闭。

保留 RAM 还是唤醒后重新镜像?

这是个经典的功耗权衡题:

  • 只保留 SysRAM4(32 kB):能保住蓝牙连接状态数据,功耗也足够低;但应用代码不保留,唤醒后要做 OTP 镜像。
  • 全部不保留(Deep Sleep):功耗最低,但唤醒必须复位,适合运输模式。
  • 多保留几块 SRAM:唤醒后无需镜像、恢复更快,但睡眠功耗升高。

选哪种取决于应用参数:连接间隔(connection interval)越短、每连接收发数据越多,唤醒越频繁,保留 RAM 越划算;连接间隔超过某个时间阈值后,从 OTP 镜像反而更省电。

常见坑

睡眠时钟也要配套配置:睡眠期间 LDO 的保留电压(BANDGAP_REG[LDO_RET_TRIM])需按保留 RAM 大小和工作温度设置,例如保留 96 kB 且工作在 -40~85 °C 时应设 0x6;设置不当会导致睡眠状态下 RAM 数据丢失。另外若 Header 里选了外部 XTAL32K,应用必须自己使能它,硬件不会代劳。

保留寄存器

睡眠期间有些寄存器必须保值才能让唤醒流程顺利:PD_AON 里的全部寄存器(唤醒逻辑靠它们)、PD_SYS 里的 OTP 控制寄存器(尤其是记录拷贝字数的 OTPC_NWORDS_REG——这正是第二节硬件镜像的前提)、PD_RAD 里的 BLE_CNTL2_REG(蓝牙 Core 配置)。而 PD_PER 的外设寄存器一个都不保留,唤醒后需要重新配置。

自测一下


d85-05 d85-05 复位、内核与总线

这一篇在干嘛?

芯片一上电、一死机,第一件事就是「复位」;复位之后跑代码的是「内核」,内核找外设干活靠「总线」,固件出了 bug 还得靠「补丁块」救场。这一篇就讲 DA14585 里这四件事:第 5 章复位(Reset)、第 6 章 ARM Cortex-M0 内核、第 7 章 AMBA 总线、第 8 章 Patch Block。

复位:让芯片从零开始

RST 焊盘长什么样

DA14585 有一个专门的复位引脚(RST pad,复位焊盘),它是高电平有效的——把 RST 拉高才会触发复位,这一点和很多「低电平复位」的芯片正好相反。芯片内部给这个引脚配了一套「防抖装备」:

  • 一个由 400 kΩ 电阻和 2.8 pF 电容组成的 RC 滤波器,用来滤除尖峰脉冲(spike),防止电源毛刺误触发复位;
  • 一个 25 kΩ 的下拉电阻,保证没人碰它时引脚默认停在低电平(不复位状态)。

如果应用用不到复位引脚,直接把它接地即可。

RST 焊盘响应延迟:纵轴是电压(V),横轴是时间(μs),可以看到输入抬高后要经过一小段延迟输出才动作

RST 焊盘的典型响应延迟约为 2 μs 量级(原文此处写「2 s」,但结合图 13 横轴单位是 μs,应是笔误)。这个延迟就是 RC 滤波「压住」尖峰的代价——毛刺被滤掉的同时,真正的复位信号也会慢半拍。

三种复位:POR、HW、SW

DA14585 内部有三个主要的复位信号,初学者最容易搞混,我们逐个说:

1. POR(Power-On Reset,上电复位):顾名思义,和「电」有关。它可以由两个来源触发:

  • 内部:VDD 电压越过最低阈值时,硬件自动释放(release)系统的触发器(flip-flop),让所有寄存器归零;
  • 外部:由外部 POR 源产生——可以是 RST 引脚,也可以是一个被配置成 POR 源的 GPIO(极性可配)。

POR 的关键特征是按持续时间区分:外部源保持有效的时间达到 POR_TIMER_REG 里设定的时间,才算 POR;达不到就只是普通的硬件复位。POR 会触发完整的冷启动(cold start-up)流程,BootROM 代码会被重新执行。

2. HW Reset(硬件复位):基本就是 RST 引脚被拉高一小段时间(比 POR 的可编程延时短)时触发的复位。它同样会走冷启动流程、执行 BootROM。另外,系统从扩展睡眠(Extended Sleep)或深度睡眠(Deep Sleep)模式唤醒时,也可以通过设置 PMU_CTRL_REG[RESET_ON_WAKEUP] 位自动来一次硬件复位。

3. SW Reset(软件复位):由软件主动触发,是两个信号的逻辑或(OR):

  • 写 SYS_CTRL_REG[SW_RESET] 位;
  • ARM CPU 自己发复位(写 SCB->AIRCR = 0x05FA0004,这是 Cortex-M0 的标准「系统复位」寄存器操作)。