blob: 1f5249bc1906ca12fc56747527900b3e2ec7ed0d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
# FRDM-MCXC162 BSP 说明
## 简介
本 BSP 面向量产版 FRDM-MCXC162,固定使用 `MCXC162VFT` Cortex-M23,内核运行
在 72 MHz FRO;不启用 FPU、TrustZone 和 MPU。
链接器只使用 `0x00000000` 起始的 64 KiB Program Flash,以及
`0x20000000` 起始的 12 KiB SRAM。位于 `0x0001C000` 的非连续 Data Flash 不会
拼入程序区。
## 支持接口
| RT-Thread 设备 | 芯片外设 | 板级引脚 | 默认状态 |
| --- | --- | --- | --- |
| `pin` | GPIO0-GPIO3 | `GET_PINS(port, pin)` | 开启 |
| `uart0` | LPUART0 | P0_2 RX、P0_3 TX | 开启,作为控制台 |
| `uart1` | LPUART1 | P2_12 RX、P2_13 TX | 关闭 |
| `uart2` | LPUART2 | P3_13 RX、P3_12 TX | 关闭 |
| `i2c0` | LPI2C0 | P3_27 SCL、P3_28 SDA | 关闭 |
| `spi0` | LPSPI0 | P3_10 SCK、P3_8 SDO、P3_9 SDI、P3_11 软件 CS | 关闭 |
| `rtc` | RTC0 | 内部 | 关闭 |
| `wdt` | WWDT0 | 内部 | 关闭 |
| `timer0`、`timer1` | CTIMER0、CTIMER1 | 内部 | 关闭 |
| `pwm0` 通道 0/1 | FLEXPWM0 SM0 A/B | P3_0、P3_1 | 关闭 |
PWM 两个通道共用周期。另一通道已经启用时,如果提交不同周期,驱动返回
`-RT_EINVAL`。
本版不支持 UART3、LPADC0、DMA、Data Flash、TRDC、低功耗和 tickless。
## 编译
先安装或更新 NXP MCX CMSIS 与 series package:
```console
pkgs --update
```
将 `RTT_EXEC_PATH` 指向编译器的可执行文件目录后编译:
```console
set RTT_CC=gcc
set RTT_EXEC_PATH=C:\path\to\arm-none-eabi\bin
scons -j8
```
主 GCC 基线为 MCUXpresso IDE 25.06 内置 Arm GNU Toolchain 14.2;另用 GCC
10.3.1 做兼容回归。SDK 26.06 的参考版本是 Keil MDK 5.43a(配合
`MCXC162_DFP 26.06.00`)和 IAR EWARM 9.70.4。工程可重新生成:
最终生成工程已使用 Keil MDK 5.42 + Arm Compiler 6.23 和 IAR EWARM
9.60.3.422 完成验证。本地未重复 SDK 参考版本 Keil 5.43a 与 IAR 9.70.4 的验证。
```console
set RTT_CC=keil
scons --target=mdk5
set RTT_CC=iar
scons --target=iar
```
Keil 应构建生成的 `project.uvprojx`,IAR 应构建生成的 `project.ewp`;
`template.*` 仅是工程生成器输入,不是构建目标。
```console
uVision.com -b project.uvprojx -j0
IarBuild.exe project.ewp -build Debug
```
## 默认运行现象
默认配置提供 1 kHz 系统 tick、115200-8-N-1 的 `uart0` 控制台和 MSH。低有效
红灯 P2_3 每 500 ms 翻转一次,应用不输出周期日志。
执行 `button_irq_test`,并在 10 秒窗口内分别按下 SW2 和 SW3;命令必须报告两键
都有非零下降沿中断计数。该等待窗口也可直观检查 RT-Thread 的 1 kHz tick。
执行 `reboot` 后,banner 和 MSH 提示符必须在软件复位后重新出现;硬复位则使用
板载 RESET 键做同样检查。
以下验收命令只在对应的可选 BSP 驱动开启后参与编译;默认 PIN + UART0 固件
不会带入额外测试代码。
两组 CI 验收配置可按下列命令构建:
```console
scons --attach=peripheral.communication
scons -j8
scons --attach=default
scons --attach=peripheral.timing_control
scons -j8
scons --attach=default
```
## 外设验收命令
测试其他 UART 时,继续用 `uart0` 作为 MSH 控制台。
| 项目 | 接线 | 命令 | 通过判据 |
| --- | --- | --- | --- |
| UART1 | Arduino D1/P2_13 TX 短接 D0/P2_12 RX | `uart_loop uart1` | 115200-8-N-1 回环 8 字节并输出 `PASS` |
| UART2 | mikroBUS TX/P3_12 短接 RX/P3_13 | `uart_loop uart2` | 115200-8-N-1 回环 8 字节并输出 `PASS` |
| P3T1755 | 无需接线;板载器件已连接 P3_27 SCL、P3_28 SDA | `p3t1755` | `0x48` 应答并打印一次温度 |
| SPI0 | Arduino D11/P3_8 SDO 短接 D12/P3_9 SDI;在 D13/P3_10 SCK、D10/P3_11 CS 测量 | `spi_loop` | 输出 `PASS`,且波形为 mode 0、1 MHz SCK、低有效 CS |
| CTIMER0 | 无需接线 | `ctimer0_test` | RT-Thread clock-time 后端完成一次 100 ms 单次定时 |
| CTIMER1 | 无需接线 | `ctimer_test timer1 oneshot`,再运行 `ctimer_test timer1 periodic` | 单次模式 1 次中断;周期模式 550 ms 内 4-6 次中断 |
`timer0` 由 RT-Thread clock-time 子系统独占打开,不能作为普通定时器设备再次
打开或控制。直接验证单次/周期设备接口时使用 `timer1`。
P3_11 由 RT-Thread 软件控制片选;LPSPI 内部改用未路由的 PCS,因此复合 SPI
消息之间 P3_11 会保持有效。本 BSP 只支持低有效软件片选。
`p3t1755` 把温度寄存器指针写入和两字节读取放在同一个双消息事务中,线上会
产生 repeated START,满足 ERR053261 的要求。
v1 I2C 适配要求每次 `rt_i2c_transfer()` 以 START 开始、以 STOP 结束;若首条
消息设置 `RT_I2C_NO_START`,或末条消息设置 `RT_I2C_NO_STOP`,请求会被拒绝。
仅发往同一地址的连续写消息允许使用 `RT_I2C_NO_START` 拼接。
WWDT 两种测试应分别在复位后执行。`wwdt refresh` 启动 3 秒看门狗并每秒喂狗,
期间没有周期输出;至少稳定运行 10 秒后按 RESET 结束。`wwdt timeout` 不喂狗,
MCU 应在约 3 秒后复位,下一次启动应打印
`last reset was caused by WWDT0`。
RTC set/get 和 PWM 控制直接复用 RT-Thread 标准 MSH 命令:
```console
date 2026 9 3 12 0 0
date
rtc_alarm_test
pwm probe pwm0
pwm set 0 1000000 250000
pwm enable 0
pwm set 1 1000000 500000
pwm enable 1
pwm get 0
pwm get 1
pwm disable 0
pwm disable 1
```
`rtc_alarm_test` 还需开启 `RT_USING_ALARM`,约 3 秒后应输出 `PASS`。PWM 测量点
为 Arduino D5/P3_0(通道 0)和 D6/P3_1(通道 1),相对 GND 应分别得到 1 kHz、
25% 和 50% 占空比。通道 0 已启用时执行
`pwm set 1 2000000 1000000`,必须返回 `-RT_EINVAL`,共享的 1 ms 周期不得改变。
## 实板验收
以下验证已在量产版 FRDM-MCXC162 Rev 1 实板上完成:
- banner、MSH、红灯、SW2 P3_14/SW3 P3_29 中断、软硬复位、1 kHz tick 和
10 分钟稳定运行;
- UART1/UART2 跳线回环;
- `i2c0` 上板载 P3T1755 地址 `0x48` 应答及温度读取;
- SPI0 SDO→SDI 回环,并检查 SCK/CS;
- RTC 走时/alarm、WWDT refresh/故意超时复位、CTIMER 单次/周期模式,以及
PWM 频率、占空比、启停和共享周期拒绝;
- Keil 与 IAR 分别完成下载、启动、tick、console 和 GPIO 验证。
针对 MCXC162 勘误 ERR053261,连续 LPI2C 读命令之间必须插入 STOP/START 或
repeated START。
实板烧写及 MCUXpresso IDE 下载配置由板卡使用者完成。
## 参考资料
- [FRDM-MCXC162 官方页](https://www.nxp.com/design/design-center/development-boards-and-designs/FRDM-MCXC162)
- [MCXC162 数据手册](https://www.nxp.com/docs/en/data-sheet/MCXCP048M072F20.pdf)
- [MCXC162 芯片勘误](https://www.nxp.com/docs/en/errata/MCXC162VFT_0P18R.pdf)
- [NXP MCXC162 device 文件](https://github.com/nxp-mcuxpresso/mcux-devices-mcx/tree/main/MCXC/MCXC162)
- [MCUX SDK 26.06 release notes](https://docs.mcuxpresso.nxp.com/mcuxsdk/26.06.00/html/boards/MCX/frdmmcxc162/releaseNotes/rnindex.html)
|