只读分享解决方案文档原理方案设计📅 2026-10-14🔖 Rev 1.0⏳ 还有3日到期
🔧解决方案&应用市场分析 -> 原理方案设计 -> 主芯片方案调试开发 -> 新唐Nuvoton_开发指南

新唐Nuvoton_开发指南

同系列 · 原理方案设计
扫码打开本页
微信扫码

新唐 Nuvoton 开发指南

编制日期 2026-10-14 | 版本号 Rev 1.0

从 8051 存量项目的维护,到 Cortex-M0 / M0+ / M4F / ARM9 全线的开发、下载、调试与量产 —— 一份把「第一次上手会踩的坑」全部前置的工程手册

5 条线
8051 / M0 / M0+ / M4F / ARM9
再加Cortex-M23 与多款触控加密特色机型
16 MHz
N76E003 · 1T8051 最高主频
18 KB Flash · 1 KB SRAM · 12 位 8 通道 ADC
72 MHz
M031 · Cortex-M0+
1.8 V 起 · 2 MSPS ADC · 掉电 12 μA
192 MHz
M480 · Cortex-M4F
安全启动 + 硬件加密 + 10/100M 以太网
300 MHz
NUC980 · ARM926EJ-S
带 MMU 与 Cache,可跑 Linux
2 线
调试口只需 SWDIO / SWCLK
8051 侧走 ICE_DAT / ICE_CLK

结论:新唐最大的特点不是某颗芯片特别强,而是它把「8 位 8051」和「Arm Cortex 全家桶」放在同一个货架上, 并且两边都有从 2 KB SRAM 到 300 MHz MPU 的完整梯度。所以新唐项目的典型形态是存量 8051 继续维护、新设计直接上 Cortex-M。 真正让人卡住的从来不是代码,而是三件小事:Nu-Link 装错固件导致调不了目标内核、下载进了错误的芯片型号、 8051 的 SFR 与 Cortex 的寄存器模型完全不同却长得很像。本文按「装环境 → 建工程 → 编译 → 下载 → 调试 → 量产」的真实流水线组织, 每一节都给出可对照的表格、以及该节最常踩的坑。

报告总结

新唐官网把资料拆得很细:产品页讲定位与选型、Data Sheet 讲电气与引脚、TRM 讲寄存器、User Manual 讲模块用法, 而工具链散落在官网工具页与 GitHub 的 OpenNuvoton/Nuvoton_Tools 仓库里。网上的中文教程绝大多数停留在 「装 IDE → 新建工程 → 点编译 → 点下载」这一步,一旦遇到连不上目标、型号不匹配、读保护、8051 事件跑飞就无解。本文档做了三件官方分散文档没有做的事:

  • 把「内核选择」摆在最前面:新唐同时有 5 条内核线,选错线的成本远高于选错型号,第 2、3 章把这条讲透。
  • 把坑写在坑发生的地方:不单独罗列「常见问题」,而是在讲每个环节时就把该环节的失效现象、原因、处置一起给出。
  • 明确标注不确定项:凡是涉及具体数值的地方,能核实的给出数值并说明来源;把握不足的写成定性描述并指向官方手册章节,不编造寄存器地址与位域。

读者路径

本文档共 19 章 + 4 个附录,按「先跑通、再理解」的顺序组织:

  • 只想尽快跑通第一个程序:第 4 章(装环境)→ 第 5 章(建工程点灯)→ 第 7 章(下载)→ 第 19 章(核查清单),四章足够。
  • 老8051 项目要继续维护:第 2.2 节与第 3 章(8051 架构)→ 第 9 章(端口与 SFR)→ 第 10 章(8051 中断)→ 第 11 章(WDT 与 IRC)。
  • 做产品开发 / 新选型:第 2 章选型 → 第 3 章内核差异 → 第 6 章工程结构 → 第 16 章硬件设计。
  • 调不通、报错:直接翻第 18 章故障排查速查表,按现象分层定位。
  • 要写驱动:第 9 章 GPIO → 第 10 章中断 → 第 11 章时钟 → 第 12 章外设 → 第 13 章定时器与 RTC。
  • 从 STC 或 STM32 切过来:第 17 章是专门的移植对照,先看这一章能省两三天。
  • 做电池产品:第 15 章低功耗,重点看「唤醒后必须重配时钟」这件事。
  • 要量产:第 7.6~7.7 节(并发烧与读保护)→ 附录 B(Flash 与配置字)。

1 · 文档导读与阅读路径

这一章说明本文档的边界:覆盖什么、不覆盖什么,以及为什么把内容按「流水线」而不是按「功能模块」组织。

1.1 覆盖范围

本文档覆盖从拿到一块新唐最小系统板,到固件跑起来、能在断点处停下来、并能量产烧录的完整链路:

  • 家族与选型:8051 线(N76 / N79 / W77 / W78 / MG51 / MS51 / ML51 / ML56)、Cortex-M0 线(NUC100 / NUC200 / M051)、Cortex-M0+ 线(M031 / M032)、Cortex-M4F 线(M451~M460 / M480)、ARM9 MPU 线(N9H / NUC970 / NUC980)与 Cortex-M23 线(M251 / M258)的定位对照。
  • 内核:增强型 8051 的 1T 结构与四个存储空间、位寻址 SFR、Cortex-M0/M0+/M4F 的架构分界、NVIC 与 8051 优先级模型的差异、ARM926EJ-S 与 Cortex 的定位差别。
  • 开发环境:NuEclipse(Eclipse + GNU GCC)、Keil MDK + Nuvoton DFP、IAR EWARM 的安装与配置,Nu-Link 驱动与固件选择。
  • 工程与构建:BSP 目录结构、startup 与向量表、scatter 链接脚本、8051 的 code/size/idata/xdata 内存模型、编译选项、体积预算。
  • 下载与量产:Nu-Link2 / Nu-Link2-Pro / Nu-Link3-Pro 硬件形态与接线、NuLink2FW 与 DAPLink 固件的取舍、ICP / ISP / IAP 三条自举通道、Nu-Link-Gang 一对四并发烧、读保护与去保护。
  • 外设:端口与外部中断、中断系统、时钟/复位/电源、UART / SPI / I2C / ADC / PWM / PDMA、定时器 / RTC / 看门狗 / LVR、USB 与特色外设、低功耗。
  • 硬件与迁移:最小系统电路要点、从 STC 8051 与 STM32 迁移的改动清单、量产工具链替换验证、批量排障。

1.2 不覆盖什么

以下内容超出本文档范围,需要时请查阅对应官方资料:

  • 寄存器位域全集:新唐 TRM 动辄四五百页,本文档只给关键模块的常用寄存器与配置思路,写代码时仍需对着目标芯片的 TRM 核一遍。
  • 每一款封装的完整管脚定义:本文档只给最常用封装的关键引脚(调试、自举、电源、USB),完整管脚表请查对应 Data Sheet。
  • 安全认证与合规流程:IEC-60730 Class B STL 的具体测试项、UL / IEC 认证的送检流程、EMC 整改的量化指标。
  • 加密算法的实现细节:M480 的 ECC / AES / SHA 硬件加速器的寄存器序列、密钥库的写入与生命周期管理,属于安全模块文档范畴。
  • Linux BSP 与驱动移植:ARM9 线的设备树、u-boot / Linux 内核移植、NUC980 的驱动开发,属于 BSP 包自带的文档范畴。
  • 音频算法与面板协议:ISD 语音芯片的录音算法、面板驱动 IC 的时序生成,本文只覆盖到「这颗 MCU 有哪些音频 / 显示接口可用」。

1.3 命名约定与术语

新唐的型号命名分两条完全不同的路子,必须先分清你在哪条线上:

字段8051 线Cortex-M / ARM9 线
系列前缀N76 / N79 / W77 / W78 / W79 / MG51 / MS51 / ML51 / ML54 / ML56 / MINI51NUC1xx / NUC2xx / M0xx / M2xx / M4xx / N9H / KM1M4
系列号含义同前缀下按资源递减:N76E003(18 KB / 低管脚)→ N76E616(带 LCD)→ N76E885(25 MHz)数字即产品线:031 低压高速 ADC、051 宽压基础、480 高性能安全、980 ARM9 网关
封装代码第 10~12 位,如 T20 / Q20 / D28 / AU / AE同上但编码不同,必须查该系列选型表
温度等级多数 8051 型号 -40 ~ 105 ℃(工业级是标配,不是选配)同样以 -40 ~ 105 ℃ 为主,少数料号到 85 ℃
两条线的封装代码不能互相套用

8051 线里 AT20 表示 TSSOP20、AQ20 表示 QFN20; 而 Cortex-M 线里 AE 结尾基本是 LQFP、AC 结尾多是 QFN。两套编码规则各自独立, 在下单、对封装库、写 PCB 封装之前,一定对照该系列的选型表逐字核对,不要跨线套用。

本文档使用的几个术语:

术语含义
1T / 4T / 6T / 12T8051 的机器周期数。标准 8051 是 12T(一个取指周期拆12 个时钟);新唐增强型多为 1T 或 2T,同样主频下指令快得多
NuMicro新唐 Cortex-M / ARM9 产品的注册商标,出现在 TRM 与 BSP 的文件名里
TRMTechnical Reference Manual,技术参考手册,即「寄存器手册」,对应本文档引用的 RM 角色
APROM / LDROMAPROM 是跑用户应用程序的 Flash;LDROM 是放 ISP Loader 的独立小Flash 区,两者物理分开
Data Flash与程序区共用擦除单元、独立寻址的掉电存储区,参数与校准数据放这里
ICEIn-Circuit Emulator,新唐对「调试接口」的旧称;8051 侧引脚叫 ICE_DAT / ICE_CLK,与 Cortex 的 SWDIO / SWCLK 是同一组物理功能
PDMAPeripheral DMA,新唐对片上 DMA 控制器的叫法
Nuvoton Studio并不存在这个产品。新唐官方开源 IDE 是 NuEclipse(Eclipse + GNU GCC);商业 IDE 支持 Keil MDK 与 IAR EWARM

