这一篇在干嘛?
这是 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,片上系统)的意思是:把一颗产品需要的绝大多数部件——处理器、存储器、无线电台、电源管理——全都装进这一小块硅片里。
拆开看它有三大件:
- 2.4 GHz 射频收发器(Transceiver):负责收发 2.4 GHz 频段的无线电信号,也就是蓝牙工作的频段。收发器=发射机(TX)+接收机(RX)的合体。
- ARM Cortex-M0 微控制器(MCU):16 MHz 主频的 32 位处理器核心,是芯片的「大脑」,跑你的应用代码。
- 存储器组合: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 |
处理与存储
| 项目 | 参数 |
|---|---|
| CPU | 16 MHz 32 位 ARM Cortex-M0,带 SWD 调试接口(Serial Wire Debug,两线制调试口) |
| 协处理器 | 专用链路层处理器、AES-128 加密处理器 |
| OTP | 64 kB |
| SRAM | 96 kB(数据/保持 SRAM) |
| ROM | 128 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,百万分之一)是频率精度的单位——蓝牙对时序精度有要求,这个数字越小越准。
接口与外设
| 类别 | 参数 |
|---|---|
| GPIO | 14 个(WLCSP34 封装)/ 25 个(QFN40)/ 32 个(QFN48) |
| UART | 2 路,带硬件流控,最高 1 Mbps |
| SPI+ | 1 路(增强版 SPI 串行接口) |
| I2C | 100 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 天线区域铺铜仍要按参考设计来,乱铺地铜照样翻车。
封装
| 封装 | 引脚数 | 尺寸 |
|---|---|---|
| WLCSP | 34 | 2.40 mm × 2.66 mm(晶圆级封装,比一粒米还小) |
| QFN | 40 | 5 mm × 5 mm |
| QFN | 48 | 6 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、存储器、射频、外设的内部连接关系
框图怎么读?给你三条路线:
- 中间找大脑:ARM Cortex-M0 内核居中,通过 AMBA 总线(ARM 芯片内部的标准总线,相当于芯片里的「国道网」)连接各个模块。
- 左侧看存储:ROM(协议栈)、OTP(固化配置)、SRAM(运行内存)挂在总线上,CPU 取指令、存数据都走这条路。
- 右侧看世界:数字接口(UART/SPI/I2C)、模拟接口(ADC、音频单元)通向 GPIO 引脚;射频收发器独占天线一侧。电源管理单元(DC-DC、LDO 低压差稳压器)负责给所有模块按需供电。
框图里模块的分组方式还暗示了电源域(Power Domain)的划分——后面章节会讲到芯片能单独关掉射频域、外设域只留睡眠定时器,这就是长续航的底层机制。
通关标准
学完这一篇,你应该能不看原文回答:① DA14585 的三块存储器各多大、各干什么用?② 冷启动多快、最多几条连接?③ 发射/接收电流各多少毫安?④ WLCSP34 封装多大?⑤ 框图里 CPU、存储、射频、外设四类模块大致挂在哪?答得上来,就可以进入下一篇学引脚和规格了。
自测一下
DA14585 的 OTP 和 SRAM、ROM 有什么区别?为什么要三块存储器?
OTP(64 kB)是一次性可编程:只能烧写一次,掉电不丢,适合放用户固化代码和出厂配置,成本最低。SRAM(96 kB)是运行内存:速度快但断电丢数据(支持保持模式),程序运行时用。ROM(128 kB)出厂固化蓝牙协议栈,用户不可写但人人可用,省得每次都烧协议栈。三者组合=「固化的归 OTP/ROM,跑动的归 SRAM」。
为什么「冷启动 < 50 ms」对遥控器很重要?
遥控器平时深度睡眠几乎零功耗,用户按键瞬间才唤醒。如果启动要几百毫秒,用户按了按键遥控器还没反应,体验就是「迟钝」;< 50 ms 的启动让人感觉按下即响应,同时平时又能保持极低待机电流。
单线天线「免 RF 匹配、免收发切换」省了什么?
传统蓝牙射频输出阻抗和天线阻抗不匹配,需要电感电容组成的匹配网络;收发还要一个开关切换天线在发射机和接收机之间。DA14585 把这些做进片内,PCB 上直接一根走线接天线即可——省料、省成本、省调试时间,也缩小了板子面积。
TX 3.4 mA / RX 3.7 mA 是在什么条件下测的?换成两节 1.5 V 碱性电池还行吗?
该数值是在 3 V 供电(VBAT3V)且配合理想 DC-DC 的条件下给出的。DA14585 片内 Buck/Boost DC-DC 支持 1.5 V 碱性电池(Boost 升压模式)和 3.0 V 纽扣电池(Buck 降压模式),两种电池都能直接驱动,但实际电流随电源配置不同需查第 3 章电气规格。
三种封装(WLCSP34 / QFN40 / QFN48)该怎么选?
看你要几个 GPIO:极小型产品(标签、Beacon)选 WLCSP34,14 个 GPIO、2.4 × 2.66 mm 最小但贴装工艺要求高;常规产品选 QFN40,25 个 GPIO、5 × 5 mm 好焊好调;需要最多 IO 或特定外设复用选 QFN48,32 个 GPIO、6 × 6 mm,但数据手册注明需联系 Dialog/Renesas 销售确认供货。
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 都可以:
- 作为普通数字输入或输出;
- 选择使能内部上拉或下拉电阻;
- 复位期间和复位之后自动使能下拉;
- 携带「状态保持」机制——芯片进入掉电(power down)省电模式时,引脚电平状态不会丢。这条对蓝牙产品很关键:BLE 设备绝大部分时间都在睡觉省电,醒来后引脚电平还能接上之前的状态,外接电路不会因为芯片打了个盹就误动作。
另外注意驱动能力:GPIO 的输出驱动统一为 3.5 mA。想直接点亮一颗 LED 没问题(限流电阻算好),但想驱动继电器、电机这类大电流器件就必须外加三极管或 MOS 管缓冲,别指望 GPIO 自己扛。
| 引脚 | 类型 | 驱动 (mA) | 复位状态 | 说明 |
|---|---|---|---|---|
| P0_0 ~ P0_7 | DIO | 3.5 | I-PD | 输入/输出,可选上/下拉电阻,复位期间及之后使能下拉;支持多功能复用模式;掉电时带状态保持 |
| P1_0 ~ P1_3 | DIO | 3.5 | I-PD | 同上(P1_2、P1_3 见 Note 1 的晶振干扰问题) |
| P1_4/SWCLK | DIO | 3.5 | I-PD | 默认为 JTAG 调试时钟(SWD 时钟线) |
| P1_5/SW_DIO | DIO | 3.5 | I-PU | 默认为 JTAG 调试数据输入输出(SWD 数据线) |
| P2_0 ~ P2_9 | DIO | 3.5 | I-PD | 同 P0(注意:P2_3 及之后的引脚仅 QFN40/QFN48 封装提供) |
| P3_0 ~ P3_7 | DIO | 3.5 | I-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Ω 上拉更稳妥。
功能信号分几大类(都是映射式),汇总如下:
| 接口 | 信号 | 说明 |
|---|---|---|
| UART | UTX / URX / URTS / UCTS | 第一路串口:发送、接收、请求发送、清除发送 |
| UART2 | UTX2 / URX2 / URTS2 / UCTS2 | 第二路串口,功能同上 |
| SPI | SPI_CLK / SPI_DI / SPI_DO / SPI_EN | 时钟、数据输入、数据输出、片选(见 Note 2/3) |
| I2C | SDA / SCL | 数据线与时钟线,开漏输出;映射脚自动配置 25 kΩ 上拉到指定电源域(由 Px_PADPWR_CTRL_REG 寄存器设置) |
| 正交解码器 | QD_CHA_X / QD_CHB_X / QD_CHA_Y / QD_CHB_Y / QD_CHA_Z / QD_CHB_Z | X/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)——这是数据手册的硬性要求,悬空可能带来不可预测的复位。
时钟引脚:两颗晶振一颗「心脏」一颗「闹钟」
| 引脚 | 类型 | 说明 |
|---|---|---|
| XTAL16Mp | AI | 16 MHz 晶振输入(正端) |
| XTAL16Mm | AO | 16 MHz 晶振输出(负端) |
| XTAL32kp | AI | 32.768 kHz 晶振输入(正端) |
| XTAL32km | AO | 32.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)部分只有两根引脚,是蓝牙信号的出入口:
| 引脚 | 类型 | 说明 |
|---|---|---|
| RFIOp | AIO | 射频输入/输出,阻抗 50 Ω |
| RFIOm | AIO | 射频地 |
电源部分(Power Supply)是画原理图时最容易画错的地方,逐个看:
| 引脚 | 类型 | 说明 |
|---|---|---|
| VBAT3V | AIO | 电池连接:单颗纽扣电池(3 V)直接接这里;若用 1.5 V 电池,此脚是 DC-DC 变换器的第二输出 |
| VBAT1V | AI | 电池连接:接碱性或镍氢电池(1.5 V);若用的是 3 V 纽扣电池,此脚必须接地 |
| SWITCH | AIO | 外接 DC-DC 变换器电感的连接脚 |
| VDCDC | AO | DC-DC 变换器的输出 |
| VBAT_RF | AIO | PCB 上接到 VBAT3V |
| VDCDC_RF | AIO | PCB 上接到 VDCDC |
| VDD | AI | 仅用于测试。正常使用时保持悬空 |
| GND | AIO | 地 |
供电有两种方案:单颗 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 映射脚。做到这一步,本章就通了。
自测:你真的分清了吗?
DA14585 的三种封装分别是什么?GPIO 数量上有什么差别?
WLCSP34(34 球晶圆级封装)、QFN40、QFN48。P0 全都有;P2_3 及之后仅在 QFN40/QFN48 提供;P3 端口在 QFN40 上只有 P3_0,完整 8 位仅在 QFN48 上。封装越小引出的 GPIO 越少。
芯片复位后,大多数 GPIO 是上拉还是下拉?哪根是例外?
大多数 GPIO 复位状态是 I-PD(内部下拉使能);例外是 P1_5/SW_DIO,复位后为 I-PU(上拉使能),因为它默认是 SWD 调试数据线。
「Mapped on Px ports」是什么意思?给你带来什么便利?
指该功能信号(如 UTX、SPI_CLK)不固定在某一根物理引脚上,可通过软件映射到指定 Px 端口的引脚。便利是布线灵活:PCB 走线冲突时换个映射脚就行,不必改硬件设计。
使用单颗 3 V 纽扣电池供电时,VBAT1V 应该怎么处理?
必须接地(GND)。VBAT1V 专门用于 1.5 V 碱性/镍氢电池方案;用 3 V 纽扣电池时它不接电池也不能悬空。
为什么 P1_2 和 P1_3 要避免高频翻转?
它们物理位置靠近片内 16 MHz 晶振振荡电路,GPIO 剧烈翻转可能干扰时钟信号,表现为蓝牙丢包率(PER)升高。设计上应避开用这两根脚输出高频信号。
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 两套来给。
这一章还附了两张参考电路图,规格表里的所有数字都以这两张图为准:

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

