瑞萨 Renesas 开发指南
编制日期 2026-10-14
RA / RX / RL78 三条产品线 —— 从 e² studio 装不起来、MD 引脚接错、下载器连不上,一路到量产烧录、低功耗与故障定位,一份把「第一次上手会踩的坑」全部前置的工程手册
结论:瑞萨三条线真正会卡住人的从来不是代码,而是三件小事:e² studio 与 FSP 的版本必须成对匹配、 MD 引脚在复位释放瞬间的电平决定芯片进单芯片模式还是自举模式、调试器的 VCL 与 SWCLK 接线不对会直接表现为「连不上目标芯片」而不是「接线松了」。 本文按「装环境 → 建工程 → 编译 → 下载 → 调试 → 量产」的流水线真实顺序组织,每一段都给出可对照的表格、真实的寄存器/模块名、以及该段最常踩的坑; 所有数值型信息都追溯到官方数据手册(Datasheet)与硬件用户手册(User's Manual: Hardware)的具体章节,抓不准的一律写成定性描述并指向手册。
报告总结
瑞萨官方资料体系极其完整但也极其分散:数据手册(Datasheet)讲电气与引脚、硬件用户手册(User's Manual: Hardware)讲寄存器、
FSP 用户手册讲软件包、Quick Design Guide 讲最小系统与模式跳线、Tool News 讲工具版本变更、
而工具下载分散在 renesas.com/e2studio 与 renesas.com/rfp 两个入口。中文网上的教程绝大多数停留在「新建工程 → 编译 → 下载」这一步,
一旦遇到 MD 引脚、选项字节误配、下载器被独占、低功耗后连不上就无解。本文档做了三件官方分散文档没做的事:
- 把接力棒画清楚:明确指出「装 IDE」到「能在断点处停下来」之间实际要经过哪几步,每一步做完了用什么现象验收。
- 把坑写在坑发生的地方:不单独罗列「常见问题」,而是在讲每个环节时就把该环节的失效现象、原因、处置一起给出。
- 把不覆盖的东西说清楚:哪些内容必须去查手册的哪一章,避免读者在一份 300 KB 的文档里找一个根本不该在这儿的答案。
读者路径
本文档共 19 章 + 4 个附录,按「先跑通、再理解」的顺序组织:
- 只想尽快跑通第一个程序:第 4 章(装环境)→ 第 5 章(建工程点灯)→ 第 7 章(下载)→ 第 19 章(核查清单),四章足够。
- 要做产品开发:第 2 章选型 → 第 3 章内核差异 → 第 6 章工程结构 → 第 16 章硬件设计。
- 调不通、报错:直接翻第 18 章故障排查速查表,按现象分层定位;下载连不上先看 7.4 与 7.5。
- 要写驱动:第 9 章 GPIO → 第 10 章中断与 ELC → 第 11 章时钟 → 第 12 章外设与 DMA → 第 13 章定时器与看门狗。
- 从 STM32 切过来:第 17 章是专门的移植对照,先看这一章能省两三天。
- 做电池产品:第 15 章低功耗,重点区分 RA 的 Software Standby / Deep Software Standby 与 RL78 的 STOP / SNOOZE。
- 做联网产品:第 14 章(Ethernet 描述符 / USB / CAN-FD 缓冲布局)。
- 三条线还在犹豫:2.11 选型决策路径 + 2.12 三条线的取舍要点,两小节约 10 分钟读完。
1 · 文档导读与阅读路径
这一章说明本文档的边界:覆盖什么、不覆盖什么、型号怎么读,以及为什么把内容按「流水线」而不是按「功能模块」组织。
1.1 覆盖范围
本文档覆盖从拿到一块瑞萨评估板(或自己画的最小系统板),到固件跑起来、能在断点处停下来、并能量产烧录的完整链路,按三条产品线分别展开:
| 产品线 | 工具链 | 本文档覆盖的开发要点 |
|---|---|---|
| RA(Cortex-M23 / M33 / M85) | e² studio + FSP + Smart Configurator;Renesas Flash Programmer 3.x;E2 / E2 Lite / PG-FP6 | FSP 工程结构、r_ 驱动模型与 uart_api_t 回调、IOPORT 与 PFS 引脚配置、DMAC/DTC、ELC 事件链、System of Clocks 时钟树、MD 引脚与自举模式 |
| RX(自研 RXv1 / v2 / v3) | CC-RX 或 GCC for Renesas RX;CS+(历史工程);Smart Configurator for RX;RFP 3.x | SCIg/SCIi/RSPI/IIC-B 等外设、MTU/TPU 定时器、DTC/DMAC/EDMAC、ETHERC + EDMAC 描述符环、CAN-FD、低功耗四档 |
| RL78(自研 16 位 CISC) | CC-RL(LLVM for Renesas RL78);Smart Configurator for RL78;RFP 3.x | Code Flash 1 KB 块擦除、Data Flash 作 EEPROM、SNOOZE 模式、1 线 on-chip debug、TAU 定时器阵列 |
- 家族与选型:三条线的定位差异、全家族规格速查、料号命名解读与选型决策路径。
- 内核与架构:Cortex-M23/M33/M85、RX 自研内核、RL78 CISC 三者的异常模型、向量表、内存映射与保护单元差异。
- 环境与工程:e² studio / FSP / CC-RX / CC-RL 的分工与版本匹配、工程目录、链接脚本、命令行编译、体积预算。
- 下载与量产:三条下载通道的适用边界、调试器与量产编程器接线、MD 引脚与串行自举、选项字节与量产并发烧。
- 外设与低功耗:SCI/SPI/IIC/ADC/DMA/DTC、定时器与 PWM、RTC 与看门狗、以太网/USB/CAN-FD、四档低功耗与唤醒。
- 硬件与迁移:电源分区、复位、晶振、MD 跳线、调试口布线、CAN 终端电阻、以太网差分走线,以及从 STM32/RL78 移植的改动清单。
1.2 不覆盖什么
以下内容超出本文档范围,需要时请查阅对应官方资料。本文档会明确指出「该去查哪本手册的哪一章」,而不是含糊地说「查手册」:
| 不覆盖的内容 | 该去哪里查 | 原因 |
|---|---|---|
| 每一个寄存器的完整位域定义 | 目标组的 User's Manual: Hardware 的寄存器章节 | 单个外设寄存器表动辄几十页,逐位抄一遍既不可读也必然过期 |
| 电气参数的最大值 / 最小值 | 目标组的 Datasheet 的 Electrical Characteristics 章节 | 测试条件比数值本身更重要,抄条件会误导设计 |
| EtherCAT / USB 协议栈的协议细节 | 协议栈自己的规范文档 + 官网的 Sample Code | 协议本身与 MCU 无关 |
| 电机控制算法(FOC / 无感观测器) | 官网的 Flexible Motor Control Series 应用笔记 | 这是控制理论问题,不是外设驱动问题 |
| RTOS 与中间件的使用 | FSP / RX Driver Package 自带的用户手册 | FreeRTOS / Azure RTOS / ThreadX 各有独立文档 |
| 安全(TrustZone / DLM / 加密)的工程方法论 | User's Manual: Hardware 的 Security 章 + Arm 官方文档 | 这是一个架构决策问题,不能靠本文档几段话讲透 |
本文档在附录 C 里给出的是寄存器组与模块名的定位方式,而不是逐一罗列地址。原因很直接:
瑞萨同一个外设在不同组(例如 RA2A1 与 RA6M4)之间的基址和外设实例数并不完全一致,
把某一组的地址写死,读者换一颗料就会踩坑。需要确切地址时,请用 CMSIS 风格的设备头文件(renesas.h)——
它由 FSP 按你选定的器件生成,是唯一与你的工程严格对应的权威来源。
1.3 命名与型号命名约定
瑞萨三条线的料号命名规则完全不同,而且互相之间没有共同约定 —— 这是跨线移植时最容易出错的地方。RA 的料号结构最规范,RX 用后缀区分组别,RL78 最接近「系列 + 组 + 特征」的传统写法:
| 产品线 | 料号形态 | 拆解方式 |
|---|---|---|
| RA | R7FA6M4AF3CFP | R瑞萨 → 7F带Flash的MCU → A6RA6系列 → M4组 → A特征集 → F1 MB Code Flash → 3 -40~105 ℃ → C质量等级 → FP LQFP100 → 末尾 #AA0 包装/端子材质/生产识别码 |
| RX | R5F565NGTB | R瑞萨 → 5FMCU → 565 RX65 系列 → N 组(RX65N)→ G封装 → T温度等级 → B质量/生产识别 |
| RL78 | R5F10YJ3CFPB | R瑞萨 → 5FMCU → 10 RL78/G1 → Y组别/特征 → J封装 → 3温度等级 → C质量等级 → FP封装 → B生产识别 |
RA 料号里的前 10 个字符就基本决定了资源:R7FA6M4A 这一段里
A6 定系列、M4 定组、A 定特征集、F 定 Flash 容量。而 RX 与 RL78 的关键信息分散在中间与末尾,
且不同年份的组之间字段含义会变。所以 RX / RL78 立项时务必以目标料号的数据手册为准,不要照搬别人的示例。
1.4 事实来源与免责
本文档所有数值型信息来自瑞萨官方公开资料。为了让读者能自己复核,正文里凡出现具体数字,都会写明它出自哪一份资料的哪一节:
| 资料类型 | 官方名称 | 本文档用它做什么 |
|---|---|---|
| 产品数据手册 | RA2 Group Datasheet / RA6M4 Group Datasheet / RX65N, RX651 Groups Datasheet / RL78/G1A Data Sheet | 供电范围、封装与引脚数、Flash/SRAM 容量、运行与待机电流、外设通道数、料号编码规则 |
| 硬件用户手册 | RA2/RA4/RA6 Group User's Manual: Hardware / RX65N, RX651 Group User's Manual: Hardware / RL78/G1A User's Manual: Hardware | 寄存器组构成、向量表结构、时钟树、Flash 组织、选项字节、异常与优先级 |
| 快速设计指南 | RA2 Quick Design Guide / RA8 Quick Design Guide | MD 引脚的两种接法、单芯片与自举模式切换、选项设置存储区在 Code Flash 地址空间里的位置 |
| 工具资料 | Renesas Flash Programmer V3 Release Note / [Upgrade to Version] e² studio / E2 Emulator, E2 Emulator Lite Additional Document | FSP 与 e² studio 的版本对应表、RFP 支持器件与限制、调试器接线与供电能力 |
| 软件包仓库 | renesas/fsp GitHub Releases 与 SUPPORTED_SOFTWARE.md | FSP 模块清单与命名约定(r_ / rm_ / bsp_)、支持的开发板列表 |
瑞萨的工具与软件包版本绑定非常严格:每一个 FSP 版本都声明了一个「最小 e² studio 版本」, 用更旧的 IDE 装新的 FSP 会在构建阶段报出难以定位的错误;反过来更旧的 FSP 配更新的 IDE 也可能缺少器件支持。 本文档写作时的对应关系是 FSP 6.1.0 ↔ e² studio 2025-07、FSP 6.2.0 ↔ e² studio 2025-10、FSP 6.3.0 ↔ e² studio 2025-12。
2 · RA / RX / RL78 家族全景与选型
瑞萨的 MCU 业务不是一个系列,而是三条并行的货架。这一章先把货架摆在桌子上,讲清每条线为什么存在、彼此之间不可替代的地方在哪,再给出可执行的选型路径。
2.1 三条线的定位差异
瑞萨同时经营三条 32 位 / 16 位 MCU 产品线,看起来重叠,实际是三个不同的目标市场。用一句话概括各自的取舍:
| 维度 | RA 系列 | RX 系列 | RL78 系列 |
|---|---|---|---|
| 战略定位 | 先进型(Advanced) | 通用型(General Purpose) | 低功耗型(Low Power) |
| 内核来源 | Arm 授权:Cortex-M23 / M33 / M85 | 自研 RXv1 / RXv2 / RXv3 | 自研 16 位 CISC(Harvard + 3 级流水) |
| 指令集 | Thumb-2 / Armv8-M(含 M 扩展) | RX 自有指令集 | 16 位 CISC 指令集 |
| 生态绑定 | 强绑定 Arm 生态:CMSIS、Arm 调试器、Arm 编译器都能用 | 只认 Renesas 自家工具链(CC-RX / GNURX) | 只认 CC-RL(LLVM for Renesas RL78) |
| Flash 容量区间 | 128 KB ~ 2 MB | 128 KB ~ 4 MB | 16 KB ~ 512 KB |
| SRAM 容量区间 | 16 KB ~ 1 MB | 8 KB ~ 1 MB | 2 KB ~ 32 KB |
| 主频区间 | 48 MHz ~ 1 GHz | 32 MHz ~ 240 MHz | 最高 32 MHz |
| 待机电流量级 | Deep Software Standby 可进 μA 级 | STOP / STANDBY 可进 μA~10 μA 级 | STOP 典型 0.23 μA,这是它的招牌 |
| 安全能力 | TrustZone(Armv8-M 起)+ DLM 生命周期管理 + SCE 加密引擎 | Trusted Secure IP(部分组通过 NIST FIPS 140-2 CMVP 认证) | 有 Flash 保护与防拆检测,功能安全认证件可选 |
| 代表型号 | RA2A1、RA4E2、RA6M5、RA8D1 | RX23W、RX65N、RX72M | RL78/G1A、RL78/G23、RL78/L23 |
很多人以为「反正是 C 语言,编译器能换」。实际上:
RA 换成 RX,你连 CMSIS 的头文件都用不了(RX 没有 NVIC 那套 API,中断优先级用 ICU 的 IPL);
RX 换成 RL78,连 uint32_t 之外的类型都变得可疑(16 位数据总线、指针宽度与对齐规则都不同)。
第 3 章会把这些差异逐条摊开,第 17 章给出移植清单。
2.2 全家族规格速查表
下表把三条线的主流代表型号拉平对比。所有数字取自官网产品页与对应组的数据手册「Features / Outline of Specifications」页, 同一行内的 Flash / SRAM 是该料号的容量档,不同容量档是不同料号而不是同一颗料的可配置项。
| 型号 | 内核 | 最高主频 | Code Flash | SRAM | 供电范围 | 定位与关键外设 |
|---|---|---|---|---|---|---|
| RA2A1 | Cortex-M23 | 48 MHz | 256 KB | 32 KB | 1.6~5.5 V | RA2 通用主力:USB、CAN、24 位 ∑-△ ADC、16 位 SAR ADC、电容触控、安全功能 |
| RA2L1 | Cortex-M23 | 48 MHz | 128 KB | 16 KB | 1.6~5.5 V | 低功耗档 RA2,RA2L2 可到 512 KB / 48 KB |
| RA4E1 / RA4E2 | Cortex-M33 | 80~100 MHz | 512 KB | 64~128 KB | 2.7~3.6 V | 高性能通用:USB、CAN、TrustZone(官方消费电子页标注 RA4E1 100 MHz / 128 KB RAM) |
| RA4M1 | Cortex-M33 | 100 MHz | 128 KB | 40 KB | 2.7~3.6 V | 官方选型表里 RA4T1 为 100 MHz / 256 KB / 40 KB,RA4M2 为 100 MHz / 1 MB / 128 KB |
| RA6M4 | Cortex-M33 | 200 MHz | 512 KB~1 MB | 256 KB | 2.7~3.6 V | TrustZone + USB + CAN + 以太网;100 引脚料号的 I/O 数为 76 路 |
| RA6M5 | Cortex-M33 | 200 MHz | 2 MB | 512 KB | 2.7~3.6 V | CAN-FD、QSPI/OSPI、SSIE 串行音频、SDHI、SCE9 加密引擎、2 个 ADC12 + 2 个 DAC12 |
| RA6M3 | Cortex-M4 | 120 MHz | 1~2 MB | 640 KB | 2.7~3.6 V | TFT 控制器 + 2D 加速 + JPEG 解码;USB HS 主机/设备各 1 路、SDHI ×2、Ethernet |
| RA6M1 | Cortex-M33 | 240 MHz | 512 KB | 64 KB | 2.7~3.6 V | 官方选型表给出的 RA6 组最高频主频型号 |
| RA8M1 | Cortex-M85 | 480 MHz | 1 MB | 672 KB | 1.62~3.3 V | Helium SIMD、CEU 摄像头接口、高速 USB、CAN-FD、以太网、SDHI |
| RA8D1 | Cortex-M85 + M33 | 1 GHz | 1~2 MB | 2 MB | 1.62~3.6 V | 双核(1 GHz M85 + M33),带以太网;RA8D2 更集成 Ethos-U55 NPU |
| RX65N | RXv2 | 120 MHz | 512 KB~2 MB | 256~640 KB | 2.7~3.6 V | Ethernet 10/100M、USB 2.0 Host/Function/OTG、CAN ×2、SD Host/Slave、QSPI、TFT 控制器 + 2D 引擎 |
| RX72M | RXv3 | 240 MHz | 4 MB | 1 MB | 2.7~3.6 V | EtherCAT 从机控制器;CoreMark 1396;双 2 MB Bank;单 Bank 可跑到 120 MHz;加密引擎 |
| RX72T | RXv3 | 240 MHz | 4 MB | 1 MB | 2.7~3.6 V | EtherCAT + GLCDC 的显示型组合 |
| RX23W | RXv3 | 120 MHz | 512 KB | 64 KB | 2.7~3.6 V | 5 V 供电、2 路电机、Crypto Engine、BLE 5 兼容(RX230 另有 BT5 LE) |
| RL78/G1A | 16 位 CISC | 32 MHz | 16~64 KB | 2~4 KB | 1.6~3.6 V | 28 通道 12 位 ADC(总误差 ±1.7 LSB、转换 3.375 μs)、1 线 on-chip debug、3×3 mm 25 LGA |
| RL78/G23 / L23 | 16 位 CISC | 32 MHz | 128~512 KB | 8~32 KB | 1.6~5.5 V | 更大容量档;e² studio 2025-10 起新增 RL78/L23-128K 支持 |
同一组里不同容量档是不同料号。以 RA6M4 为例,数据手册的产品表把 Flash 拆成三档:
D = 512 KB、E = 768 KB、F = 1 MB,三档的 SRAM 都是 256 KB、Data Flash 都是 8 KB,
温度等级分 2(-40~85 ℃)与 3(-40~105 ℃),封装分 FM(LQFP64)/ FP(LQFP100)/ FB(LQFP144)/ BQ(FBGA64)/ BM(FBGA144)。
选型时先定「组」,再按封装与温度挑料号,不要反过来。
2.3 RA2:通用与成本敏感的主力
RA2 是瑞萨「先进型」货架里最便宜的一档,48 MHz Cortex-M23,供电范围 1.6~5.5 V 是它最大的卖点 —— 意味着它可以直接挂在 5 V 系统里做主控, 省掉电平转换,这在同价位 MCU 里不多见。
| 子组 | 内核 / 主频 | Flash / SRAM | 典型用途 | 值得注意的资源 |
|---|---|---|---|---|
| RA2A1 | Cortex-M23 / 48 MHz | 256 KB / 32 KB | 带 USB + CAN 的通用控制、传感节点 | 24 位 ∑-△ ADC + 16 位 SAR ADC 双模 ADC、32~64 引脚、电容触控 |
| RA2E1 | Cortex-M23 / 48 MHz | 128 KB / 16 KB | 成本敏感的中小容量控制 | 官方文档给出的「30 通道电容式触控」是其宣传重点之一 |
| RA2L1 / RA2L2 | Cortex-M23 / 48 MHz | 128 KB~512 KB / 16~48 KB | 低功耗、长待机 | 官方选型表里 RA2L2 为 512 KB / 48 KB |
| RA2T1 | Cortex-M4 / 100 MHz | 512 KB / 96 KB | 需要算力但不想上 RA4 的场景 | 注意:RA2T1 是 Cortex-M4 而不是 M23,跨子组迁移时注意这条 |
RA2 用的是 Cortex-M23,没有 TrustZone、没有 MPU 的安全与非安全双实例。
瑞萨技术支持在问答里明确说过:RA2 系列不支持 DLM 状态迁移与 TrustZone,所以不需要把 MD 引脚连到 SWCLK 去驱动 DLM 状态,
MD 引脚默认上拉(P201 的 PFS 初始值对应输出使能位已置位),外部上拉电阻可以省掉。
如果你选 RA2 只是为了便宜,那没问题;但如果你的产品后续要过网络安全认证,这条路一开始就走不通。
2.4 RA4:高性能通用型
RA4 换上了 Cortex-M33,供电范围收窄到 2.7~3.6 V,主频覆盖 80~120 MHz。官方选型表里 RA4 的成员较多,
按「系列字母 + 数字」区分定位:E 偏通用、M 偏电机、T 是电机控制 ASSP、C 是通用低成本、L 是低功耗、W 是无线。
| 料号 | 内核 / 主频 | Flash / SRAM | 说明 |
|---|---|---|---|
| RA4T1 | Cortex-M33 / 100 MHz | 256 KB / 40 KB | 电机控制 ASSP,带高分辨率输出定时器 |
| RA4E1 / RA4L1 | Cortex-M33 / 80 MHz | 512 KB / 64~96 KB | 通用档,官方消费电子页标注 RA4E1 为 100 MHz、128 KB RAM、48~64 引脚 |
| RA4M1 | Cortex-M33 / 100 MHz | 128 KB / 40 KB | 电机档的中容量型号 |
| RA4M2 / RA4E2 | Cortex-M33 / 100 MHz | 512 KB~1 MB / 128 KB | 带 TrustZone,官方消费电子页把它们列为「USB / CAN / TrustZone」的典型组合 |
| RA4M3 | Cortex-M4 / 120 MHz | 512 KB / 64 KB | 注意是 Cortex-M4,不是 M33 |
| RA4C1 | Cortex-M4 / 48 MHz | 256 KB / 32 KB | 通用低成本档 |
2.5 RA6:高性能 + AI / 以太网
RA6 是「先进型」货架的主力:主频 120~240 MHz,Flash 从 512 KB 到 2 MB,SRAM 最高 512 KB,供电 2.7~3.6 V。 这一代的分水岭是有没有 TrustZone、有没有 USB HS、有没有以太网 MAC。
| 特性 | RA6M4 / RA6M5(Cortex-M33) | RA6M3 / RA6T3 / RA6E1(Cortex-M4) |
|---|---|---|
| 最高主频 | 200 MHz(RA6M1 为 240 MHz) | 120 MHz |
| TrustZone | 支持(Armv8-M 安全与非安全世界 + 双 MPU 实例) | 不支持(Cortex-M4 无 Armv8-M 安全扩展) |
| 以太网 | 1 路 10/100M MAC(ETHERC)+ EDMAC,部分组含 IEEE 1588 PTP(EPTPC) | RA6M3 有 Ethernet;RA6E1 官方参数表未列 Ethernet |
| USB | USB 2.0 全速(部分组含高速) | RA6M3 有 USB HS 主机/设备各 1 路 + USB FS 主机/设备各 1 路 |
| CAN | CAN-FD(RA6M5 为 2 通道) | 经典 CAN(ISO 11898-1,最多 32 个邮箱) |
| 数据搬运 | DMAC ×8 + DTC + ELC 事件链 | DMAC + DTC |
| 模拟 | 2 个 12 位 ADC + 2 个 12 位 DAC(RA6M5) | 2 个 12 位 ADC(RA6M3)+ 2 个 12 位 DAC |
| RAM 规模 | 256 KB(RA6M4)/ 512 KB(RA6M5),带 ECC 或奇偶校验 | 640 KB(RA6M3),可挂 SDRAM |
RA6M5 是 200 MHz 的 Cortex-M33, 它能做的是「跑 Cortex-M 神经网络库」这一类轻量推理(CMSIS-NN / TFLM 这类),而不是「跑视觉模型」。 真正的边缘 AI 需要 Cortex-M85 的 Helium SIMD(RA8 系列),或者外挂 NPU(RA8D2 集成 Ethos-U55)。 官方在 RA 家族页上给的路线图就是:CPU-based AI(RA2/RA4/RA6)→ SIMD 加速(RA8M/E)→ NPU 加速(RA8D)。 选型时如果需求里写了「AI」,先确认指的是哪一种。
2.6 RA8:M85 与边缘 AI
RA8 是瑞萨目前最先进的货架,Cortex-M85(Armv8.1-M,带 Helium SIMD 与 MVE),主频 480 MHz 起步,部分组到 1 GHz, 配套 Cortex-M33 做安全协处理或实时协处理,双核形态(RA8E2 / RA8D1 / RA8D2)是它最有特色的地方。
| 料号 | 内核 / 主频 | Flash / SRAM | 特色 |
|---|---|---|---|
| RA8T1 | Cortex-M85 / 360 MHz | 1 MB / 544 KB | 带 TrustZone 的高速通用档 |
| RA8M1 | Cortex-M85 / 480 MHz | 1 MB / 672 KB | Helium + CEU 摄像头接口 + 高速 USB + CAN-FD + 以太网 + SDHI;1.68~3.3 V |
| RA8E1 / RA8T2 | Cortex-M85 / 480 MHz | 1 MB / 2 MB | SRAM 更大的通用档 |
| RA8E2 | Cortex-M85 + M33 / 1 GHz | 1 MB / 2 MB | 带并行 RGB 接口的图形 TFT-LCD 控制器 + 2D 绘图引擎;224 引脚封装 |
| RA8D1 | Cortex-M85 + M33 / 1 GHz | 1 MB / 2 MB | 带以太网的双核档 |
| RA8D2 | Cortex-M85 + M33 / 1 GHz | 1 MB / 2 MB | 集成 Ethos-U55 NPU,真正跑得动视觉模型的组合 |
| RA8P1 | 安全专用 | — | 瑞萨在 RA 家族页上单独列出的安全 / Cyber Resilience Act 方向 |
2.7 RX:自研 32 位内核的通用线
RX 系列的核心竞争力是电机控制与工业网络。它有一整套瑞萨自研的、围绕电机与网络做过深度优化的定时器和通信外设, 这是 RA 靠通用外设组合做不到的。
| 特性 | RX 系列的差异化点 | 对应型号 |
|---|---|---|
| 多轴电机定时器 | RX23T(1 电机)、RX23E-B(2 电机)、RX72M(4 电机)、RX65W-A(4 电机) | RX72M / RX72T |
| EtherCAT | RX72M 内置 EtherCAT 从机控制器,CoreMark 1396 @240 MHz,单 Bank 最快 120 MHz | RX72M |
| 工业以太网 | RX66N / RX72T 带 Ethernet + GLCDC;RX65N 带 Ethernet + TFT 控制器 + 2D 引擎 | RX66N / RX72T |
| 三角函数加速器 | RX72M 内置 sin / cos / arctan / hypot 硬件加速器与寄存器组保存功能,用于高精度电机控制 | RX72M / RX72T |
| 存储结构 | 双 Bank,可在 A Bank 执行代码的同时擦写 B Bank(背景操作 BGO),支持固件 OTA | RX65N / RX72M |
| Flash 零等待 | 50 MHz 以内零等待;100 MHz 以内 1 等待;100 MHz 以上 2 等待 | RX65N / RX651 |
| 安全认证 | RX65N 的 Trusted Secure IP 通过 NIST FIPS 140-2 Level 3 CMVP 认证 | RX65N / RX651 |
| 调试串口资源 | RX65N 的 SCI 共 13 通道(SCIg 10 + SCIh 1 + SCIi 2) | RX65N |
2.8 RX65N 与 RX72M:网络与电机主力
这两颗是 RX 货架上最常被选的两颗,定位完全不同,值得分开说。
| 对比项 | RX65N(RXv2) | RX72M(RXv3) |
|---|---|---|
| 主频 | 120 MHz | 240 MHz |
| 性能 | 240 DMIPS,单精度 FPU | CoreMark 1396(EEMBC),双精度 FPU |
| Code Flash | 512 KB / 768 KB / 1 MB / 1.5 MB / 2 MB | 4 MB(两个 2 MB Bank) |
| SRAM | 256 KB / 640 KB | 1 MB,RX 组内最高 |
| Data Flash | 32 KB,可重复编程 10 万次 | 同代规格 |
| 工业网络 | Ethernet 10/100M(MII 或 RMII)+ IEEE 1588 Magic Packet 检测 | EtherCAT 从机控制器 |
| 电机 | TPUa 16 位 + MTU3,GLCDC + DRW2D 显示 | 4 电机;三角函数加速器;寄存器组保存 |
| 封装 | 100 ~ 176 引脚 | LQFP176 / BGA176 / BGA224(RX 组首个 224 引脚 BGA) |
| 电压 | 2.7~3.6 V 单电源 | 2.7~3.6 V 单电源 |
| 典型应用 | 工业网关、PLC、网络打印机、读卡器、HMI | AC 伺服、通用逆变器、PLC、运动控制器、工业 IoT 网关 |
RX72M 的 Flash 是两个 2 MB 的 Bank,
RX Driver Package 的固件更新示例(ETG.5003 FoE)就是利用这一点做 A/B 切换的。
但注意官网数据手册对 Flash 读取速率有明文规定:单 Bank 模式下最快要降到 120 MHz 才能零等待——
做 EtherCAT 从机时如果为了 240 MHz 切到双 Bank,读 Flash 的等待周期与 Bank 布局都要重新核对,别直接抄 240 MHz 的时钟配置。
2.9 RL78:低功耗 16 位 CISC
RL78 是瑞萨拿来对标 8 位与 16 位 MCU 的货架。它的宣传点是同等性能下功耗最低:官方白皮书给出的 「Stop 模式(无时钟运行、RAM 内容保持)0.23 μA」与「运行 NOP 指令时 66 μA/MHz、CPU Run 模式 144 μA/MHz」, 在 32 MHz 下达到 51.2 DMIPS(Dhrystone 1.6 DMIPS/MHz)。
| 特性 | RL78/G1A 的官方规格 | 对设计的影响 |
|---|---|---|
| 内核 | 16 位 CISC(Harvard 结构,3 级流水) | 86% 的指令能在 1~2 个时钟内执行完,单周期指令比多数 16 位 MCU 多 |
| 乘除法 | 乘法 16×16→32 位 1 个时钟;MAC 2 个时钟;内置库函数 | 做滤波与 FFT 时比同档 MCU 快得多 |
| 桶形移位器 | 16 位桶形移位器,移位与循环移位 1 个时钟 | 移位密集的算法(CRC、加密)受益明显 |
| 供电 | 1.6 ~ 3.6 V(RL78 全家族号称 1.6~5.5 V),Data Flash 编程支持 1.8 V | 能直接吃单节锂电与低压电池 |
| 运行电流 | 66 μA/MHz | 32 MHz 满速约 2.1 mA 量级(不含外设) |
| STOP 电流 | 0.23 μA(RAM 保持);LVD 使能时 0.31 μA | 纽扣电池设备可以放几年 |
| HALT 电流 | 0.57 μA(RTC + LVD 运行) | 需要定时唤醒与日历功能时的低功耗档 |
| SNOOZE 电流 | 0.7 mA(UART)/ 0.6 mA(ADC) | 这是 RL78 最独特的一档:串口与 ADC 能在 CPU 停下时继续工作 |
| 调试 | 1 线 on-chip debug | 小封装(20~128 引脚)也能全速调试,不必留 4 线 JTAG |
| Code Flash | 16~64 KB,块大小 1 KB,支持安全启动换写与 Flash 屏蔽窗口 | 擦除粒度细,不用为了改几十字节去擦整页 |
| Data Flash | 4 KB,擦写寿命典型 100 万次(G1A 数据手册标注 1 Million typ.) | 可以直接当 EEPROM 用(校准值、序列号、配置) |
| ADC | 12 位 × 28 通道,总误差 ±1.7 LSB(典型),转换时间 3.375 μs,内部基准 1.45 V | 多路传感器巡采不用外挂芯片 |
| 安全 | 支持 IEC/UL 60730 家电器具安全标准配套的非法存储器访问检测 | 家电与白色家电产品可直接受益 |
很多从 STM32 过来的人以为 RL78 只有 STOP 和 STANDBY。RL78 实际有 RUN / HALT / SNOOZE / STOP 四段, 而且 SNOOZE 是从 STOP 模式进入的:CPU 仍然停着,但高速片内振荡器被唤醒,串口通信与 ADC 转换照常进行, 等数据收完 / 转换完再唤醒 CPU。这解决了「低功耗待机」与「要随时能收串口数据」这对矛盾。 细节见第 15 章 15.4 节。
2.10 料号怎么读
把三条线的命名规则放在一起对照读,这是立项阶段最容易出错的一步 —— 尤其在同一个项目里同时用 RA 和 RX 时。
| 字段 | RA(例:R7FA6M4AF3CFP) | RX(例:R5F565NGTB) | RL78(例:R5F10YJ3CFPB) |
|---|---|---|---|
| 厂商与类型 | R 瑞萨 + 7F 带 Flash 的 MCU | R 瑞萨 + 5F MCU | R 瑞萨 + 5F MCU |
| 系列 / 组 | A6 系列 + M4 组 | 565 RX65 系列 + N 组(RX65N) | 10 RL78/G1 + Y 组 |
| 特征集 | A(功能集标识,不同字母差别很大) | 隐含在组里 | 隐含在组里 |
| Flash 容量 | F = 1 MB(D=512 KB / E=768 KB / F=1 MB) | 需要查该组的数据手册 | 需要查该组的数据手册 |
| 温度等级 | 3 = -40~105 ℃(2 = -40~85 ℃) | T(部分料号) | 3(同上语义) |
| 质量等级 | C = 工业级 | B 等 | C 工业级 |
| 封装 | FP = LQFP100(FM64 / FB144 / BQFBGA64 / BMFBGA144) | G(LQFP 等,需查表) | FP(LQFP) |
| 包装与端子 | #AA0:B整箱托盘 / H卷带;A纯锡 / C其他 | 末尾 B 等 | B 生产识别码 |
① 把 RA2T1 当成 Cortex-M33 —— 官方选型表里 RA2T1 与 RA4T1 都是 Cortex-M4,只有 RA4T1 之后带 M33 的才是 Armv8-M。
② 跨系列套用容量字母 —— RA 的 D/E/F 只在 RA 组内自洽,换一组(例如 RA8)字母含义就不同。
③ 只看 # 之前的字符 —— RA 料号 # 之后才是包装与端子材质,采购与贴片环节必须按完整料号下单,少一位就可能买到托盘装而不是卷带。
2.11 选型决策路径
把上面这些收敛成六个判断节点的决策树,从上往下问,命中即停:
三条不成文经验:
- 第一次接触瑞萨就买官方评估板,别直接从最小系统板起步。RA 的 EK 板、RX 的 Starter Kit+ 都自带 E2 Lite 的板载电路与排针,能省掉一半接线类故障(尤其是 MD 与 VCL,见 7.4)。
- RA 系列先定「组」再定「容量档」。同组不同容量档差价极小,后期发现 Flash 不够的成本远高于差价;而跨组(RA4M1 → RA4M2)的迁移要重新核对引脚复用。
- RX 项目要一开始就确定用 CC-RX 还是 GNURX。RX72M 的官方启动手册默认给 CC-RX v3.01.00,而 GCC for Renesas RX 需要单独注册下载;两者工程格式与调试方式不同,中途换工具链比重写代码更麻烦。
- RL78 项目先确认编译器路线。瑞萨已明确停止 GCC for Renesas RL78 的新工程创建功能,新项目一律走 LLVM for Renesas RL78(CC-RL)。存量 GCC 工程仍可导入并编译,但不要再基于它开新项目。
2.12 三条线之间的取舍要点
最后把「为什么选这条线而不是那条线」的判断依据固化下来。这一节是给已经定了大方向、需要在评审会上把理由说清楚的人准备的。
| 如果你的约束是…… | 选 | 因为 | 要接受的代价 |
|---|---|---|---|
| 团队已有 Arm 生态资产(CMSIS 库、J-Link/调试器、Arm 编译器、KEIL 工程) | RA | RA 是唯一能无缝复用 Arm 生态的货架,RX 与 RL78 都不行 | RA 的封装与外设映射与 STM32 不同,引脚要重画 |
| 产品要做 EtherCAT 从机或多轴伺服 | RX72M | 内置 EtherCAT 从机控制器 + 4 电机定时器 + 三角函数加速器 | 只能用 CC-RX / GNURX,没有 Arm 生态 |
| 产品是纽扣电池供电的传感器节点,待机以月计 | RL78 | STOP 0.23 μA + 1 线调试 + 1 KB 擦除粒度 + Data Flash 当 EEPROM | 只有 32 MHz、Flash 最大 512 KB、没有 TrustZone |
| 产品要过网络安全认证且未来要 OTA | RA6M5 / RA8 | Armv8-M TrustZone + DLM 生命周期管理 + SCE 加密引擎 | 供电收到 2.7~3.6 V,5 V 系统要加电平转换 |
| 产品要在5 V 系统里直接做主控 | RA2 | RA2 供电 1.6~5.5 V,GPIO 与主控同步供电 | 48 MHz、没有 TrustZone、没有 MPU 双实例 |
| 产品要在5 V 系统里做主控但又要以太网 | RX23W(5 V)或 RA6(需电平转换) | RX23W 官方标注 5 V 供电且带 2 路电机与 Crypto Engine | RX 生态绑定;RX23W 无以太网 |
| 产品是 HMI / 带屏 | RA6M3 / RA8E2 | RA6M3 有 TFT 控制器 + 2D 加速 + JPEG 解码;RA8E2 有并行 RGB + 2D 引擎 | 这两颗都不是最省电的选择 |
| 团队只有 Python / Web 背景,要快速出样 | RA6 + FSP + e² studio | FSP 的图形化配置器与回调模型最容易上手,示例代码最多 | FSP 的代码生成会覆盖手改的配置文件,要学会只在 HAL 层写代码 |
如果这是一个新立项、没有历史包袱的项目, 默认答案是 RA4 或 RA2:文档最多、示例最全、社区最活跃、Arm 生态现成、 供电范围和封装选择也都够用。只有在下面三种情况下才需要往 RX 或 RL78 走: 明确要做 EtherCAT / 多轴伺服(走 RX)、明确要纽扣电池几年待机(走 RL78)、 或者已有大量 RX/RL78 历史代码资产需要延续。不要因为「RA 主频更高」就默认选 RA —— 主频在绝大多数控制类产品里根本不是瓶颈,低功耗、工具链熟悉度与供应链才是。
3 · 内核与架构差异
这一章是移植前必须读的一章。RA / RX / RL78 三条线用的是三种完全不同的内核,差异不只是「换个寄存器基址」, 而是异常模型、指令集、内存保护机制三条底层规则都不同。
3.1 三种内核的定位
先说清楚一件容易被忽略的事:RA 家族内部也不是同一种内核。RA0/RA2 用 Cortex-M23,RA4/RA6 用 Cortex-M33(部分组用 M4),RA8 用 Cortex-M85。 所以「我从 STM32F4 迁到 RA」这种说法本身就不成立 —— 必须先确认目标 RA 组用的是哪个内核。
| 产品线 / 组 | 内核 | 架构版本 | 关键能力 | 对开发的影响 |
|---|---|---|---|---|
| RA0 / RA2 | Cortex-M23 | Armv6-M | 32~64 MHz,低功耗,无安全扩展 | 指令集是 Thumb-2 的子集,没有 DSP 指令、没有 FPU、没有 MPU 的安全扩展 |
| RA4M3 / RA6M3 / RA4C1 / RA6E1 | Cortex-M4 | Armv7-M | 48~120 MHz,单精度 FPU,DSP 指令 | 与 STM32F4 最接近,CMSIS 代码可复用度最高 |
| RA4 / RA6(T/M/W 组) | Cortex-M33 | Armv8-M | 80~240 MHz,TrustZone + MPU 双实例 | 内存要分成安全与非安全两套视图,链接脚本与启动代码都要改 |
| RA6M5 / RA8 | Cortex-M85 | Armv8.1-M | 480 MHz~1 GHz,Helium SIMD / MVE | 能用 CMSIS-NN 的向量化路径,做实时音频与轻量视觉 |
| RX(v1 / v2 / v3) | RX 自研 | Renesas 自有 | 32~240 MHz,FPU、定点加速、三角函数加速 | 没有 NVIC:中断优先级用 ICU 的 IPL 寄存器组,异常入口名也不同 |
| RL78 | RL78 自研 | Renesas 自有 CISC | 最高 32 MHz,3 级流水,乘法 1 周期 | 16 位数据总线;没有 FPU;1 线调试 |
RA2T1 与 RA4M3 都是 Cortex-M4,而 RA4T1 却是 Cortex-M33。 这意味着在 RA4 货架内部,从 RA4M1(M33)迁到 RA4M3(M4)时, 你必须把代码从 Armv8-M 降级到 Armv7-M 重新编译,链接脚本里的内存视图也要改回去。 同系列不同组之间的迁移不是「换封装」那么简单。
3.2 指令集与编译器差异
指令集差异决定了三件事:能不能用 DSP 指令、浮点怎么算、以及编译器能生成什么代码。
| 对比项 | RA(Cortex-M) | RX(自研) | RL78(CISC) |
|---|---|---|---|
| 指令集 | Thumb-2;M4/M33 带 DSP 扩展;M85 带 MVE 向量扩展 | RX 自有指令集,支持 32 位与 16 位混合编码 | 16 位 CISC 为主,含 16 位桶形移位器 |
| 浮点 | M4/M33 单精度 FPU;M85 带 Helium 的向量浮点 | RX65N 单精度、RX72M 双精度 FPU(有硬件乘累加与三角函数加速) | 无硬件 FPU,全部走软件库 |
| 整数乘除 | Cortex-M 的 M 扩展含 DSP 指令;除法走 SDIV/UDIV 指令 | 16×16→32 乘法单周期;除法有库函数 | 16×16→32 单周期;MAC 2 周期;除法为库函数 |
| C 标准库 | 标准 libc,与 Arm 工具链一致 | CC-RX 自带库(libc 与 libm) | CC-RL 自带库,含 16 位专用的数学函数 |
| 编译器选项 | -mcpu=cortex-m33 / -mthumb 等 | CC-RX 有 -mcpu=rx 类选项;GNURX 用 -mcpu=rx | CC-RL 有 std=(C99/C11)与优化等级 |
printf 支持 | 完整浮点格式化(需链接 -u _printf_float) | CC-RX 支持 | CC-RL 的 printf 功能有限,浮点需重定向到自定义实现 |
如果你现有代码库里有大量浮点运算(PID、矩阵、Kalman 滤波), RA2 与 RL78 都会让你痛苦:RA2 只有 Cortex-M23(无 FPU), RL78 连 32 位乘法都不是单周期(要拆成两个 16 位半字运算)。 这种场景直接选 RA4(Cortex-M33 带 FPU)或 RX65N/RX72M。
3.3 异常模型与向量表
这一节是移植时最容易「看起来能跑但行为诡异」的地方。三种内核的异常模型完全不同:
- RA(Arm):标准 Armv7-M / Armv8-M 异常模型。向量表前 16 项是固定地址的系统异常(栈顶、Reset、NMI、HardFault 等),
外设中断从第 16 项开始。中断优先级由 NVIC 的
IPR寄存器组控制,FSP 通过__NVIC_SetPriority(IRQn, level)设置。 - RX:没有 NVIC。中断优先级由 ICU(Interrupt Controller Unit)管理,通过
IPL寄存器组设置, 优先级级别数与 RA 不同。向量表里同样有系统异常区,但外设异常的编号方式与 Arm 不同。 - RL78:可屏蔽中断由硬件优先级寄存器控制,没有 Arm 那套 NVIC。 向量表按「可屏蔽中断 + 不可屏蔽中断」分组排列,入口地址是固定地址表。
| 对比项 | RA(Cortex-M33) | RX(自研) | RL78(CISC) |
|---|---|---|---|
| 中断控制器 | NVIC(Cortex-M 内置) | ICU(独立外设) | 中断控制器(内置) |
| 优先级级数 | 16 级(IPL0~IPL15 的等价实现) | 多级 IPL(具体级数按组查用户手册) | 16 级可屏蔽中断优先级 |
| 优先级语义 | 数值越小优先级越高(NVIC 标准) | IPL 值越小优先级越高 | 数值越大优先级越高(与 Arm 相反) |
| 嵌套 | 支持抢占与嵌套,需显式配置 | 支持嵌套,需配置 | 支持,需配置 |
| 向量表位置 | VTOR 指向,RA 固定在起始地址 | 固定地址表(在 Code Flash 内) | 固定地址表(在 Code Flash 内) |
| 快速中断 | 无(RA 上没有类似 FIQ 的机制) | 有(FE 级别,Fast Error / Fast Interrupt) | 有(FIQ 级别) |
Arm 的 NVIC 与 Renesas 自研内核的 IPL 都是「数字越小优先级越高」; 而 RL78 的可屏蔽中断优先级寄存器是「数字越大优先级越高」。 移植代码时如果直接把「优先级」当成一个无量纲的整数照抄,在 RL78 上会得到完全相反的优先级排序, 现象是「设了高优先级的回调反而后执行」,而且不会有任何编译错误或警告。 RL78 移植时,所有优先级赋值必须逐条重读目标函数的文档。
3.4 内存映射与保护单元
内存映射是「换一颗料就出事」的重灾区。RA 的 Code Flash 与 SRAM 容量随组变化很大,而 RX 的地址空间里有专门的外部总线区, RL78 则有一个概念上完全不同的空间:把「映射到 0x00000~0x0FFFF 的区域」叫做 ID 空间。
| 区域 | RA(Cortex-M33) | RX(自研) | RL78(CISC) |
|---|---|---|---|
| Code Flash | 映射到 0x00000000 起的地址空间(有别名区) | 映射到 0x00000000 或 0x08000000 起 | 映射到 0x00000 起(ID 空间,64 KB) |
| SRAM | 按容量映射,RA6M5 可到 512 KB | 按容量映射,RX72M 可到 1 MB | 映射到 0xFE00 或 0xFE10 起(看组) |
| Data Flash | 独立于 Code Flash,用于模拟 EEPROM(RA6M4 为 8 KB) | 独立(RX65N 为 32 KB,可重编程 10 万次) | 独立,4 KB,擦写 100 万次(typ.) |
| 外部总线 | 部分组有外部总线控制器(异步/同步 SRAM) | 8 位外部总线,最高 60 MHz;RX65N 另有 128 MB SDRAM 区 | 无 |
| 保护机制 | MPU(Cortex-M33 起:安全与非安全各 8 个区域,可设只读/不可执行) | MPU 功能保护块 + 寄存器写保护(保护重要寄存器不被误写) | 受保护区域 + ID 空间禁止执行非受保护代码 |
| ECC / 校验 | 部分 SRAM 带 ECC 或奇偶校验 | 部分组有 ECC | 一般无,靠软件 CRC 保护 |
3.5 缓存与 Flash 等待
Flash 等待周期这件事,在瑞萨三条线上的表现完全不同,是「提高主频后开始随机死机」这类问题的根因。
| 产品线 | Flash 读取的规则 | 工程上的做法 |
|---|---|---|
| RA(RA6M4 等) | FCLK 独立于 ICLK:CPU 跑 200 MHz 时,FCLK 仍可只跑 50 MHz(数据手册给出的 FCLK 范围上限) | 把 FCLK 配到 Flash 手册允许的最高值,再让 CPU 通过 cache / 预取获得性能;不要盲目把 FCLK 拉满 |
| RX65N / RX651 | 数据手册明文:50 MHz 以内零等待;100 MHz 以内 1 等待;100 MHz 以上 2 等待 | 在 200 MHz 以下用双 Bank 时读取要按 120 MHz 的等待配置算,不能沿用 240 MHz 的配置 |
| RL78 | 32 MHz 下 Flash 读取不需要等待(官方给出的是 1.8 V Flash 编程与 boot swap 支持) | Data Flash 可在低压下编程,不需要停机 |
① FCLK 与 ICLK 的关系没搞清 —— RA 上 ICLK 与 FCLK 是两条独立的时钟,
把 ICLK 从 48 MHz 提到 200 MHz 而忘了同步调整 FCLK 的等待设置,就会触发 Flash 读取错误。
② Flash 编程/擦除期间的中断响应 —— 擦写 Flash 时 CPU 会 stall,
如果你在擦写期间用了一个基于定时器中断的 timeout,它会迟到甚至丢,现象是「偶尔卡死」。
③ PLL 未锁定就切时钟 —— PLL 锁定等待没配对,主频会短暂跑飞。
3.6 移植影响:哪些代码能直接搬
把「能不能搬」按模块拆开,结论比「整包能编译通过」实用得多:
| 代码模块 | STM32 → RA | STM32 → RX | STM32 → RL78 | 原因 |
|---|---|---|---|---|
| 纯算法逻辑(滤波、协议解析、状态机) | 直接可用 | 直接可用 | 直接可用 | 不碰硬件,也不依赖 int 宽度以外的平台特性 |
| 业务层 HAL 封装(自己封的 HAL) | 直接可用 | 改接口名 | 需重写 | RX 的 HAL 库接口名不同;RL78 需要考虑 16 位宽度 |
CMSIS 核心头(core_cm3.h 等) | 可用(改 __CM 宏) | 不可用 | 不可用 | 只有 Arm 内核提供 CMSIS |
| NVIC 相关代码 | 可用 | 必须改成 ICU | 必须重写 | 只有 Arm 有 NVIC |
| SVC / PendSV 异常 | 可用 | 不可用 | 不可用 | 这两个是 Arm 特有的异常类型 |
| 位带(bit-band)操作 | 可用 | 不可用 | 不可用 | Arm Cortex-M3/M4 特性,M33 上已移除 |
| DMA 通道配置代码 | 重写 | 重写 | 重写 | 三条线的 DMA 架构完全不同 |
| 寄存器直接访问 | 改基址与位定义 | 全部重写 | 全部重写 | 外设实例数、寄存器名、位域都不通用 |
| FreeRTOS 移植层(portmacro) | 用官方 Arm 移植层 | 用 Renesas 官方 port | 用官方 RL78 port | 每个内核都有官方 port,不要自己写 |
3.7 架构差异速查
把本章压缩成一张可以贴在屏幕边上的速查表:
| 如果你要改这个…… | RA | RX | RL78 |
|---|---|---|---|
| 中断优先级设置 | __NVIC_SetPriority(IRQ, n),n 小优先级高 | 写 IPL 寄存器组 | 写优先级寄存器,n 大优先级高 |
| 使能/禁用全局中断 | __disable_irq() / __enable_irq() | psw.id 位清零/置位(PSW 寄存器) | 清零/置位 IM0 / IM1 位 |
| 读当前中断号 | __get_IPSR() | 读 ICxxx 寄存器 | 读向量表对应寄存器 |
| 原子置位/清零 | CMSIS __disable_irq 保护下操作,或用 LDREX/STREX | 读改写 + 中断保护 | OR / AND 指令配合 EI/DI |
| 内存屏障 | __DSB() / __DMB() / __ISB() | 同名内联函数(由编译器库提供) | 编译器内建函数 |
| 进入低功耗 | 写 PCON 的模式位 + 等待指令(WFI/WFE) | 写 PCON(STOP/STANDBY 等) | 写 STOP / HALT 指令 |
| 精确延时 | SysTick 或 GPT 定时器 | MTU / TPU 定时器 | TAU 定时器 / delay 库 |
| 唯一芯片 ID | UID 寄存器(用户手册 Security 章) | Unique ID(部分组有) | 产品序列号(部分组有 Unique ID) |
4 · 开发环境:e² studio / CC-RX / Smart Configurator
瑞萨的工具链是「一个 IDE + 三套软件包 + 一套烧录工具」的组合。这一章讲清每个工具负责什么、版本怎么配对、以及安装阶段最常见的几个坑。
4.1 三套工具链的分工
先建立最重要的认知:e² studio 只是壳,区分产品线的是挂在壳下面的软件包。
| 工具 | 覆盖产品线 | 职责 | 是否必须 |
|---|---|---|---|
| e² studio | RA / RX / RL78 / RH850 | Eclipse 平台的 IDE:工程管理、编辑、编译调度、调试会话 | 必须 |
| FSP(Flexible Software Package) | 只覆盖 RA(以及部分 RZ / Synergy) | 外设驱动(r_)、中间件(rm_)、板级支持(bsp_),以及 Smart Configurator for RA | RA 必须;RX/RL78 不需要 |
| RX Driver Package | 只覆盖 RX | RX 的外设驱动与中间件 | RX 必须 |
| Smart Configurator for RX | RX | 图形化配置外设与引脚,生成配置文件 | RX 推荐(可用手写代码代替) |
| Smart Configurator for RL78 | RL78 | 同上 | RL78 推荐 |
| CC-RX | RX | RX 的 C/C++ 编译器(需 Renesas Tool License Manager 授权) | RX 可选(可改用 GNURX) |
| CC-RL(LLVM for Renesas RL78) | RL78 | RL78 的 C 编译器 | RL78 必须(新项目) |
| Renesas Flash Programmer 3.x | RA / RL78 / RX / RH850 / RISC-V | 量产与工程烧录(GUI + 命令行 + rfp-cli) | 量产必须 |
| E2 emulator / E2 emulator Lite | RA / RX / RL78 | 调试器(SWD / JTAG / 串行接口) | 开发必须 |
| SEGGER Ozone / J-Link | RA(部分组支持 SWD 编程) | 第三方调试方案,RFP 从 3.08.00 起支持 J-Link | 可选 |
| PG-FP6 | RA / RX | 独立硬件编程器(产线用) | 量产可选 |
很多从 STM32 过来的人以为「瑞萨的 FSP 能管所有产品线」。不能: FSP(Flexible Software Package)明确是给 RA MCU 家族用的,官方仓库的说明里写的是 「for Renesas RA MCU Family」。RX 用的是 RX Driver Package,RL78 连独立软件包都没有(靠 Smart Configurator 生成初始化代码 + 库函数)。 你在网上看到的 FSP 示例代码,只有 RA 能直接用。
4.2 e² studio 安装
e² studio 的安装有两个硬性约束与一个软性建议,违反其中任何一条都会浪费一两个小时:
| 约束 | 具体要求 | 违反的后果 |
|---|---|---|
| 安装路径 | 目标文件夹不能包含多字节字符(即中文/日文)、扩展 ASCII(大于 0x7F 的字符)或除下划线 _ 以外的符号字符 | 安装能完成,但后续编译链的路径解析会出问题,症状是各种莫名其妙的找不到文件 |
| 系统版本 | Windows 版本只支持 64 位 Windows,不支持 32 位 | 在 32 位系统上装不上或装了跑不起来 |
| 升级安装 | 2024-07 及更早版本(基于 Java 17)不能用「升级安装」,必须装到新路径 | 升级过程中旧工程可能无法打开;官方建议一律装到新位置 |
| 组件选择 | 安装对话框里会让你选编译器:RA 选 Arm 工具链,RX 选 Renesas CC-RX vX,RL78 选 Renesas CC-RL | 选错编译器类型,新建工程时就没有对应的向导 |
| 建议:路径尽量短 | 例如 D:/e2studio/ | Eclipse 平台在超长路径下(> 80 字符)容易出现资源管理器视图异常 |
安装完成后,工具链注册是独立的一步:
- 下载对应版本的 e² studio 安装包。官方下载地址是
renesas.com/e2studio,Downloads 区域在 Documentation & Downloads 列表里。 - 安装过程中勾选需要的编译器。RX72M 的官方启动手册给的就是这个流程:安装时在编译器选择对话框里勾选
Renesas CCRX v3.01.00;GCC for Renesas RX 则是需要单独注册下载的可选项。 - 在 e² studio 里注册工具链。
Window → Preferences → Renesas → Toolchains,把编译器路径指到安装目录。RX 项目这一步是必须的,否则新建工程向导里选不到 CC-RX。 - 新建一个空工程验证。这是唯一的验收标准:能不能新建、能不能编译出产物。编译不过就先解决工具链问题,不要往下走。
4.3 FSP 与 Smart Configurator 的角色
FSP 的架构是瑞萨工具链里最有想法的部分。理解它的分层,才能理解为什么「不要改生成的文件」。
| 前缀 | 含义 | 举例 | 你该改吗 |
|---|---|---|---|
r_ | HAL 驱动,直接与硬件外设对话 | r_ioport、r_gpt、r_sci_uart、r_dmac、r_iic、r_adc、r_icu、r_elc | 不改 |
rm_ | 中间件,把驱动组织成领域功能 | rm_motor_sensorless、rm_touch、rm_vee_flash | 不改 |
bsp_ | 板级支持:时钟、复位、引脚初始状态、LED 定义 | bsp_init、hal_entry(生成骨架)、vector_data | hal_entry 里可以加调用,业务逻辑不要放这 |
| 无前缀 | 第三方组件,保留原项目名 | FreeRTOS、lwIP、MbedTLS、Guix/LVGL | 照常改 |
_b 后缀 | 硬件变体:同一类功能的另一版 IP | r_sci_b_uart(SCI-B 版)、r_spi_b、r_adc_b | 不改(选型时确定) |
FSP 为每类功能定义一个统一的 API 结构体,例如 UART 的 uart_api_t,
里面是一组函数指针:open、close、read、write、infoGet、baudSet、
communicationAbort、callbackSet、readStop。
然后每个具体外设把这个结构体实例化,例如 g_uart_on_sci_b 里 .open 指向 R_SCI_B_UART_Open。
这带来一个非常实用的性质:如果应用只通过 uart_api_t 调用,那么从 SCI-B 换到 UART(比如 RA6 上换到别的串口实例),
应用代码一行都不用改。代价是 API 表达能力被统一「削平」了 ——
不同外设的差异化特性(比如 SCI 的某些错误标志)在这个抽象层看不到了。
所以 FSP 的最佳实践是:应用层只用 xxx_api_t,确实需要差异化时再直接调 R_XXX_ 函数。
4.4 CC-RX 与 CC-RL:RX 与 RL78 的编译器
这两条线的编译器是「独立授权」或「独立路线」,与 RA 的 Arm 工具链完全分开。选之前要想清楚几件事:
| 编译器 | 适用 | 授权 | 关键说明 |
|---|---|---|---|
| CC-RX | RX 全系列 | 需要 Renesas Tool License Manager 与授权 | 官方 RX72M 启动手册默认走这条路;支持 -mcpu= 类选项;与 CS+ 的历史工程配套 |
| GCC for Renesas RX | RX 全系列 | 需要在官网注册后下载 | 免费;官方 RX72M 手册把它列为可选的第二个编译器;工程模板在向导里是独立的 RXGCC 一类 |
| CC-RL(LLVM for Renesas RL78) | RL78 全系列 | 随 e² studio 安装 | 新项目的唯一推荐路线;官方已明确「停止 GCC for Renesas RL78 的新工程创建功能」 |
| GCC for Renesas RL78 | RL78(存量工程) | 历史版本 | 仅存量维护:存量工程仍可导入并编译,但不要再基于它开新项目 |
CC-RX 与 GCC for Renesas RX 的工程结构、库名、汇编语法、链接脚本写法都不同, 调试时的符号格式也不同。官方给的迁移路径是 Renesas Common Project File: e² studio 与 CS+ 都能导入导出这个中间格式,从而实现双向迁移。 但要注意它有明确的版本门槛:CC-RX 需 V1.00.00 或更高、CubeSuite+ 需 V2.00.00 ~ V2.02.01、 CS+ 需 V3.00 或更高、e² studio 需 V3.0.0 或更高(RL78 工程则是 e² studio 导入需 V4.1.0+、导出需 V4.0.0+)。 低于这些版本的 IDE 无法参与迁移,只能手工重建工程。
4.5 通用工具:RFP、E2 emulator、PG-FP6
这三个工具是「不随产品线变」的那一层。它们的分工在官方文档里写得很清楚:开发期用 emulator,量产用 Flash Programmer。
| 工具 | 型号 / 料号 | 接口 | 适用阶段 | 关键说明 |
|---|---|---|---|---|
| E2 emulator | RTE0T00020KCE00000R | SWD / JTAG / 串行 / USB | 开发调试 | 供 1.8~5.0 V、最高 200 mA;3.3 V 时约耗 20 mA、5.0 V 时约 40 mA |
| E2 emulator Lite | RTE0T0002LKCE00000R | SWD / JTAG / 串行 / USB | 开发调试(低成本) | 供 3.3 V、最高 200 mA;不带 1.8 V 与 5.0 V 供电 |
| PG-FP6 | 编程器 | 独立硬件 | 量产烧录 | 不需要 PC,适合产线;官方在软件页作为独立工具列出 |
| Renesas Flash Programmer 3.x | 软件 | SWD / JTAG / 串行(SCI9、USBFS)/ USB | 量产 + 工程 | 支持 RA / RL78 / RX / RH850 / RISC-V;GUI + 命令行 + rfp-cli |
| SEGGER J-Link / J-Trace | 第三方 | SWD / JTAG | 开发调试 + 部分组的 SWD 编程 | RFP 从 V3.08.00 起支持用 J-Link 通过串行接口写 RA |
关于 RFP 的两条实用信息:
- CLI 与 GUI 不互通。官方 Release Note 明确写了两点:
rfp-cli是与 GUI 不对应的专用命令行软件; 并且CLI 操作与 RFP GUI 的简单命令行操作不兼容。写产线脚本前要确认用的是哪一种命令行。 - project file 格式会随版本变。以 RA 为例,V3.08.00 改变了 RFP 自动生成的参数文件格式;
如果用 V3.06.03 或更早版本建的 RA project file 拿到 V3.08.00+ 打开,会报
E3000008 文件损坏或E0000015 参数文件不正确, 只能重建。产线的脚本要固定 RFP 版本。
4.6 常见安装故障
| 现象 | 原因 | 处置 |
|---|---|---|
| 安装向导在选完组件后卡住或回退 | 安装路径含中文或符号 | 装到 D:/e2studio/ 这类纯英文短路径 |
| 装完双击启动无反应 / 报 JVM 错误 | Java 运行环境缺失或版本冲突 | 用安装包自带的 JRE;检查系统里是否装了不兼容的 Java |
| 新建工程向导里没有目标器件 | FSP / 器件包版本太旧 | Help → Check for Updates 更新;或装对应版本的新 IDE |
| 用新 IDE 打开旧工程报错 | FSP 与 IDE 版本不匹配 | 每个 FSP 版本都声明了最小 IDE 版本(见 4.2),按对照表降级 IDE 或升级 FSP |
| CC-RX 在向导里选不到 | 工具链没注册或没授权 | Preferences → Renesas → Toolchains 指向编译器目录;确认 Tool License Manager 已激活 |
| CC-RL 找不到 / 装不上 | 版本选择错误 | 选 Renesas CC-RL(LLVM for Renesas RL78),不是 GCC for Renesas RL78 |
| 找不到 RX / RL78 的 Smart Configurator | IDE 版本太旧 | 升级 IDE;RX 需 V2.27.0、RL78 需 V1.15.0 或更高才带新器件支持 |
| 杀毒软件把调试器驱动隔离了 | USB 驱动被拦 | 把 e² studio 安装目录与调试器驱动加白名单 |
make: *** No rule to make target | 生成文件没生成或工程没刷新 | 在 Smart Configurator 里重新点 Generate;或在 IDE 里 Project → Refresh |
5 · 第一个工程:从新建到点亮 LED
这一章的目标是「让 LED 闪起来」。它看起来简单,但几乎所有第一次用瑞萨的人都在这一章卡住过 —— 不是因为代码难,而是因为配置项多、生成的代码位置陌生、以及验收标准不明确。
5.1 RA 路径:e² studio + FSP
RA 是三条线里配置流程最规范的(FSP 的图形化配置器功不可没),完整流程如下:
- 新建工程:
File → New → Renesas C/C++ Project,选RA C/C++ Project, 在器件页填三项:Device(RA6M4AB3CFM 之类的完整料号)、Version(芯片版本)、Package(封装)。 - 打开 Smart Configurator:双击工程里的
configuration.xml(或点工具栏的 Configurator 图标)。 - Pins 视图配引脚:把要用作 LED 的引脚设为
Output, 把调试引脚(SWCLK/SWDIO)保持默认,把 MD 引脚(P201)设为复位后为高电平。 - Clocks 视图配时钟:设系统时钟源与主频。这一步不要跳过,默认配置往往不是你想要的频率。
- Stacks 视图加外设:
New Stack → Driver → Input/Output → General I/O (r_ioport), 再按需要加r_gpt(定时器)、r_sci_uart(串口)等。 - 点 Generate:生成
hal_entry.c、hal_data.c、vector_data.c、common_data.c与一堆_pin_data.c。 - 编译:
Project → Build Project。无 error 后产物落在Debug/或Release/目录。 - 下载并停在入口:
Run → Debug(需先在 Run Configurations 里选对调试器与器件),应停在hal_entry。
hal_entry.c、hal_data.c 与所有 _pin_data.c 都是 Smart Configurator 生成的,
每次点 Generate 都会被整体重写。你在里面写的业务逻辑会无声消失。
正确做法:业务代码写在自建的 src/ 目录,hal_entry() 里只调用你自己的函数,
并且把这个目录标记为「不参与生成」(在 Project Explorer 里右键 → Resource Configurations → Exclude from Build 关掉即可,取决于模板)。
5.2 RX 路径:CC-RX + Smart Configurator
RX 的流程与 RA 类似,但配置器与软件包不同,代码骨架的函数名也不同(RX 用 main() 而不是 hal_entry())。
- 安装并注册 CC-RX:安装 e² studio 时勾选
Renesas CCRX vX,然后在Window → Preferences → Renesas → Toolchains里注册路径。 - 新建工程:
File → New → C/C++ Project, 模板选Renesas RX→Renesas CC-RX C/C++ Executable Project。 - 配置器件与时钟:在工程的 Smart Configurator 视图里设系统时钟(RX 用
system.c风格的时钟初始化函数)。 - 生成代码:点 Smart Configurator 的 Generate,生成
pin_data.c、vector_data.c等。 - 编译:产物是
.mot或.axf(取决于工具链与链接设置),这个后缀与 RA 不同, 下载时要选对文件类型。 - 下载调试:
Run → Debug,停在main()或_main()入口。
CC-RX 链接出来的镜像常用 .mot(Motorola 格式,适合某些烧录器)或 .axf;
Arm 工具链出来的是 .elf / .hex。
用 RFP 烧录时选错文件类型会直接报格式错误,而不是「找不到文件」——
这是 RX 项目第一次用 RFP 时最常见的困惑。
5.3 RL78 路径:CC-RL
RL78 的流程最短,因为没有独立的软件包:
- 安装 CC-RL:安装 e² studio 时勾选
Renesas CC-RL(即 LLVM for Renesas RL78)。 - 新建工程:模板选
Renesas RL78→ 对应CC-RL的可执行工程模板。 - 配置:Smart Configurator for RL78 里配引脚与时钟,生成
RL78/…目录下的初始化代码。 - 编译:产物后缀随工具链版本变化(
.hex/.mot等),以工程的输出设置为准。 - 下载:RL78 有1 线 on-chip debug,接线极简,但也因此更容易接错 —— 见 7.4。
5.4 点亮 LED 的最小代码
下面三段分别是三条线的最小实现。刻意保留了 FSP 的回调结构,因为真实工程就应该这么写。
RA(FSP,回调式) —— 在自建的 src/led.c 里:
/* src/led.c —— 自建文件,不会被 Generate 覆盖 */
#include "hal_data.h"
static bsp_io_port_pin_t const s_led_pin = BSP_IO_PORT_01_PIN_03;
void led_init (void)
{
R_IOPORT_PinWrite (&g_ioport, s_led_pin, BSP_IO_LEVEL_LOW);
R_IOPORT_PinCfg (&g_ioport, s_led_pin, BSP_IO_CFG_OUTPUT);
}
/* FSP 定时器的回调:事件参数里带 event 与 counter */
void g_led_timer_callback (timer_callback_args_t * p_args)
{
if (TIMER_EVENT_CYCLE_END == p_args->event)
{
R_IOPORT_PinToggle (&g_ioport, s_led_pin);
}
}
/* 在 hal_entry() 里调用;hal_entry 本身是生成文件,但函数体可安全扩展 */
void led_start (void)
{
R_GPT_Start (&g_led_timer);
}
RX(CC-RX,直观式):
/* RX 用 PORT 与 PROTECT 寄存器直接操作,代码更短 */
#include "iodefine.h"
#define LED_PORT PORTD
#define LED_PIN BIT(0)
void led_init (void)
{
/* PROTECT 解除后才能写 Pn 的输出方向寄存器(RX 的写保护机制) */
PORTD->PNCR = 0x00000002u; /* 解除写保护 */
LED_PORT->PIDR = 0x0001u; /* 设为输出 */
PORTD->PNCR = 0x00000000u; /* 恢复写保护 */
LED_PORT->PODR = 0x0000u;
}
void led_toggle (void)
{
static uint8_t s_level = 0u;
s_level ^= 1u;
LED_PORT->PODR = (uint32_t)((s_level & 0x01u) << 0); /* 整端口写,不是读改写 */
}
RL78(CC-RL):
/* RL78 的端口寄存器命名是 Pn 侧 + P0 侧成对的(端口 n 与端口 0) */
#include "rl78g13.h"
#define LED_PORT P3
#define LED_BIT 0x01u
void led_init (void)
{
PM3 = 0x00u; /* PM3 全为输入 */
P3 = 0xFFu; /* 先写 P3 侧寄存器输出 0 */
P3 = 0xFFu; /* 再写 P03 侧使能输出 */
PM3 = 0xFFu; /* PM3 全为输出 */
PI3 = 0x00u; /* 初始化输出电平 */
}
void led_toggle (void)
{
PI3 ^= LED_BIT; /* 触发反转 */
}
RL78 的每个 16 位端口组里,输出数据寄存器 Pn 和方向控制寄存器 PMn 各分成「n 侧」与「0 侧」两份
(例如 P3 与 P03、PM3 与 PM03)。先写数据、再使能输出是对的顺序;
反过来先使能输出再写数据,会在引脚上产生一个短暂的错误电平 —— 在驱动继电器或 LED 负载时这个毛刺可能真的出事。
另外 RL78 的 PI3 是「输出锁存」而 P3 是「端口输出」,写错了位会没反应。
5.5 编译产物与验收标志
「编译通过」不等于「做对了」。这一节给出每一步的验收标志 —— 现象对不上,就地解决,不要往下走。
| 步骤 | 验收标志 | 现象不对时的第一怀疑对象 |
|---|---|---|
| 新建工程 | 向导能走完并生成工程目录 | 器件 / 封装 / 版本三项是否与实际芯片一致 |
| 配置引脚 | Pins 视图里目标引脚显示为设定功能 | 是不是配到了同号的其它引脚(如 A0 与 A1 混淆) |
| 配置时钟 | Clocks 视图显示主频符合预期 | PLL 输入源与倍频是否合法;输出分频有没有超限 |
| 点 Generate | Console 出现生成完成,文件列表里能看到 hal_entry.c | 有没有未保存的配置文件;生成器有没有报错 |
| 编译 | Build Project 无 error,产物目录里有镜像文件 | 把 error 逐条读,不要只看最后一行 |
| 下载 | 下载器提示写入并校验通过 | MD 引脚电平、调试口接线、VCL 是否接(见 7.4) |
| 调试 | 能在 hal_entry 或 main 处停下 | 芯片是否被读保护锁住;IDE 选的器件与实物是否一致 |
| 点亮 | LED 按预期周期翻转 | 引脚配置、时钟是否真的生效、定时器是否启动、回调是否被调用 |
先让 LED 闪,再接别的。具体顺序是:① 空工程编译过 → ② 下载成功 → ③ 能停在断点 → ④ 手动改一次 GPIO 电平能看到变化 → ⑤ 加定时器让 LED 自动闪。每一步都在前一步的基础上只加一个变量, 这样出问题时你立刻知道是哪一步引入的。如果一上来就把定时器、串口、ADC 全接上再编译, 出问题时你有五个嫌疑人要排查,效率差十倍。