1.4 事实来源与免责

本文档的数值型信息来自新唐官方资料与产品页,主要来源如下:

资料提供的内容获取位置
产品页(8bit-8051 / Cortex-M0 / M0+ / M4 / ARM9)各系列的资源清单、特性表、选型表nuvoton.com 或 nuvoton.com.cn 对应系列页
各系列 Data Sheet电气参数、引脚定义、封装、时钟源、功耗档位产品页的 Datasheet 栏(文件名形如 N76E003_..._DS、M480_..._DS)
各系列 TRM / User Manual寄存器定义、外设模块行为、时钟树、Flash 布局产品页的 TRM / Technical Reference Manual 栏
M480 Product BriefM480 六大子系的能力矩阵与外设清单nuvoton.com M480 系列资源页
OpenNuvoton/Nuvoton_Tools 仓库IDE / 编程器 / 驱动 / 开源工具清单与固件说明GitHub,含Nu-Link 固件与 NU_CFG.TXT 说明
NuMaker 评估板用户手册板级电路、Arduino 兼容接口、外设映射评估板页面与 User Manual 下载
关于精确数值的处理原则

本文档对数值采取三种写法,请按需信任:
① 结构性数值(Flash 容量档位、主频档位、ADC 位数 / 采样率、外设通道数、电压范围、温度范围)—— 直接给官网产品页与 Datasheet 的典型值,并注明出处。
② 寄存器与位域——只写名称、所属模块、配置顺序与判读方法,不写地址、不写位序; 因为同一模块在不同系列 / 不同 Flash 容量档位下的偏移与位宽都可能不同,写死一个数比不写更危险。
③ 把握不足的内容——写成定性描述并指向对应 TRM 章节,例如「USB 时钟须精确 48 MHz,具体分频路径见该系列 TRM 的时钟章节」。

正式立项前,请到目标料号的 Datasheet 与 TRM 复核,并确认 PCN / 停产状态。新唐同样会修订手册与改料号, 本文档引用的数值只在你读到的这一版文档里成立。

Nuvoton 开发的五段式流水线 —— 每一段都要有一个可验收的现象上一段没配对,下一段的症状一定伪装成别的东西① 硬件NuMaker / 最小系统SWD 或 ICE 接通验收标志 ↓② 环境NuEclipse / Keil空工程能编译验收标志 ↓③ 构建链接脚本与 BSP产出 .elf / .hex验收标志 ↓④ 下载Nu-Link2 / ISP提示下载成功验收标志 ↓⑤ 调试断点 / 串口打印能停在 main()验收标志 ↓本指南的写法:每一节都给「症状 → 原因 → 处置」三元组第 4~8 章走完流水线的中段;第 9~14 章是跑起来之后的外设细节;第 16~19 章是硬件、移植与排障。特别提醒:新唐同时在售 8051 与 Cortex-M 两套完全不同的芯片族,「型号选错工具链」是第一号故障源。
图 1 · Nuvoton 开发的五段式流水线与本文档的组织逻辑

2 · 全家族全景与选型

新唐不是一个系列,而是一整张货架。这一章先把货架摆在桌子上,讲清每条线为什么存在,再给选型路径。

2.1 一句话认识新唐 Nuvoton

新唐(Nuvoton,nuvoton.com / nuvoton.com.cn)成立于 2008 年,由华邦电子逻辑 IC 事业分割而来,2010 年在台湾证券交易所上市。 它的 MCU 业务有两个明显的性格特征,理解这两点就理解了整个货架:

  • 它把「8 位 8051」当成长期在营的核心产品,而不是过渡产品。 N76 / N79 / W77 / W78 / MG51 / MS51 / ML51 / ML56 这条线上有上百个在售料号, 覆盖家电、门禁、小家电、电机、照明、电表、充电器等场景,且普遍带 -40 ~ 105 ℃ 工业温度与可配Data Flash。 亚太地区存量项目里,这批8051 的装机量远超很多人的印象。
  • 它的 Arm 线是「全档位覆盖」,而不是只做高端。 从 48 MHz 的 M0+ 到 192 MHz 带硬件加密与以太网的 M480,再到 300 MHz 带 MMU 的 ARM9 MPU,中间没有断档。

此外新唐有一条常被忽略但很实用的家底:ISD 语音芯片与音频 Codec、Nu-Link 全系调试器与量产编程器、 以及电容触控与 LCD COM/SEG 驱动的长期积累。做语音门锁、家电面板、电表这类产品时,这些是能把BOM 砍掉一块的能力。

2.2 8051 阵营:N76 / N79 / W78 / W25

8051 线是新唐存量最大的一条,按内核代数分三档。这三档的寄存器模型基本一致,迁移成本主要在SFR 名称与新增外设上。

档位代表型号内核最高主频Flash / SRAM特色外设封装
1T 低管脚N76E0031T 805116 MHz18 KB / 1 KB12 位 8 通道 ADC(500 kSPS)、6 通道 PWM 带死区、2×UART、1×SPI(8 MHz)、1×I2C(400 kHz)、10 kHz 低速 RCTSSOP20 / QFN20
1T 低管脚(含 LCD)N76E6161T 805116 MHz18 KB / 512 B10 位 8 通道 ADC(150 kSPS)、LCD 驱动(3×32 / 4×32 / 6×30 COM-SEG)、2×UART、1×I2C、11.059 MHz 内建 RCLQFP48 / PQFP44
1T 中速N76E8851T 805122 MHz 内建 RC18 KB / 512 B8 档BOR、8×12 位 + 10×10 位双 ADCTSSOP28 / TSSOP20
超小容量N79E822 ~ N79E8251T 80516 MHz 内建 RC2 / 4 / 8 / 16 KB / 256 B基础 UART / SPI / I2C / PWM,功能极简,面向成本极限场景SOP20 / PDIP20
标准兼容W78E058D / W78E516D / W77 系列4T / 6T / 12T 805140 MHz32 / 64 / 128 KB / 至多 2 KB管脚兼容传统 12T 8051、10 位 8 通道 ADC(96 kSPS)、1×SPI(1.25 MHz)、2×I2C(400 kHz)、2×UART、ISPDIP40 / PLCC44 / LQFP48 / PQFP44
早期兼容W925 系列(如 W925E240FG)80513.6 MHz256 KB / 8 KB已停产(Obsolete / EOL),仅供存量维修参考,不建议新设计选用QFP100
工业 / 触控MS51 / MG51 / ML51 / ML561T 8051 衍生24 MHz 档8 ~ 128 KB 档面向智能家电,通过 IEC-60730 Class B STL 认证;ML56 带电容触控按键;ML51 为低功耗系列TSSOP20 ~ LQFP64
关于「W25」这个说法

民间与部分旧资料里把新唐 8051 里的 W77 / W78 / W79 / W925 一族笼统叫作「W25 系列」, 这不是一个官方系列名。官方选型页上的分区是 Low Pin Count 8051 Series(低管脚)、 Standard 8051 Series(标准兼容)、Industrial 8051 Series(工业,MS51)、 Low Power(ML51 / ML54 / ML56)、MG51 等。 下单与查手册请以官方选型页的系列归属为准,不要按「W25」这个标签去找资料。

选8051 线时真正要看的三件事:

  • 内核代数:1T 与 12T 在同样的主频下性能差一个量级。存量 W78E516D(12T / 40 MHz)迁到 N76E003(1T / 16 MHz), 实际算力是上升的,不要被主频数字变小误导。
  • ADC 分辨率与采样率:N76E003 是 12 位 500 kSPS,N76E616 是 10 位 150 kSPS,W78E 是 10 位 96 kSPS。 电表、传感器采集类项目必须看这一项。
  • 要不要 LCD / 触控:带 COM-SEG LCD 驱动与电容触控的型号(N76E616 / ML56)能省掉一颗驱动芯片。

2.3 Cortex-M0 阵营:NUC100 / NUC200 / M051

M0 线是新唐「用 32 位替代 8 位」的主力,价格与 8051 接近,但资源明显上一个台阶。

型号内核最高主频Flash / SRAM供电关键外设封装
NUC100Cortex-M050 MHz32 / 64 / 128 KB / 8 / 16 KB2.5 ~ 5.5 V12 位 8 通道 ADC(760 kSPS)、≤8 通道 PWM、≤4×SPI(36 MHz)、≤2×I2C、≤3×UART、≤3×ISO-7816-3、EBI、PDMA、±1 ℃ 温度传感器LQFP48 / LQFP64 / LQFP100
NUC200Cortex-M050 MHz32 / 64 / 128 KB / 8 / 16 KB2.5 ~ 5.5 V与 NUC100 同架构,Advanced Line;4 KB ISP Loader ROM、512 字节页擦除、9 通道 PDMA、CRC 四种多项式(CCITT / 8 / 16 / 32)LQFP48 / LQFP64 / LQFP100
NUC220Cortex-M050 MHz32 / 64 / 128 KB / 8 / 16 KB2.5 ~ 5.5 VUSB 2.0 Full-Speed Device(片上收发器)、6 个可配端点、512 B USB 缓冲、3 ms 自动挂起、远程唤醒;不需要外置晶振即可做 DeviceLQFP48 / LQFP64 / LQFP100
M051Cortex-M050 MHz32 / 64 KB / 4 KB2.5 ~ 5.5 V8 通道 12 位 ADC、8 通道 16 位 PWM 带死区、2×SPI(36 MHz)、2×I2C、2×UART、EBI、4 档 BOD、ISP/ICP/IAPLQFP48 / QFN33
NUC200 与 STM32F0 不是一回事

虽然都是 Cortex-M0 + 类似外设命名,但寄存器基址、位域排列、库函数前缀都不一样。 新唐 BSP 的函数前缀是 NU_ / GPIO_(挂在 NuMicro 头文件下), 而 STM32 是 __HAL_。从 STM32 迁过来最省事的做法是直接拿官方 BSP 的示例工程改,而不是逐个函数替换。 详见第 17.4 节。

2.4 Cortex-M0+ 阵营:M031 / M032

M031 是新唐近年主推的低压高速线,特色非常鲜明:1.8 V 起跑、支持 5 V 容差 I/O、ADC 采样率 2 MSPS、掉电 12 μA。

特性M031(M0+)M032(M0+)
内核 / 主频Cortex-M0(部分资料标注 M0+,下单前请以官网系列页为准),48 / 72 MHz同 M031
供电1.8 V ~ 3.6 V,GIO 支持 5 V 容差同 M031
Flash / SRAM16 KB ~ 512 KB / 2 KB ~ 96 KB同 M031
ADC最多 16 通道 12 位 2 MSPS同M031
PWM96 / 144 MHz 时钟源,最多 24 路 16 位 PWM,支持捕获与 PDMA同 M031
通信最多 10 组 UART、4 组 SPI(主机 24 MHz / 从机 16 MHz)、4 组 I2C、1-wire UART、USCI(可配 UART / SPI / I2C)、1 组 Quad SPI、EBI(最大 1 MB 地址空间)同 M031
低功耗正常运行 180 μA/MHz,掉电 12 μA;唤醒源含 ACMP / GPIO / WDT / TIMER / UART / USCI / I2C / SPI / WWDT / ADC / PDMA / PWM / USBD同 M031
安全96 位 UID、128 位 UCID、512 B / 2 KB SPROM同 M031
USB无无晶振 USB 2.0 Full-Speed Device(在 M031 基础上增强)
OTAM031xI 系列支持双 Bank 固件升级同 M031xI
封装TSSOP20 / TSSOP28 / QFN33 / LQFP48 / LQFP64 / LQFP128,同封装不同型号管脚兼容同 M031
M031 的两个杀手级特性

① 2 MSPS 的 12 位 ADC——这是电机控制、传感器融合类应用的核心指标, 同价位里很难见到;官方还提供 PWM 触发 ADC、PWM 周期/时间触发 ADC、以及 PDMA 直接把脉宽计数值搬进 SRAM(最小可测 0.5 μs 脉宽)。
② 掉电模式下 UART 还能收——内部 38.4 kHz LIRC 支撑 9600 bps,配合 16 字节 FIFO,掉电中最多可收 15 字节再唤醒。 做「待机时监听上位机命令」的产品时这一条极其有用,详见第 15.5 节。

2.5 Cortex-M4 阵营:M480 与 M460 旗舰

M4 线是Nuvoton 的高性能主力。M480 有六个子系列,最值得关注的差异在接口组合而不是主频:

子系列USB FSUSB HSCAN 2.0B硬件加密以太网定位
M481—————基础线:高速 UART / SPI / I2C / PWM,数据采集
M482√————USB FS OTG(片上 PHY)
M483√√√——CAN + 双 USB,车载与工控
M484√√———USB HS OTG + FS OTG 双 PHY,USB 传感器数据集中器
M485√√—√—硬件加密 + TRNG,指纹模组 / 智能支付 / 安全 USB
M487√√√√√10/100M 以太网 MAC(RMII / MDC / MDIO),串口转以太网、工业 IoT 网关

M480 平台共同的硬指标(M48xIDAE 为例,官网 Product Brief):

  • 192 MHz Cortex-M4F(1.8 V ~ 3.3 V;1.62 V 时 160 MHz),内置 MPU、IEEE-754 单精度 FPU、DSP 指令扩展、单周期 32 位硬件乘法器。
  • Flash 至 2.5 MB(双Bank)、SRAM 至 160 KB(含 32 KB cache)、4 KB LDROM、8 KB KPROM(不可读,用于固件保护)、4 KB SPROM(IP 保护)、2~3 KB OTP。全部片上 Flash 支持 4 KB 页擦除。
  • 功耗:动态 175 / 130 μA/MHz(外设关断 / 动态功耗调频),待机可低至 1 μA,仅 RTC 保持时 1.2 μA。
  • 安全启动(Secure Boot):开机时校验 Flash 数字签名;硬件加密引擎支持 ECC-192/256、AES-128/192/256、DES / 3DES、SHA-160/224/256/384/512、HMAC、随机数发生器;最多 6 路防篡改检测引脚;96 位 UID + 128 位 UCID。
  • BOD 八档(3.0 / 2.8 / 2.6 / 2.4 / 2.2 / 2.0 / 1.8 / 1.6 V,可选中断或复位)+ LVR 1.5 V;内置 1 ℃ 分辨率温度传感器。
  • 外设:最多 16 通道 12 位 5 MSPS SAR ADC、2 路 12 位 1 MSPS DAC、2 路轨到轨比较器、最多 3 个运放、QSPI(支持 XIP)、SPI Flash 接口(支持四线与 XIP)、最多 3 路 I2C(SMBus / PMBus)、最多 6 路 UART(LIN / IrDA)、最多 3 路 ISO-7816-3、最多 4 路 SPI/I2S、2 路 SD Host、16 通道 PDMA、80 字节电池保持备份寄存器。
  • M480 目录里有 Cortex-M7 吗?没有。新唐的高性能档由 M4F(192 MHz) 与 ARM9(300 MHz) 承担; 真要更高性能、更强的生态(大量中间件、RTOS 现成移植),通常直接上ARM9 或换别家M7。

与之并列的 M460 线(M463 / M467)把主频提到 200 MHz, Flash 至 1024 KB 双Bank、SRAM 至 512 KB,M467 集成 10/100M 以太网、4 路 CAN FD、硬件加密、TRNG、Key Store、USB HS/FS OTG、HyperBus 接口与可编程音频 PLL —— 是工业网关、通信设备、数据中心方向的答案。

2.6 ARM9 MPU 阵营:N9H / N9K 与 NUC970 / NUC980

这条线严格说是 MPU(微处理器)而不是 MCU:ARM926EJ-S 内核,自带 MMU 与 Cache,可以跑 Linux。

型号内核最高主频存储关键资源典型用途
N9H20 / N9H30ARM926EJ-S300 MHz 档MCP 封装可内置 DRAM(降低硬件设计难度)、支持 DDR210/100M 以太网 MAC、高速 USB(Device / Host)、LCD 控制器、配套 emWin GUI 方案HMI 人机界面、面板控制、数据采集终端
NUC970ARM926EJ-S300 MHz 档内置 DRAM颗粒(MCP 封装)10/100M 以太网 MAC、USB、LCD、内置通讯加解密引擎工业自动化、通信设备、工业级 HMI 与 RTU
NUC980ARM926EJ-S300 MHz板级最高 64 MB DDR2、16 KB I-Cache + 16 KB D-Cache、MMU、16 KB 片内 SRAM、16.5 KB IBR 内部 Boot ROM10/100M 以太网 MAC、高速 USB(Device / HOST)、EBI、LCD、音频控制器、JTAG;IBR 支持从 USB / SPI NAND / SD / eMMC 启动IoT 网关、串口转以太网、Chili Board 预装 Linux 开发平台
「N9K」这个名字从哪来

新唐 ARM9 线里,N9H20 / N9H30 是 HMI 平台,NUC970 / NUC980 是 工业控制与IoT 网关平台, 工程圈里常把这一族统称为「N9K 系列」或「N9K 线」,指的是这批 ARM926EJ-S 处理器。 官方资料里并没有一个叫「N9K」的产品族页面,查资料请按 N9H / NUC97x / NUC98x 三个前缀去找。

2.7 触控、加密与安全特色机型

把「触控」「加密」「安规」这三件事单独拎出来,是因为它们是新唐相对通用 MCU 最容易做出差异的地方:

方向代表型号提供的能力省掉了什么
电容触控(8051)ML56 系列(Low Power Touch Key)多路电容式触控按键,内建 IIR 滤波与去抖、Trace Baseline 环境补偿,官方给出防水与抗噪参数集外挂触摸芯片与其外围RC 网络
触控与 LCD(M23)M254 / M256 / M258(Cortex-M23)COM/SEG LCD 驱动 + 电容式触控按键,低功耗LCD 与触摸两颗驱动芯片
8051 工业 / 安规MS51 / MG51 / ML51基于 8051,通过 IEC-60730 Class B 软件测试库(STL)认证自己写安全状态机与自检代码
硬件加密与安全启动M485 / M487 / M467ECC、AES、DES/3DES、SHA、HMAC、TRNG、Key Store、OTP / KPROM / SPROM、Secure Boot、最多 6 路防篡改引脚软件加密库与密钥保护方案
芯片级 IoT 安全M2354 系列(Cortex-M23)面向 IoT 安全规范的芯片级物理安全机制外挂安全芯片(如 SE)
超声 / 雷达 / 光模块专用KM1M4BF 系列面向毫米波雷达、高速光模块的 M4 内核型号外挂信号处理与高速接口芯片
「加密特色」不等于「已经安全」

硬件加密引擎解决的是运算速度与密钥不被软件读走两件事, 但它不替你解决:密钥从哪来(产线注入流程)、固件怎么签(签名私钥的管理)、 调试口怎么封(读保护与安全启动的配合)。这三件事是产品级的安全设计,不在本文档的寄存器层面能解决的范围, 第 16 章与附录 B 给出硬件与流程层面的配合点。

2.8 全家族规格速查表

下表把主流料线的核心资源拉平对比。数字取自官网产品页与 Product Brief 的特性清单;同一系列不同料号的差异以该系列选型表为准。

料线内核主频档Flash 档SRAM 档ADC供电范围温度
N76E0031T 805116 MHz18 KB1 KB12 位 / 8 通道 / 500 kSPS2.4 ~ 5.5 V-40 ~ 105 ℃
W78E516D12T 805140 MHz64 KB≤2 KB10 位 / 8 通道 / 96 kSPS2.4 ~ 5.5 V-40 ~ 85 ℃
NUC200Cortex-M050 MHz32 ~ 128 KB8 ~ 16 KB12 位 / 8 通道 / 760 kSPS2.5 ~ 5.5 V-40 ~ 85 ℃
NUC220Cortex-M050 MHz32 ~ 128 KB8 ~ 16 KB12 位 / 8 通道 / 760 kSPS2.5 ~ 5.5 V-40 ~ 85 ℃
M031 / M032Cortex-M0+48 / 72 MHz16 ~ 512 KB2 ~ 96 KB12 位 / 至 16 通道 / 2 MSPS1.8 ~ 3.6 V-40 ~ 105 ℃
M0516Cortex-M050 MHz32 ~ 64 KB4 KB12 位 / 至 8 通道2.5 ~ 5.5 V-40 ~ 85 ℃(DE 到 105 ℃)
M451 / M452Cortex-M4F72 MHz(144 MHz PWM)至 256 KB至 32 KB12 位 / 1 MSPS2.5 ~ 5.5 V 或 1.8 ~ 3.6 V-40 ~ 105 ℃
M471Cortex-M4F72 / 120 MHz64 ~ 512 KB32 ~ 64 KB12 位 / 1~2 MSPS2.5 ~ 5.5 V-40 ~ 105 ℃
M480(M481~M487)Cortex-M4F192 MHz至 2.5 MB 双 Bank至 160 KB12 位 / 至 16 通道 / 5 MSPS1.8 ~ 3.6 V(1.62 V 到 160 MHz)-40 ~ 105 ℃
M467Cortex-M4F200 MHz至 1024 KB 双 Bank至 512 KB12 位 / 5 MSPS ×31.7 ~ 3.6 V-40 ~ 85 / 105 ℃
NUC980ARM926EJ-S300 MHzIBR 16.5 KB片内 16 KB + 板级 DDR2—(以 MPU 集成外设为主)内核 1.8 V 级 / IO 3.3 V 级-40 ~ 85 ℃

2.9 料号怎么读

以 N76E003AT20 与 M031LD2AE 为例,拆解规则如下。两条线的编码规则不同,必须分别记:

字段8051 示例:N76E003AT20Cortex-M 示例:M031LD2AE
系列前缀N76 —— 低管脚 1T 8051M031 —— Cortex-M0+ 低压高速线
资源代号E003 —— 该系列里 Flash / SRAM / ADC 的具体配置档(无单独字段,配置档编在后续字母里)
引脚 / 封装代码A —— 本系列内该封装档的编号;T20 = TSSOP20,Q20 = QFN20LD2 —— L 表示 LQFP、D2 表示 48 引脚档;不能跨线套用
封装 / 等级T20 的 T = TSSOP、20 = 20 引脚AE —— A 常指 LQFP / QFN 族,E 指该系列的温度/配置档
——另有 AN(LQFP)、AC(QFN)等后缀,以选型表为准

2.10 选型决策路径

把上面这些收敛成六个问题的决策树,从上往下问,命中即停:

新唐Nuvoton 家族地图 —— 按内核与定位划分的五条线同一条线内主管脚与资源递进;跨线换核等于换平台8051 兼容线(存量最大)N76 / N79 / W77 / W78MG51 / MS51 / ML51 / ML561T~12T 8051 · 16~40 MHz2.4~5.5 V · -40 ~ 105 ℃8~128 KB Flash · 可配 Data FlashISP / ICP / IAP · TSSOP20 ~ LQFP64Cortex-M0 线NUC100 / NUC200 / NUC220M051 / M029 / M030最高 50~72 MHz2.5~5.5 V 或 1.8~3.6 V12 位 760 kSPS ~ 2 MSPS ADCUSB FS · EBI · ISO-7816 · PDMACortex-M0+ 线M031 / M032低压高速 + 无晶振 USB最高 48 / 72 MHz · 1.8~3.6 V支持 5 V 容差 I/O2 MSPS 12 位 ADC · 96/144 MHz PWM掉电 12 μA · UART 掉电唤醒Cortex-M4F 线M451 / M452 / M453 / M471 / M480 六大子系 / M460M480:192 MHz · Flash 至 2.5 MB · SRAM 至 160 KB安全启动 + 硬件加密 + TRNG + OTP10/100M 以太网 RMII · USB HS/FS OTG · QSPI XIPARM9 MPU 线N9H20 / N9H30 / NUC970 / NUC980(常被称作 N9K 线)ARM926EJ-S · 最高 300 MHz · 带 MMU 与 Cache可跑 Linux / FreeRTOS · MCP 封装内置 DRAM10/100M 以太网 MAC · USB Device/Host · LCD选型第一刀先砍内核:只要 Keil / IAR 现成驱动 → Cortex-M 或 ARM9;只维护老设备 → 8051 线。第二刀砍连接需求:USB → NUC220 / M032 / M48x;以太网→ M487 / M467 / NUC980;家电安规 → MS51 / ML56 / M258。
图 2 · Nuvoton 家族地图:五条产品线的内核、主频与定位

来源:nuvoton.com 产品页 + M480 Product Brief

Nuvoton 选型决策路径 —— 六个问题收敛到一颗料每个判断节点的右侧是落选型,不满足则继续向下走① 要跑 Linux 或图形界面?判定条件是 → N9H30 / NUC980(ARM926EJ-S,带 MMU 与Cache)② 要以太网或 USB HS?判定条件是 → M487(10/100M)或 M484(USB HS OTG)③ 要硬件加密 / 安全启动?判定条件是 → M485 或 M487(ECC / AES / SHA / TRNG / OTP)④ 面板 / 家电 / 需要安规认证?判定条件是 → MS51 / ML56(8051,IEC-60730 Class B STL)⑤ 只是维护老设备 / 极低成本?判定条件是 → N76E003(N79 / N76 系列)存量料,工具链最成熟⑥ 通用控制,成本与性能均衡判定条件M031(M0+ / 1.8 V / 2 MSPS ADC)或 M051(2.5~5.5 V 宽压)终点:以上皆不满足时的默认选型
图 3 · Nuvoton 选型决策路径

补充四条不成文经验:

  • 老设备维护优先用同内核的新唐料:STC 的 STC8 / STC15 体系迁移到新唐 8051(N76 / MG51 / MS51), 比迁到 Cortex-M 简单得多——至少 SFR 模型与 Keil C51 工具链都不变。详见第 17 章。
  • 新设计除非有硬性理由,不要选 12T 内核。W78E/W77E 这类 12T 兼容料的意义是管脚兼容与替换,不是性能。
  • 做 USB 就不要在 M480 里纠结 FS 与 HS:需要 HS 就直接上 M484/M483/M487(片上 PHY,省一颗 USB 模拟芯片); 只需要 FS 就 M032 或 NUC220(无晶振方案省一颗晶振)。
  • 面板类产品的关键是「有没有 COM/SEG 驱动」和「有没有 ST L」,不是主频。

2.11 按应用域选型速查

应用域首选料备选料选它的决定性理由
智能门锁 / 指纹模组M485M487 / N76E003硬件加密引擎 + TRNG + OTP,指纹算法与密钥保护在同一颗里
小家电 / 白色家电MS51 / ML51ML56 / M258IEC-60730 Class B STL 已认证,省掉自写安全状态机
温控器 / 温控屏N76E616 / ML56M254 / M256内置 COM/SEG LCD 驱动与电容触控
电表 / 采集终端M031NUC200 / M4802 MSPS ADC + SPROM 掉电保存 + 宽压
电机 / 变频M031(低压)或 M460M451 / M48024 路 96/144 MHz PWM + PWM 触发 ADC + 脉宽计数值 PDMA 直搬
USB 转串口 / 读卡器NUC220M032 / M452片上 USB 收发器 + 无晶振 Device 模式
串口转以太网 / IoT 网关M487NUC980 / M46710/100M RMII + 硬件加密;需要 Linux 时上 NUC980
HMI / 上位机面板N9H30 / NUC970NUC980ARM926EJ + MMU + emWin 生态
电池供电传感节点M031 / M251ML51 / M031掉电 12 μA + UART 掉电唤醒 + 五种功率模式(M251)
老 STC 项目改造MG51 / N76E003MS51Keil C51 工具链不变、SFR 模型相近、货源与工业温度稳定
选型时最容易忽略的一条

先确认停产与供货状态,再谈性能。例如 W925 系列在主流分销渠道已标Obsolete / EOL, N79E822 这类超小容量料的生命周期也远短于 N76E003。 新唐的 8051 线里,同封装不同型号的管脚兼容是常态 —— 这意味着你可以先用主力料打通设计,量产前再按供货情况平替, 但必须逐字核对目标料号的 Datasheet 管脚表,不能凭「同封装」想当然。

3 · 内核与架构差异

新唐同时在售 8051 与 Arm 全线,所以「这颗芯片怎么写代码」有两个完全不同的答案。这一章把两种模型讲透,让你拿到料号就知道该按哪套想问题。

3.1 增强型 8051(1T 单周期)结构

标准 8051 的一个机器周期是 12 个时钟周期(因此叫 12T),绝大多数指令要 1~2 个机器周期。新唐的「增强型 8051」把这个比例压缩了:

内核代数代表型号机器周期同样 16 MHz 下的相对速度说明
1TN76E003 / N76E616 / N76E885 / MG51 / MS511 个时钟 / 机器周期基准绝大多数指令单周期完成,仅乘除法等少数需多周期
4T / 6TW78E / W79E 系列部分型号4 或 6 个时钟约1/4 ~ 1/6 于 1T为兼容既有 8051 设计、平衡漏电流与 EMI
12TW78E516D / W77E / N78E12 个时钟约 1/12 于 1T管脚兼容传统 12T 8051,为替换而存在

由此得出第一条工程结论:主频数字变小不等于性能变差。把一个跑在 W78E516D(12T / 40 MHz)上的项目 迁到 N76E003(1T / 16 MHz),算力反而是大约翻倍的。 但反过来,如果原项目里用了 12T 时序写死的延时循环或串口分频假设,迁到 1T 料后时序会全部错掉 —— 这是第 17 章要重点处理的。

8051 内核的寄存器模型也要记住三条特性,它们在移植时会咬人:

  • 四组寄存器靠 PSW 切换:R0~R7 有 4 组(0~3 组),当前用哪组由程序状态字 PSW 的 RS1/RS0 决定。 写中断服务程序时若忘记保护 PSW,主循环用的寄存器组会在中断里被换掉。
  • 位寻址空间只有 128 位(内部 RAM 20H~2FH)。经典位寻址变量声明:sbit LED = P1^0;。 这条在新唐的增强型里仍然是核心习惯 —— 它比读改写 SFR 更省时间也更安全。
  • 进栈 / 出栈只有 1~2 个机器周期,这是 8051 中断响应快的传统优势;但栈开在内部 RAM 里, 所以中断嵌套深度直接吃掉你的 SRAM,这是 8051 项目最常见的 OOM 原因。

3.2 位寻址 SFR 与 8051 的四个空间

经典 8051 有四个互不重叠的存储空间,这是它和所有现代 MCU 最不一样的地方:

空间关键字寻址范围(经典 8051)访问宽度典型用途
程序空间code程序 Flash(新唐多为 8 ~ 128 KB)按字节指令、常量表、还常兼作xdata 的地址空间
外部数据xdata片外 RAM(并行总线 / EBI 挂的存储器)按字节外扩 SRAM、并行 LCD、Flash
内部数据data片内 128 B 或 256 B(新唐常标 256 B / 512 B)按字节或按位低地址区是寄存器区与位寻址区,速度最快
间接数据idata只有内部 RAM 的高 128 B,用 @Ri 间接寻址按字节C51 编译器把 函数局部变量与栈默认放这里
C51 的 memory model 决定一切

Keil C51 默认 small 模型:data 区只有 128~256 B,超了就自动溢出到 idata。 一旦你写了几个大数组、或递归函数、或库的缓冲,就会莫名其妙地报 memory model error。 解决顺序是:① 把缓冲区显式声明成 idata 或 xdata;② 仍不够就切 large 模型(用 32 位指针,慢但地址空间大)。 详见第 6.4 节。

新唐增强型 8051 的 SFR 相比经典多了几组关键寄存器(具体地址与位定义以该型号 TRM 为准):

SFR 组代表名称作用
端口数据PxDAT / PxDATH端口数据寄存器,高低字节分开;8051 的 SFR 直接可位寻址
上拉控制PxPULL / PxPULLEN端口内部上拉的强度选择与使能,见第 9.2 节
掉电屏蔽PxBOD端口级的施密特 / 输入缓冲控制,用在需要省电或抗扰的特殊引脚上
模式与锁定PMOD / LOCK端口输入 / 输出方向与配置锁定,防止运行中被误改
端口中断PxAIF / PxEIE / PxEIP / PxITPOL端口 A 的中断标志、使能、优先级与触发极性,见第 9.5 节
看门狗 / 时钟WDT / WDT_CLKCTL / CLKCTL看门狗与系统时钟切换,见第 11 章
中断优先级IP / IPH中断优先级(IPH 提供高位,构成两级自然优先级)
为什么说 SFR「长得很像」Cortex 的寄存器

Cortex-M 上把 GPIO 的一个 bit 写成 PA->DATA |= (1<<0),8051 上写 P1 |= 0x01 或 LED = 1;。 两者都是「读改写端口寄存器」的直觉写法,但 8051 有位寻址而 Cortex-M 没有: 8051 上 LED = 1 编译成一条对位地址的写指令,是原子的; Cortex-M 上 PA->DATA |= bit 会编译成「读 → 改 → 写」三条指令,在中断里同时改同一位就可能丢事件。 这正是新唐 Cortex-M 侧提供 SET / CLR 类寄存器的原因 —— 详见第 9.1 节。

3.3 8051 与 Cortex-M 的中断模型差异

对比项增强型 8051Cortex-M0 / M0+Cortex-M4F
向量表位置程序空间起始地址 0x0000,每个向量 2~4 字节(依型号)Flash 起始 0x0000 0(向量表头是初始栈顶,Reset 在 0x0000 04)同M0
向量数量传统 8 个(含 Timer2、串口中断等扩展)内核异常 16个 + 外部中断数十个,数量随型号变化很大同 M0,外设更多
优先级机制IP / IPH 构成自然优先级(2 级 × 位);同级轮转仲裁NVIC:抢占优先级 + 子优先级,位数由 PRIGROUP 分组决定同 M0
可配置嵌套只有 2 级(高 / 低),同级不能互相打断抢占级数由实现的优先级位数决定(常见 4 / 2 / 2 / 1 的分配)同 M0
中断向量写法void int0_isr(void) interrupt 0(编号写死)void IRQHandler(void),函数名必须与向量表名字一致同 M0
开关中断EA = 0/1 全局 + EX0 等分源使能__disable_irq() / NVIC_EnableIRQ() 分源同 M0
栈单栈,在内部 RAM,深度有限MSP / PSP 双栈,8 字节对齐由 STKALIGN 保证同 M0
最隐蔽的移植坑:函数名必须与向量表一致

Cortex-M 的向量表是一张函数指针表, startup_xxx.c 里写的是 UART0_IRQHandler,你在别处写成了 UART0IrqHandler —— 编译零错误、链接零错误、烧录成功、运行就是不进中断。 而 8051 用的是中断号,函数名随便起,只要 interrupt 3 里的数字对就行。 这个差异是Cortex-M 移植时最高频的「程序就是不跑」根因,见第 10.4 与 18.4 节。

3.4 Cortex-M0+ / M0 / M4F / M7 的分界

特性Cortex-M0Cortex-M0+Cortex-M4FCortex-M7
架构Armv6-MArmv6-MArmv7-MArmv7-M
指令集Thumb-2(无乘法器,32 位乘法走库函数)Thumb-2(单周期 32 位硬件乘法器与除法器)Thumb-2 + DSP 指令Thumb-2 + DSP
浮点无无单精度 FPU(IEEE-754)单精度 + 双精度
位操作无(用 GPIO 的 SET/CLR 寄存器)无无无
中断NVICNVICNVICNVIC
典型新唐料NUC100 / NUC200 / NUC220 / M051M031 / M032M451 / M452 / M453 / M471 / M480 / M460新唐目录里没有 M7 MCU
选它的理由成本最低,够用就好同价位多一个硬件除法器,做 FFT / 协议校验很值要浮点或 DSP:控制算法、音频、图像新唐这边用 ARM9 代替
M0 → M0+ 这一步提升很实在

如果你的算法里有大量除法(比例控制、单位换算、CRC 分块长度计算), M0 上的除法是一个库函数调用 + 软件循环,可能几十个周期;M0+ 的硬件除法器是单周期。 M031 还有 32 位硬件除法器,主频只48/72 MHz 却能跑 2 MSPS 的 ADC 采样链路 —— 这就是「够用」和「很够用」的区别。

3.5 ARM9 N9H 与 Cortex 的定位差异

ARM926EJ-S 与 Cortex-M 的差别不是快慢,而是有没有 MMU 与 Cache。这一个差别决定了两条完全不同的产品形态:

维度Cortex-M(MCU)ARM9 N9H / NUC9xx(MPU)
MMUM4/M7 有 MPU(不是 MMU,不做虚拟内存)有 MMU,能做虚拟地址转换与页表管理
CacheM7 有;M480 只有 32 KB SRAM cache 作为「cache-like」用途,不是 CPU Cache16 KB I-Cache + 16 KB D-Cache
启动从 Flash 的APROM 直接开始执行IBR(Internal Boot ROM) 从 USB / SPI NAND / SD / eMMC 引导;或从外部 DDR2 启动
操作系统裸机 / RTOS(FreeRTOS / RT-Thread)可跑 Linux(官方 Chili Board 预装 Linux 环境)
外部存储片上 Flash 为主板级 DDR2(最高 64 MB)+ MCP 封装内置 DRAM,SOC 式设计
开发方式IDE 里编译 → 下载 → 调试BSP 包 + 交叉编译链 + 烧写镜像 + 串口/网络调试
为什么用它成本、实时性、简单需要 GUI、网络协议栈、大存储、多任务、现有 Linux 生态

两条线的官方开发资源也是完全独立的:

  • Cortex-M 线:官方提供 BSP(C 源码 + 库 + 启动文件 + 链接脚本)+ 各系列 EVT 例程,IDE 里直接编译下载。
  • ARM9 线:官方提供 Linux BSP(内核 + u-boot + 设备树 + 交叉编译工具链)与 Non-OS / FreeRTOS 例程, 开发流程是「编译镜像 → 烧到 SD/eMMC/USB → 串口起 shell」。新唐还提供了预装 Linux 的 Chili Board,据官方说法可在 VMware 里跑 BSP 后15 分钟内开始写应用。

3.6 Cortex-M23(M251 / M258)这条中间路线

虽然本文档的重点是 8051 与 M0/M4,但必须提到 Cortex-M23 这条线,因为它是新唐近两年最重要的新布局:

特性M251 / M252(M23)M254 / M256 / M258(M23)相对 M0+ / M4F 的位置
内核Cortex-M23(含 TrustZone 安全扩展的可选版本)Cortex-M23介于 M0+ 与 M4F 之间
供电全系列 5 V 供电,高抗扰(7 kV ESD / 4.4 kV EFT)5 V 级与 8051 的 5 V 系统兼容,省电平转换
低功耗五种功率模式延长电池寿命低功耗 + LCDM031 只有三档(见第 15 章)
安全三种芯片保护机制,可防止调试器读出与仿制同类M4F 的安全能力是软件侧为主,M23 起有硬件侧
显示 / 触控无LCDCOM/SEG LCD 驱动 + 电容式触控按键把 8051 的面板能力带进了 32 位
外设PSIO(可编程串行 I/O)、USB、SPI with XIP同类 + LCD / TouchKey接口数量少于 M4F
生态Keil MDK(Nuvoton Edition 免费用于 M23 工程)、IAR、NuEclipse、VS Code 扩展同左Keil 的免费授权让 M23 的入门成本很低
什么时候该考虑 M23

如果你的产品既需要 5 V 系统直连(不想做电平转换)、 又想脱离 8051 换到 32 位内核、并且对面板/家电安规有要求,M23 是新唐目前最对口的平台。 官方明确提到 M23 工程可免费使用 Keil MDK(Nuvoton Edition) —— 这解决了「想换32 位但不想买 Keil」的矛盾。 详见官网 M251/M252 系列页与 M254/M256/M258 系列页。

3.7 8051 存量项目为何仍值得维护

「新唐做 32 位了,8051 是不是就该淘汰」是个常见误判。从工程角度看,8051 存量项目继续维护往往比迁移更划算:

维度继续维护 8051迁移到 Cortex-M
工具链Keil C51 已经在用,零迁移成本换 IDE / 换编译器 / 换库,C51 与 ARM 编译器语法与库都不同
代码资产寄存器级代码可大量复用驱动层基本要重写(GPIO / 定时器 / 串口 / 中断全变)
认证MS51 / MG51 / ML56 已有 IEC-60730 Class B STL,可直接引用需要为新平台重新做安全测试库认证
供应链N76E003 等料号供货稳定、价格极低,且同封装可平替新平台料号生命周期需重新评估
性能天花板做面板、门禁、电表、充电控制、小家电完全够用只有算法密集或高速通信才真正需要
什么时候该迁—需要浮点 / DSP、需要 USB HS 或以太网、需要大存储、要跑 RTOS 协议栈、需要 5 V 以下低压与低功耗指标

结论很直接:存量 8051 项目在「功能没超边界」的前提下,最划算的动作是换新唐的 1T 料号原地替换, 而不是跨内核迁移。真要迁,也应该迁到新唐的 Cortex-M,而不是回到 STC —— 因为 STC 没有 Cortex-M 线, 而新唐同一个供应商、同一个 Nu-Link 调试器就能覆盖 8051 与 Cortex-M 两条线, 这是「换供应商」和「换内核」两个风险叠加时更优的组合。

同一家公司的两条内核路线 —— 差异不在「快慢」,而在模型搞混模型的后果:代码能编译,但行为完全不对增强型 8051指令执行1T ~ 12T 可选;取指即一个机器周期存储空间code / xdata / idata / bit 四类,互不重叠位操作可直接寻址 128 个位地址中断模型固定向量 + IP 优先级,同级轮转寄存器组R0~R7 分四组,由PSW 切换栈内部栈,靠 SP 指针,深度受 RAM 限制乘除法MUL / DIV 需配 MULABCortex-M0 / M0+指令执行Thumb-2,单周期 32 位乘法(M0+ 含硬件除法)存储空间统一 4 GB 线性地址空间位操作无位带;用 GPIO 的置位 / 清零寄存器中断模型NVIC,优先级位数可配置,支持嵌套寄存器组R0~R12 + SP + LR + PC,无分组切换栈MSP / PSP 双栈顶,由 STKALIGN 对齐乘除法MUL 单周期;除法 M0 需库函数ARM9 N9H / NUC9xx指令执行ARM 指令集 + Thumb 混合,MMU 提供虚拟内存存储空间MMU 虚拟地址 + Cache + 板级 DDR2位操作无位带中断模型ARM 异常体系(IRQ / FIQ / ...),向量在高端寄存器组R0~R15,模式区分(用户 / 系统 / IRQ / FIQ)栈每种模式各自的栈能力可跑 Linux;M0/M4 做不到
图 4 · 增强型 8051、Cortex-M0/M0+ 与 ARM9 的架构差异对照
三条工具链的取舍 —— 按「项目属于哪条内核线」选,不是按偏好选8051 项目用 NuEclipse 是浪费时间;Cortex-M 项目不用 Keil 会缺很多现成中间件NuEclipseEclipse + GNU GCC开源(EPL)适用:新项目首选;团队想统一到开源工具链优势免费开源;自带 CMSIS 头文件与 packNu-Link 官方驱动链完整;VS Code 有扩展代价只覆盖 Cortex-M / ARM98051 需另配 Keil C51Keil MDKArm 官方商业 IDEµVision适用:存量 8051 与 Cortex-M 并存的团队优势8051(C51)与 Cortex(M 编译器)都能编CMSIS-Pack 生态成熟,中间件与例程最多代价商业授权;IDE 较老跨平台只有 WindowsIAR EWARMIAR 商业 IDE企业级调试适用:已有 IAR 存量、追求产物质量的项目优势Cortex-M 代码质量与优化很好官方提供 Nu-Link 驱动代价成本最高8051 平台支持有限
图 5 · NuEclipse / Keil MDK / IAR EWARM 三条工具链的取舍

4 · 开发环境:NuEclipse / Keil MDK / IAR

这一章把名字先厘清:新唐没有名为「Nuvoton Studio」的产品。官方开源 IDE 是 NuEclipse(Eclipse + GNU GCC), 商业 IDE 支持 Keil MDK 与 IAR EWARM,另外还有官方的 VS Code 扩展。选错了名字会一路搜到别人的东西。

4.1 三条工具链的真实分工

工具内核覆盖调试器授权成本官方定位
NuEclipseCortex-M(M0 / M0+ / M4F)、部分 ARM9Nu-Link 全系 / CMSIS-DAP免费开源(EPL)官方开源 IDE,新项目默认推荐
Keil MDK8051(C51) + Cortex-M(M 编译器)Nu-Link 官方驱动 + 各类 CMSIS-DAP商业授权;M23 工程可用 Nuvoton Edition 免费存量 8051 项目的唯一现实选择
IAR EWARMCortex-M / ARM9IAR 官方 Nu-Link 驱动商业授权(成本最高)追求编译产物质量的企业项目
VS Code 扩展Cortex-MCMSIS-DAP / pyOCD免费NuMicro Cortex-M Pack,适合已经用 VS Code 的团队
Keil Studio / Keil Studio for VS CodeCortex-MCMSIS-DAP(Nu-Link2-Pro 可用 WebUSB 接)免费版够用把 Nu-Link2-Pro 当标准 CMSIS-DAP 用的官方路径

补充三条来自官方 OpenNuvoton/Nuvoton_Tools 仓库的信息:

  • 新唐提供 Nu-Link 官方开源替代栈:pyOCD(Windows/Linux/macOS,Apache-2.0)与 OpenOCD(CMSIS-DAP 版,GPL-2.0), 都是新唐定制过的分支,能直接驱动 Nu-Link2。这是 CI 流水线上做自动化烧录的可行方案。
  • Nu-Link2-Pro 支持拖放烧录(按住按键插 USB 出现虚拟盘,把固件拖进去即可)与I2C 接口的 In-Line Programming, 适合产线不做治具的场景。
  • Nu-Link3-Pro 是更新的型号,除调试编程外还集成了 PulseView / sigrok 逻辑分析仪功能与 ETM 指令跟踪, 做协议抓时序分析很有用。

4.2 NuEclipse 安装与配置

NuEclipse 官方以 Eclipse + GNU GCC 的形式分发,安装后基本可用,重点是三件事:

  1. 安装路径务必用纯英文、无空格、无中文的短路径。Eclipse 的 workspace 与工具链路径一旦包含空格或非 ASCII 字符, 编译命令行会静默失败(表现为「明明配对了却找不到头文件」)。
  2. 在 preferences 里指定 workspace。默认 workspace 在用户目录下,建议改成 D:/NuvotonWS 这类短路径。 新唐 BSP 里有大量相对路径依赖,workspace 挪太深会让 Eclipse 的索引变慢。
  3. 通过「Install New Software / CMSIS Pack」装目标系列的设备支持包。 新唐的 DFP(Device Family Pack)在 OpenNuvoton/Nuvoton_Tools 仓库与官网均可获取, 装上后新建工程向导里才会出现对应的系列与料号。

装完之后还要确认三件事:

  • 工具链路径指向安装目录下的 arm-none-eabi-gcc,执行 -v 能打印版本。
  • Debugger 里选 Nu-Link(不是 CMSIS-DAP,也不是 J-Link)。
  • 窗口布局:建议打开 Console(编译输出)、Memory、Expressions 三个视图,第 8 章调试全靠它们。
NuEclipse 不带 8051 支持

NuEclipse 是为 Arm 核设计的 Eclipse 发行版, 不含 C51 编译器,也不含 8051 的烧录与调试支持。 如果你维护的是 8051 线(N76 / W78 / MG51),请直接用 Keil MDK(C51 编译器), 8051 的下载与调试用 Nu-Link2 或新唐的 ICP/ISP 工具,两条链路可以并存于同一个工程目录。

4.3 Keil MDK 支持与 DFP 安装

Keil MDK 对新唐的支持分两层,务必分清:

层对象安装什么注意
DFP / Pack 层Cortex-M 系列Nuvoton CMSIS Device Family Pack(开源,Apache-2.0)提供 startup、system 分组、寄存器定义、SVD;装上后 µVision 里才有对应器件
C51 编译器8051 系列Keil C51(随 MDK 安装或单独授权)与 Nuvoton 的 8051 芯片是「编译器兼容」而非「官方包」:SFR 定义靠官方提供的头文件 / 示例工程
Flash 算法(FLM)全部新唐提供的 FLM 或 Nu-Link 的通用驱动型号不匹配时会报「没有可用的 Flash Download Algorithm」
调试器驱动全部Nu-Link driver for Keil MDK官方提供;装完在 Debug 设置里选 Nu-Link

新建工程的实际步骤(对照 CH32 那套流程,新唐的差别在器件名与 FLM):

  1. Pack Installer 里安装 Nuvoton 的 DFP;或从官网下载 .pack 后双击安装。
  2. µVision 里 Project → New → New Project,选正确的器件(料号必须与芯片丝印一致)。
  3. 选 CMSIS 风格的工程模板,让 µVision 自动带入 startup 与系统初始化。
  4. Options for Target → Utilities → Settings → Flash Download, 选对应的 Flash 算法,并勾上 Reset and Run。
  5. Options → Debug 里选 Nu-Link,点右侧 Settings 确认 SWD 模式与主频。
  6. Options → Target 里把 Xtal (MHz) 填成实际晶振频率 —— 这个值只影响调试时的时序计算,但填错会让断点位置与单步步数看起来「莫名其妙」。

4.4 IAR EWARM 与第三方 IDE

  • IAR EWARM:官方提供 Nu-Link driver for IAR。流程与 Keil 类似:装驱动 → IAR 里配调试器插件 → 工程的 linker script 换成新唐 BSP 提供的 .icf。 IAR 的优势在代码优化与调试体验,代价是授权成本。
  • VS Code:官方提供 NuMicro Cortex-M Pack 扩展与 NuCodeGen(代码生成)扩展, 适合已经标准化到 VS Code 的团队;调试走 CMSIS-DAP(pyOCD)。
  • 命令行 / CI:用 arm-none-eabi-gcc + 新唐定制 OpenOCD 或 pyOCD, 配合 ISPTool 或 ISPLib 做批量烧录,这是唯一能进 CI 的路径。详见第 7.6 节。
  • 8051 的命令行选项:Keil C51 可以命令行编译(C51.exe / LX51.exe / OH51.exe), 再用 NuLink Command Tool 烧录。这条链路在量产时比 GUI 稳定。

4.5 Nu-Link 驱动与固件选择

这是新唐上手第一号坑:同一个 Nu-Link2,装不同固件就是完全不同的设备。官方仓库对两种固件的描述如下:

固件协议 / 接口支持对象适用场景
NuLink2FW.bin私有协议(MSC / VCOM / HID_ICE)或 CMSIS-DAP支持新唐 8051、离线烧录、用户代码读出保护、不受限的 Flash 断点、芯片特有功能(CONFIG0 / CONFIG1、Data Flash 设置、KPROM 等)调 8051 必须用它;需要离线量产烧录、需要读保护、需要无限 Flash 断点时用它
NuLink2_DAPLink.bin标准 CMSIS-DAP(WinUSB + WebUSB)通用 ARM 芯片(第三方板子、非新唐器件)把 Nu-Link2 当通用 CMSIS-DAP 用;接 Keil Studio;调试第三方开发板

官方还给出了 NU_CFG.TXT 的配置项(仅 v3.09.7380 及以后的 NuLink2FW.bin 支持这些选项):

选项取值含义
POWER-MODE由使用者设定SWD 输出电压等级,主要给 CMSIS-DAP 接口用。目标板是 1.8 V 时必须改,否则调试器输出 3.3 V 打坏 IO
CMSIS-DAP1(默认)/ 01 = WebUSB 形态的 CMSIS-DAP,可连 Keil Studio;0 = 关掉 CMSIS-DAP,改用 USB BULK_ICE(比 HID_ICE 快)
BRIDGE-MODE0(默认)/ 1 / 20 = 仅 CMSIS-DAP;1 = 启用 Nu-Link2-Bridge(VCOM 与 I2C / SPI / RS485 / CAN 透传,设备管理器里会出现虚拟串口);2 = 启用 USB HID 的 ISPTool 接口 + 透传
注意:只有 BRIDGE-MODE=0 才有 CMSIS-DAP
「Nu-Link 能识别但连不上目标」的头号原因

绝大多数情况是固件装错了:装了 NuLink2_DAPLink.bin(只支持 ARM 的标准 CMSIS-DAP), 然后去调一颗 N76E003(8051)。这类现象在设备管理器里看一切正常, IDE 里也能看到调试器,但一 Connect 就超时。处置:换回 NuLink2FW.bin。

官方给出的固件升级方式:按住 Nu-Link2-Pro 上的按键并插 USB 线,会弹出一个虚拟盘 (如果盘名是「NuMicro MCU」,那说明你在升级目标设备固件而不是适配器固件),把 .bin 拖进盘里,重新插拔 USB 即完成。

量产与并行阶段建议直接上 Nu-Link-Gang 系列,官方定位是一对四编程, 配套 NuLink Command Tool 做批量作业。

4.6 常见安装故障

现象原因处置
NuEclipse 编译报「找不到头文件」,但文件存在workspace 或工程路径含空格 / 中文把 workspace 与工程都挪到纯英文短路径,如 D:/NuvotonWS
NuEclipse 卡在索引重建workspace 里有大量工程或放在网络盘工程放本地盘;必要时 Project → Clean 后重建索引
µVision 新建工程里找不到目标器件DFP 未安装或版本不匹配Pack Installer 里装 / 升级 Nuvoton DFP
No Flash Download Algorithm器件型号选错,或未指定 FLM按芯片丝印重选器件;在 Utilities 里指定对应 Flash 算法
下载时提示 chip type mismatch工具里选的型号与实际芯片不符按丝印与料号逐字核对(含封装后缀)
Nu-Link 在设备管理器里是未知设备驱动未装或被 Windows 更新替换装官方 Nu-Link 驱动;必要时手动指定 libwinusb 驱动
能识别 Nu-Link 但连不上目标固件不匹配(装了 DAPLink 却要调 8051)换 NuLink2FW.bin,见 4.5 节
Keil 调试提示 目标电压异常POWER-MODE 与目标板 IO 电压不匹配(1.8 V 板最常见)改 NU_CFG.TXT 的 POWER-MODE 后重新插拔
Trace 面板无输出用的是 USB BULK_ICE 模式,ITM 通道不匹配切回 CMSIS-DAP,或把 ITM 端口改到与 HID_ICE 匹配的通道
8051 工程的 C51 编译报 memory model errordata 区溢出把缓冲区改到 idata / xdata,见第 6.4 节
Nu-Link 能连但 ISP 模式进不去自举引脚状态不对、复位时序不对BOOT / LD2 / CONFIG0 见第 7.5 节
杀毒软件隔离了工具部分安全软件会误报编程器工具把工具目录与下载目录加白名单

5 · 第一个工程:从新建到点亮 LED

本章的目标很具体:从零到有一个 LED 在闪,全程不超过半小时,并且每一步都有可验收的现象。 Cortex-M 与 8051 各演示一遍。

5.1 官方 BSP / EVT 例程包结构

不要从空工程开始 —— 官方 BSP 与 EVT 包已经把最容易踩的坑(时钟初始化、向量表、Flash 等待周期)都处理好了。 先跑通官方例程,再改成自己的功能,是效率最高也最不容易出错的做法。

包名内容什么时候用
BSP(Cortex-M)CMSIS 头文件、system_*.c(时钟与向量表初始化)、startup_*.c、链接脚本、Board 板级配置、外设库、驱动模板(PDMA / UART / SPI / I2C / ADC / PWM / TIMER / WDT / RTC)、NuTool 配置脚本新项目一律从这里起步
EVT / 例程包评估板说明 + 几十个外设例程(每个外设一个最小可编译工程)要快速确认某个外设怎么用;官方页面按外设分类下载
8051 例程Keil C51 工程 + SFR 头文件 + 各外设驱动 + 官方 Nu-Link/ICP 烧录说明8051 线的新项目与移植
NuMaker 板资料原理图 / PCB / Gerber、引脚映射、Arduino 兼容接口定义画板与外设接线核对

官方 BSP 的典型目录(不同系列略有差异,文件名以实际包为准):

Nuvoton_BSP_<Family>/
├── BSP/                          库与驱动(按内核分目录)
│   ├── _CMSIS_/                  内核头文件与启动汇编
│   ├── _Compiler_/               编译器相关(Keil / GCC / IAR)
│   ├── _Lib_/                    外设库源码
│   └── <Series>/              该系列专属(链接脚本、system 文件、板级配置)
├── DevelopBoard/                 板级初始化与 Arduino 兼容接口
├── NuEclipse/                    Eclipse 工程模板(.project 等)
├── MDK-IAR/                      Keil 与 IAR 的工程模板
├── Pack/                         CMSIS Device Family Pack(.pack)
└── Samples/
    ├── <Peripheral>/           逐外设例程(每个一个独立工程)
    └── Template/                 工程模板
为什么一定要用 BSP 的 startup 与链接脚本

这两样东西把「芯片内部地址布局」编码进去了:向量表在哪、APROM 从哪开始、SRAM 有多大、堆栈从哪往下长、 SRAM 的哪一块是特殊用途(如 Ethernet / USB 的 DMA 缓冲)。 自己写一份「看起来差不多」的,症状往往是「下载成功但跑飞」或者「链接报的 RAM 大小和实际不符」。 直接用 BSP 的,只改 Memory Layout 的数字。

5.2 NuEclipse 路径:新建 Cortex-M 工程

  1. 导入:File → Import → Existing Projects into Workspace,选 BSP 或 EVT 里最接近你目标的例程工程。
  2. 改器件:如果例程是别的型号,在 Project Properties → C/C++ Build → Settings → Device 里换成你的料号; Keil 工程则是 Options for Target → Device。
  3. 改晶振:system_*.c 里的 SystemCoreClock 与时钟初始化要按你的实际晶振改。 这一步在 BSP 里通常被封装成宏(例如 CLK_HXT / HXT_VALUE 这类定义),改定义比改代码安全。
  4. 构建:Ctrl+B。产物在 Debug/ 或 Output/ 下:.elf(含调试符号)、.hex / .bin(给烧录工具)。
  5. 下载:Run → Debug,或用 Download 按钮只烧不调试。
  6. 验证:断点应停在 main() 第一行;若直接跑飞,看第 8 章「调试失效定位」。

5.3 Keil MDK 路径:新建工程要点

Keil 路径与 NuEclipse 的差别集中在 「谁来生成工程结构」:

项目NuEclipseKeil MDK
新建方式导入 BSP 自带工程,改器件New Project → 选器件 → 选 CMSIS 模板,或直接打开 BSP 的 .uvprojx
器件与定义Properties 里改Options → Target → Device + Define(系列宏必须加,否则头文件里的条件编译全走错分支)
包含路径Properties 里加 -IOptions → C51/CMSIS → Include Paths
分散加载链接脚本 .ld / .icf.sct(scatter),或直接用 BSP 提供的
Flash 算法由 Nu-Link 固件处理Utilities 里显式选 FLM
命令行编译arm-none-eabi-gcc + makeUV4.exe -b project.uvprojx -j0(量产脚本常用)
Keil 里最常见的编译期失败:缺系列宏

新唐 BSP 的头文件大量用条件编译区分系列与Flash 容量档,典型形态是 #if defined(M031)、 #if (CHIP_M031)、#if __LDROM_SIZE__ 之类。 宏没定义时不会报错,而是悄悄走进另一条分支,症状是「编译通过了但寄存器配置看起来完全不对」。 迁移工程时的第一件事就是核对 Target → Define 与官方示例工程是否一致。

5.4 8051 路径:N76E003 点灯

8051 的入门链路比 Cortex-M 更短:Keil C51 + 官方 SFR 头文件 + Nu-Link2 或 ICP。下面是完整流程。

  1. 建立 Keil 工程:Project → New → New Project → 选择 8051 工具链 → 选一个 Blank 模板 → 保存为 .uvproj。
  2. 选择设备:在 Options → Target → Device 里选你手上的 8051 器件(若列表里没有,说明该器件的 pack 支持需要单独安装)。
  3. 加入官方 SFR 头文件与启动文件:把 BSP / 例程包里的 SFR 头文件加入工程,并确认 STARTUP.A51(或对应型号的启动文件)在列表里。
  4. 写代码:#include 官方头文件后,用 sbit 声明位变量,直接对引脚赋值。
  5. 配置 Flash 下载:Utilities 选 Nu-Link 或 ICP 通道;8051 侧还可以用 ISP(见第 7.5 节)。
  6. 验证:LED 应当按预期闪烁。若不闪,先量引脚电压(配置是否生效),再看是否进了低功耗。

5.5 点灯代码与验证现象

下面三段是「能跑起来」的最小代码。关键点不在代码本身,而在于每一步都能被观察到。

/* ================= Cortex-M:Nuvoton BSP 风格 ================= */
#include <stdio.h>
#include "NuMicro.h"

#define LED_PIN     PA15
#define LED_ON      0                      /* 该系列板载LED 低电平点亮 */

int main(void)
{
    /* 官方 SystemInit 已在 startup 中调用:时钟 / 向量表 / Flash 等待周期都配好了 */
    GPIO_SetMode(GPIOA, BIT15, GPIO_PMD_OUTPUT);       /* 配置为推挽输出 */

    while (1) {
        GPIO_SetBits(GPIOA, BIT15);                   /* 亮 */
        delay_ms(500);                                /* 用 BSP 提供的延时函数 */
        GPIO_ClearBits(GPIOA, BIT15);                 /* 灭 */
        delay_ms(500);
    }
}

对应的 8051 版本 —— 注意它比 Cortex 短得多,而且位变量声明本身就完成了引脚配置:

/* ================= 8051:N76E003 等 ================= */
#include <N76E003.H>          /* 官方 SFR 头文件 */
#include "Delay.h"

/* sbit 让 LED 落在可位寻址区,赋值是一条指令,且是原子的 */
sbit LED = P1^3;

void main(void)
{
    /* 端口方向:把 P1.3 配成推挽输出 */
    P1 |=0x08;                     /* 或用官方要求的 P1MOD / PxPMOD 配置寄存器写法 */

    while (1) {
        LED = 0;Delay_ms(500);
        LED = 1;                Delay_ms(500);
    }
}
验收现象清单(照着勾)

① 能编译出.elf 与 .hex,无 warning 级别的型号相关警告;
② 下载工具提示校验通过 / Verify OK;
③ 断点能停在 main() 第一行;
④ LED 以肉眼可见的节奏闪烁;
⑤ 用示波器或逻辑分析仪量到引脚上的方波;
⑥ 单步执行时串口能打印出内容(第 8.3 节的重定向)。

六条里有任何一条做不到,不要往下走 —— 每一层都有自己的典型故障(见第 18 章)。

5.6 三条路径的验收清单

路径创建工程编译产物烧录工具调试最易错的一步
NuEclipse + Nu-Link2导入 BSP 工程 → 改器件.elf / .hexIDE 内一键CMSIS-DAP 或私有协议路径含中文/空格
Keil MDK + Nu-LinkNew Project → 选器件 → CMSIS 模板.axf / .hexDebug → Download(需选 FLM)Nu-Link 驱动缺系列宏导致条件编译走错分支
Keil C51 + Nu-Link2New Project → 8051 → Blank.hex / .binNu-Link2(必须 NuLink2FW.bin)或 ICP / ISPC51 调试器固件装成 DAPLink,导致连不上
命令行 + CI沿用 BSP 目录结构.hex / .binISPTool / ISPLib / OpenOCD / pyOCD按需Nu-Link 被 GUI 工具独占
相关报告 · 交叉引用 2 器件全部展开收起 ▾
点开类目即可展开:具体文档 / 章节(点章直接跳转到该章)
DDR/LPDDR(DRAM)
电路设计指南4
软件设计规范4
DDR2
章节(点章跳转,共 16 章)
DDR3
章节(点章跳转,共 16 章)
DDR4
章节(点章跳转,共 17 章)
DDR5
章节(点章跳转,共 17 章)
eMMC
电路设计指南
软件设计规范
Linux 驱动开发
样机问题排查
量产问题排查
其他提及器件(共 2)
SPI NAND
电路设计指南
软件设计规范
Linux 驱动开发
样机问题排查
量产问题排查4
全志平台 SPI NAND NOR
章节(点章跳转,共 11 章)
海思平台 SPI NAND 量产常见失败
章节(点章跳转,共 11 章)
烧录成功但不开机 SPI NAND
章节(点章跳转,共 12 章)
瑞芯微平台 SPI NAND eMMC
章节(点章跳转,共 11 章)
系统设计指南3