图 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 / 射频规格表中的数字才成立。
| 参数 | 含义 | Min | Max | 通俗解释 |
|---|---|---|---|---|
| V_BAT(VBAT1V) | Boost 模式电池电压 | 0.9 V | 3.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 V | min(3.3, VBAT_RF+0.2) | 正常 GPIO 高电平最高 3.3 V |
| V_PIN(1V2) | 晶振脚电压 | 0 V | 1.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_0kB | Boost 深睡,不保 RAM | 610 nA | 深度睡眠不保留任何 RAM,芯片只留一个 32 kHz 时钟跳心跳 |
| I_BAT(DP_SLP) BOOST_16kB | Boost 深睡,保 16 kB RAM | 1.4 μA | 多保一块 RAM,电流翻倍多,因为 RAM 要持续供电才不忘事 |
| I_BAT(EXT_SLP) BOOST_96kB | Boost 扩展睡,保 96 kB RAM | 4.6 μA | RAM 越多睡眠电流越大 |
| I_BAT(DP_SLP) BUCK_0kB | Buck 深睡,不保 RAM | 520 nA | 同样的睡姿,Buck 比 Boost 省约 15% |
| I_BAT(EXT_SLP) BUCK_96kB | Buck 扩展睡,保 96 kB RAM | 4 μA | 典型信标/传感器应用的实际待机水平 |
| I_BAT(ACT_RX) BOOST | Boost 接收中 | 13.4 mA | 从电池角度看收包电流(含变换器损耗) |
| I_BAT(ACT_TX) BOOST | Boost 发射中 | 12.4 mA | 发射反而比接收略省 |
| I_BAT(ACT_RX) BUCK | Buck 接收中 | 5.3 mA | 3 V 纽扣电池场景,Buck 效率高得多 |
| I_BAT(ACT_TX) BUCK | Buck 发射中 | 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_L | 10~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 变换器:省电的发动机
| 参数 | 规格 | 通俗解释 |
|---|---|---|
| 电感 L | 1.5~3 μH(典型 2.2 μH) | 外置电感选 2.2 μH 最稳 |
| 输出电容 C_OUT | 0.5 | 电容越小越省电,但别小于 0.5 μF |
| 输出电压 Buck / Boost | 1.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_EPKT | 255 字节扩展包 | -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 规范,天线匹配做好就能兑现。
自测题
为什么充满电的 4.2 V 锂电池不能直接接 VBAT3V?
绝对最大额定值规定电池电压上限 3.6 V(推荐工作条件是 3.5 V),4.2 V 已超出红线,可能永久损坏芯片。正确做法是用一颗外部 LDO 或 DC-DC 先降到 3.0~3.3 V 再供电。 [!question]- 深度睡眠不保留 RAM 只要 610 nA,为什么很多产品宁愿多花电流保留 32 kB RAM(2.1 μA)?
深睡丢 RAM 后唤醒要从 Flash/OTP 重拷代码,恢复更慢且耗电;扩展睡眠唤醒只要约 1 ms,且蓝牙协议状态(连接参数等)能直接续上。对于连接间隔几百毫秒的典型应用,多出的 1~2 μA 换来更低的平均功耗和更简单的软件,反而更划算。 [!question]- 16 MHz 晶振的 ±20 ppm 和 ±40 ppm 有什么区别?不修调会怎样?
±40 ppm 是晶振未修调(untrimmed)的出厂容差;利用芯片内部变容管(varicap)修调后可收窄到 ±20 ppm(含老化与温漂)。不做修调时频率偏差翻倍,会直接吃掉射频链路预算,导致灵敏度劣化、通信距离缩短。 [!question]- 同样是「接收电流」,为什么一处写 3.7 mA、另一处写 5.3 mA?
3.7 mA 是射频内核自身的电流,测量时假设 DC-DC 效率 100%(用于公平对比射频性能);5.3 mA 是从电池端实测的典型应用电流,包含了 DC-DC 约 86% 效率带来的损耗以及整机的其他开销。设计电池容量时要按后者计算。 [!question]- Boost 模式下直接用 GPIO 驱动 LED 点亮了但很暗,最可能是什么原因?
手册规定 Boost 模式下输出拉/灌电流被限制在 250 μA(Buck 模式为 3.5 mA)。LED 需要 5~10 mA 时 GPIO 根本推不动,电压会被拉垮。应改用三极管/MOS 驱动,或直接切换到 Buck 供电方案。
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 的使用分三个阶段,理解它们对后面讲启动流程很关键:
- Development Mode(开发模式):代码还在写,通过 SWD(JTAG 调试口)或串口(如 UART)下载到 SysRAM 里跑。地址 0x00 会被重映射到实际存放代码的物理内存,方便随时改、随时调。
- Calibration Mode(校准模式):开发和量产之间的中间步骤,要往 OTP 里烧两样东西——蓝牙设备地址、外部 16 MHz 晶振的微调值(trim value,校准值)。每个晶振个体都有差异,必须产线校准才能达到蓝牙协议要求的精度。
- Normal Mode(正常模式):应用验证完毕烧进 OTP,系统从此自主运行。每次上电/唤醒,OTP 控制器的 DMA 会自动把代码从 OTP 拷进 SysRAM,然后跳过去执行。这就是最终产品里的状态。
OTP 内存布局与 OTP Header
OTP 必须按规定的布局来编程,这样 BootROM 代码和应用才能快速找到所需信息。
图 1:OTP 布局示意图——从低地址到高地址依次是中断向量、客户代码和 OTP Header
OTP 共 8K 个 64 位字,内容分三段:
- 中断向量:固定在地址 0x0,共 64 字,属于应用代码的一部分。
- 客户代码:你写的应用和 profile,量产烧写前大小就确定了。
- OTP Header(OTP 头):记录系统配置和蓝牙相关数据的「元信息区」,位于高地址段。
OTP Header 里都有什么
OTP Header 是一张从 0xFFFF8 往低地址铺开的表格,关键条目如下:
| 地址 | 作用 |
|---|---|
| 0xFFFF8 | SWD 使能标志:0x00 允许 JTAG 调试,0xAA 禁止调试 |
| 0xFFFF0 | OTP 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 |
| 0xFEC0 | Boot 专用映射:自定义 SPI 启动的引脚配置、flash 唤醒命令码 |
| 0xFEB8 | UART STX 超时(BootROM 等外部设备通过 UART 发起通信的时间,默认 60 ms) |
| 0xFEB0 | OTP 控制值 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
这是本章的主菜。启动过程由三个顺序衔接的阶段组成:
- 电源/唤醒时序(Power/Wake-Up sequence):硬连线状态机,负责打开 LDO、建立内部电压。
- OTP 镜像(OTP mirroring):硬连线状态机,在 ARM CPU 还没启动前就把 OTP 内容拷进 SysRAM。
- 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 不执行,改由一个小的硬件状态机完成镜像。
图 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 仍会激活外设,让系统保持可用、可以调试。
图 5:BootROM 流程图——判断 OTP 状态后进入 Normal 或 Development 分支
通关标准
合上手册能独立画出这条主线:冷上电 → 硬件状态机建电源(1.2~1.5 ms)→ BootROM 读烧写标志 → 三选一(正常启动镜像 / 开发模式找串口 / OTP 异常保底)→ 重映射地址 0 → 软复位跑应用;睡眠唤醒则绕过 BootROM,硬件直接镜像 OTP。
电源域与电源模式
九个电源域
DA14585 用多个电源域(Power Domain)分区供电,不用的区域整域断电、彻底消灭漏电流:
| 电源域 | 内容 | 何时供电 |
|---|---|---|
| PD_AON | Always-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_SYS | PD_PER | PD_DBG | PD_RAD | PD_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 的外设寄存器一个都不保留,唤醒后需要重新配置。
自测一下
冷上电和睡眠唤醒的 OTP 镜像分别由谁执行?
冷上电时由 BootROM 软件(即 ARM CPU 执行代码)完成镜像;睡眠唤醒时 BootROM 不运行,由一个硬连线状态机(借助 OTP 控制器 DMA)自动完成。前提是冷上电时 BootROM 已把拷贝字数写入可保留的 OTPC_NWORDS 寄存器。
BootROM 如何区分 Normal 模式和 Development 模式?三种启动场景分别是什么?
读 OTP Header 中地址 0xFE00 和 0xFE08 的两个「应用已烧写」标志魔数。场景一:魔数匹配,OTP 正常,走 Normal 模式完成镜像后软复位执行应用;场景二:OTP 全 0 未烧写,进 Development 模式,在 UART/SPI/I2C 的多种引脚组合上轮流搜索外部下载设备;场景三:读到随机数据,判定 OTP 因供电异常失效,仍激活外设保证系统可调试。
为什么要有 RC16M 振荡器?睡眠时钟为什么可以选 RCX?
冷上电/唤醒后 XTAL16M 起振需要稳定时间,RC16M 先顶上,为 OTP 镜像提供时钟。RCX 精度高(<500 ppm),可替代 XTAL32K 做睡眠时钟,既省电又省掉一颗外部 32 kHz 晶振,降低整机物料成本。
Deep Sleep 和 Extended Sleep 的本质区别是什么?Deep Sleep 适合什么场合?
Extended Sleep 还能保留选定的 SysRAM 块(至少 PD_AON 常开),因此可以维持蓝牙连接状态;Deep Sleep 连所有 SRAM 都断电,连接状态无法保留,唤醒必须复位重来。Deep Sleep 功耗最低,适合产品出厂运输模式等不需要维持连接的场合。
应用代码烧进 OTP 但忘了烧写标志,芯片会怎样?
BootROM 读不到两个「应用已烧写」魔数,会把芯片当作 Development 模式:初始化 UART/SPI/I2C 并在多种引脚组合上反复搜索下载设备,而不会去镜像执行你的应用。排查「烧了代码却不起广播」的问题时,先检查 0xFE00/0xFE08 标志。
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 的标准「系统复位」寄存器操作)。