2. nRF芯片启动与存储架构
在nRF生产测试与自动化烧录中,最先要建立的一个认知是:烧录器写入的不是“一个固件文件”,而是若干具有不同地址、不同权限、不同生命周期的存储区域。nRF52、nRF53、nRF91虽然内核与安全架构不同,但存储模型有共同骨架:Flash用于存放代码与常量,RAM用于运行时数据,UICR用于用户配置,FICR用于出厂信息,协议栈或SoftDevice占用一段受保护区域。理解这些区域的边界,才能正确设置烧录地址、判断校验失败原因、避免误擦关键数据。
一、存储区域的基本分工
以nRF52832为例,其Flash为512 KB,地址范围0x0000_0000~0x0007_FFFF;RAM为64 KB,地址范围0x2000_0000~0x2000_FFFF。nRF5340应用核Flash为1 MB、网络核为256 KB,两者拥有独立地址空间;nRF9160则把应用与调制解调器固件分区管理,并引入更严格的安全域。无论哪一款,烧录工具看到的都是“地址+长度”的连续空间,但各段含义完全不同。
- Flash主区:存放应用程序、协议栈、Bootloader。可擦写,但擦除以页为单位,nRF52页大小为4 KB,nRF53/nRF91为4 KB或更大。
- RAM:掉电即失,不参与烧录内容校验,但链接脚本中的RAM起止地址会影响协议栈与应用的内存分配。
- UICR:用户信息配置寄存器区,位于Flash高端附近,常用于写Bootloader起始地址、NFCT引脚、REG0/REG1稳压器配置、PSEL引脚等。它只能按字写、按页擦,写错会导致芯片启动异常。
- FICR:工厂信息配置寄存器,只读,包含器件ID、加密密钥、校准值、RAM/Flash容量等。生产测试中常用它读取唯一ID做追溯。
二、协议栈与SoftDevice分区
在nRF52经典蓝牙方案中,SoftDevice是一段预编译的二进制协议栈,必须烧录到Flash起始地址0x0000_0000,应用程序紧随其后。例如S132 v7.2.0占用约152 KB,应用起始地址通常设为0x0002_6000。若应用链接地址与SoftDevice占用区重叠,运行时会直接HardFault。nRF53和nRF91使用更现代的协议栈组织方式,网络核固件与应用核固件分别烧录,但同样存在“协议栈区不可被应用擦除”的约束。
三、对烧录与测试的直接影响
第一,烧录地址必须与链接脚本一致。nRF Connect SDK中通过CONFIG_FLASH_LOAD_OFFSET或分区管理器定义应用偏移;Keil/IAR中通过IROM1起始地址设置。若烧录器把应用写到0x0000_0000而SoftDevice也在该处,二者互相覆盖,设备表现为无法广播或反复复位。
第二,校验策略要区分区域。生产测试通常只校验应用区与协议栈区的CRC,不校验FICR;UICR则按写入值逐字比对。若把UICR纳入全片CRC,不同批次的校准值差异会导致误判。
第三,RAM不参与烧录,但影响测试项。例如协议栈需要保留一段RAM给射频中断和连接上下文,应用若把堆栈设得过大,运行时会出现内存分配失败。产测中可通过读取__StackTop或运行内存自检来间接判断。
# nRF52832 典型分区示例(S132 v7.2.0)
0x00000000 - 0x00025FFF SoftDevice (152 KB)
0x00026000 - 0x0003FFFF 应用程序 (104 KB)
0x00040000 - 0x0007FFFF Bootloader / DFU / UICR 预留
0x10001000 - 0x100010FF UICR (256 B)
0x10000000 - 0x100000FF FICR (256 B)
四、启动流程与存储区域的对应关系
上电后,CPU先从0x0000_0000读取初始栈指针,再从0x0000_0004读取复位向量。若该处是SoftDevice,则先由SoftDevice初始化射频与时钟,再跳转到应用复位向量;若使用Bootloader,则Bootloader先判断DFU条件,再决定是否跳转应用。UICR中的NRF_BOOTLOADERADDR决定Bootloader起始地址,写错会导致启动直接进入DFU或死循环。FICR中的DEVICEID和INFO_PART则用于识别芯片型号与容量,自动化烧录脚本常据此选择对应固件。
五、生产烧录中的关键检查点
基于上述结构,自动化烧录脚本至少应完成以下判断:读取FICR确认芯片型号与Flash容量,避免把512 KB固件烧进256 KB器件;读取UICR中的Bootloader地址,确认与待烧录Bootloader一致;烧录后分别校验SoftDevice区、应用区、UICR区的CRC或逐字比对;对已校准板卡,禁止无差别全片擦除。nRF91还需额外关注安全域与调制解调器固件分区,其烧录顺序和签名校验要求比nRF52更严格。
总结来看,nRF芯片的存储架构不是简单的“Flash+RAM”,而是由Flash主区、协议栈区、UICR、FICR共同构成的分层体系。烧录地址、擦除范围、校验策略、启动跳转都直接受这些区域边界约束。把这张存储地图建立清楚,后续的自动化烧录脚本、产测工位配置和故障排查才有可靠依据。