笔者来介绍一下NXP 双core板子 ,新系列的mcxn94
1、MCX 新系列介绍
恩智浦 MCU 系列产品包括 Kinetis 、LPC 系列,以及 i.MX RT 系列,现在又推出新系列产品 MCX 产品,包括四个系列,目前已经发布产品的是 MCX N 系列。
-
MCX N 系列,高性能微控制器,面向边缘安全智能微控制器,主要应用在物联网以及工业应用产品。
- 主频 150MHz 至 250MHz 512KB-2MB
- 广泛的外设,包括神经处理单元 (NPU) 和 DSP
- EdgeLock® 安全子系统
- 智能外设
-
MCX A 系列,主要针对优化成本和上市时间为主要考虑因素的产品。
- 主频 48 MHz - 180 MHz ,32KB-1MB
- 内置定时器,引脚数低,单引脚电源
- 适用于成本受限的应用
-
MCX W 系列,低功耗无线连接产品,支持多协议。
- 32MHz - 96MHz
- 多协议无线设备
- 低功耗BLE、Thread和Zigbee射频器件,面向工业物联网与Matter应用
- 片上集成减少了外部 BOM
-
MCX L 系列,针对超低功耗应用产品。
- 50Mhz - 100 MHz,可选 50% 倍频
- 极低的功耗和漏电
- 适用于具有低功耗要求的应用
-
MCX C 系列,针对超低功耗应用产品。
- List item 48MHz,32KB–256KB
- 易于使用的外设
- 面向入门级应用的高性价比的设计
笔者来看一下MCXN947的框图,如下图所示,需要的组件直接看下图
- CPU0和CPU1 都是Cortexm33 内核,ARMv8-M架构,150MHZ,不过Core0的内核支持的外设组件更多,支持DSP、FPU、DSP、ETM和TrustZone, and coprocessor interface。
- 2MB的内部FLash 512KB的SRAM
- 支持系统组件、安全组件、Debug组件、通信组件、模拟组件和timers组件
2、MCXN94内存映射
MCXN994的内存如下图所述:
注意:上述空间安全和非安全的空间是重叠的。
-
0x0 - 0x001FFFFF:internal Flash 地址,2MB Size,分为两个bank,可配置,每个bank 是1MB,看上图可以看到,目前每个Program Flash均是1MB,N947是2MB,N946是1MB,可以看数据手册。
-
0x08000000 -0xFFFFFFF:FlexSPI 外设,可接Norflash,存放代码,最大128MB,与0x80000000 外设地址重叠
-
0x10000000 - 0x 101FFFFF:internal Flash 地址,2MB Size,分为两个bank,可配置,每个bank 是1MB,与上面0x0 重叠
-
0x13000000 - 1303FFFF: ROM Code的地址
-
0x14000000 - 0x14017FFF:RAMX,code bus总线上面,适合放code代码
-
0x18000000 - 0x1FFFFFFF:FlexSPI 外设,可接Norflash,存放代码,最大128MB,与0x90000000 外设地址重叠
-
0x20000000 0x20007FFF :RAMA - RAMH地址,RAM,可以用到存放core1的代码,以及一部分当中共享空间
- RAMA相对特殊,被分为4个bank,每个bank8K,可以在低功耗场景下作为retaintion for data,每个bank都是独立编程的电源控制 ,不支持ECC
- 其他bank都有独立的电源开关,可以根据需要进行开关,RAMG和RAMH作为ECC数据空间
下图为 RAM空间配置ECC的设置,
- 可以看到RAMX 和RAMB 使用RAMH进行ECC数据空间,默认这两块校验是开着的,所以RAMH无法作为数据访问
- RAMC、D、E、F使用RAMG作为ECC数据校验
- RAMA 没有ECC数据校验
下图分别为core0和core1的内存空间分布:
Flash:768KB的FLash
RAM0:304KB的RAM空间
RAM1:104KB的RAM空间,用来存放core1的代码
RAM3:共享空间代码
cache部分:
- 由memory map地址上面 可以看到地址的cache 部分,Flash部分才有Cache,RAM部分均不被cache
- 分为两种cache,一种是LPCAC,低功耗的cahce,针对所有的flash地址(包括内部flash + flex spi flash),大小为16KB,SYSCON LPCAC Control (LPCAC_CTRL) register可以配置本cache,如下图第一张图
- 一种是CACHE64,只针对FlexSPI的地址范围,大小为16KB, CACHE64_POLSE寄存器可以配置cache属性,如下图第二种图
CPU型号对应的外设资源如下图所示:
3、mcxn94 启动方式
启动方式就两种:内部Flash Boot,ISP Boot。通过ISPMODE(P06) 引脚决定。
- 从flash 启动会寻找有效Image,如果使能恢复Image Flash,会从恢复ImageFlash里面找,如果还找不到,就进入ISP 模式
- 从ISP Boot,可以UART/IIC/SPI/USB支持下载代码
ISP 下载时,配置引脚可以决定下载方式,也可以禁止ISP模式,
3.1 boot device
boot device:从内部flash boot,外部Flash FlexSPI NorFlash boot(偏移是0x1000),SPI Flash Nor Recovery Boot,第二个bootloader Boot。
基于BOOT SRC可以决定是从内部flash还是外部Flash boot。
- 内部flash boot
- 外部 FlexSPI Flashboot
- SPI 1bit Nor 恢复boot
- 第二个bootloade rboot
3.2 Internal Flash Boot
内部flash启动时,需要关注Image header情况,NXP利用了中断向量表里面得空闲位置,然后做了一些厂商自定义得操作。
- CM4 得中断向量表,第一个SP指针,第二个是入口函数,流程中会校验SP的合法性,比如属于RAM的地址。
- 0x20、24、28和0x34是空闲位置,做了自定义得操作
- 0x24 用来表示当前的Image 长度,包括签名的长度,如果Load 到RAM上面执行的化,才有长度信息
- 0x28 ImageType,以及Image version信息
- 0x28 签名类型,则是证书头的偏移位置,如果是CRC签名类型,则是crc校验值
- 0x34 指明XIP类型,或者如果是load 到RAM执行,则是Image 执行地址。
内部Flash的boot流程如下图所示:
- 支持双ImageBoot,根据Image Header在0x24为处理版本来决定
- 检测Image list信息,FLASH_REMAP_SIZE指明了第二个image的size,如果size为0,则不存在多个image
- run bootloader指明了 boot image,如果是,则进行指定的image index进行
- 如果不是,之前是否boot 失败,如果不是,则image index为0
- 如果是,是否之前的image index为1,如果,是,则image boot失败
- 如果是,则image index为1,继续进行image 流程
- 判断image 是否存在,如果不存在boot 失败,返回主boot 流程
- 如果存在,则加载image header到ram空间,是否是安全 boot被使能,
- 如果是,进行安全boot流程
- 如果不是,则检查image type,如果是非XIP image,则需要copy image到目的ram地址
- 如果是crc image,则进行crc check,check有效,且SP PC有效,则跳转到用户程序
- 如果PC和SP无效,第二个image存在,且当前是第一个image,则设置boot失败,触发系统复位,再进行一次boot流程
- 如果是安全boot,使用ECDSA 安全算法进行授权验证,
- 如果image授权不成功,则判断是否有第二个image,然后进行下一次boot流程
- 如果授权成功,进行image CMAC更新流程
- 然后判断SP 和PC是否有效,如果有效,判断 TZM 数据是否存在,如果存在,执行TZM 数据配置
- 如果不存在,则直接跳转app。
通过设置FLASH_REMAP_SIZE可以产生双Image 流程操作。
- 如果设置FLASH_REMAP_SIZE,则0地址被映射到bank1的地址,然后boot rom 可以进行boot,
- 通过CMPA 或者eFUSE进行设置FLASH_REMAP_SIZE
3.3 external Flash Boot
外部Flash从FlexSPi Flashboot,需要在0x400 有FCB信息,512Byte。
boot流程如下: