feat(bsp): CH57x 最小 BSP + 上板自检例程(board_check_ch57x) - #21
Merged
Merged
Conversation
把 issue #14 里"只能上板回答"的那批核对点,收敛成**一次烧写就能出答案**的自检例程; 顺带补上 ch57x 家族的最小 BSP(ch583/ch572 的 UART 与 PA 口寄存器同址同偏移,一份够用)。 ## BSP(`src/bsp/ch57x/`) - `uart::configure(clk_hz, baud)` / `putc` / `write_str` + `core::fmt::Write` 出口。 - 寄存器与公式**照官方 EVT 源码**:基址 `0x40003400`(`IER@+1 / FCR@+2 / LCR@+3 / LSR@+5(bit6 发送全空) / THR@+8 / R16_DL@+0x0C / R8_DIV@+0x0E`)、初始化序列同 `UART1_DefInit()`、波特率 `DL = round(clk/(8*baud))`。 - PA 口:`PA_DIR@0x400010A0 / PA_OUT@+08 / PA_CLR@+0C`(LED/示波器打点)。 - 不碰 SAM 解锁/PLL —— 时钟树留给后续(见下"阶段一"为什么先不碰)。 ## 自检例程(`examples/board_check_ch57x.rs`) **阶段一**:按 8/16/24/32/48/60/100 MHz 逐个假设各打一行标记——**哪行可读,复位默认主频 就是那个值**(不配 PLL 时主频未知,只能这样测;这也顺手回答了 env 里的频率假设)。 **阶段二**(把 `CLK_HZ` 改成测出的值后重烧)打印: - 启动头:`_bootvec` 地址 + **魔数回读**(符号地址即它在 flash 的位置),期望 `F3F9BDA9`; - `STK_CTLR`(期望 ch583 `0x2F` / ch572 `0x0F`)、`STK_SR`、`PFIC_IENR[0]` bit12; - **INTSYSCR(自定义 CSR `0x804`)回读**——非 0 说明硬件压栈/嵌套没关,36 字帧前提不成立; - `mcycle` 前后差(0 = 无 Zicntr;本口 `delay_us` 已改用 SysTick,不依赖它); - **软中断自检**:`yield_now()` 前后读 `PFIC ISR[0]` bit14——pending 被硬件取走即 `SWI_IRQn=14` 通路成立,残留则可疑; - **活性测试**:两个同优先级任务各自周期打印计数器与 `tick()`——两者都涨 = 时基、上下文切换、同优先级时间片在真机上成立。 ## 验证(本机无硬件,能做的都做了) - 例程在 **ch583(riscv32imac)** 与 **ch572(riscv32imc)** 两种目标下都编译+链接通过, 启动头产物校验 PASS(三道:ch583-imac/ch583-imc/ch572-imc 里含新增的两个 board_check 构建)。 - `bash ci/gate.sh` 全绿(host 159 / ISR 向量 / 启动头 ×3 / 乒乓 / kernel_tests 24-24 ×3 / smp 9-9); 门禁新增两条 board_check 构建步骤,防止 BSP 腐烂。 -⚠️ 例程的**输出**只能在真机上看到——本机没有硬件,故"阶段一测出的主频、阶段二的各项读数" 仍是待验项(这正是本 PR 的目的:让有板子的人 5 分钟拿到答案)。 Refs #14
gqf2008
force-pushed
the
feat/ch57x-bsp-board-check
branch
from
September 19, 2026 09:24
a2ac733 to
5fb5297
Compare
2 of 7 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
把 issue #14 里"只能上板回答"的那批核对点,收敛成一次烧写就能出答案的自检例程;
顺带补上 ch57x 家族的最小 BSP(ch583/ch572 的 UART 与 PA 口寄存器同址同偏移,一份够用)。
BSP(
src/bsp/ch57x/)uart::configure(clk_hz, baud)/putc/write_str+core::fmt::Write出口。0x40003400(IER@+1 / FCR@+2 / LCR@+3 / LSR@+5(bit6 发送全空) / THR@+8 / R16_DL@+0x0C / R8_DIV@+0x0E)、初始化序列同UART1_DefInit()、波特率DL = round(clk/(8*baud))。PA_DIR@0x400010A0 / PA_OUT@+08 / PA_CLR@+0C(LED/示波器打点)。自检例程(
examples/board_check_ch57x.rs)阶段一:按 8/16/24/32/48/60/100 MHz 逐个假设各打一行标记——哪行可读,复位默认主频
就是那个值(不配 PLL 时主频未知,只能这样测;这也顺手回答了 env 里的频率假设)。
阶段二(把
CLK_HZ改成测出的值后重烧)打印:_bootvec地址 + 魔数回读(符号地址即它在 flash 的位置),期望F3F9BDA9;STK_CTLR(期望 ch5830x2F/ ch5720x0F)、STK_SR、PFIC_IENR[0]bit12;0x804)回读——非 0 说明硬件压栈/嵌套没关,36 字帧前提不成立;mcycle前后差(0 = 无 Zicntr;本口delay_us已改用 SysTick,不依赖它);yield_now()前后读PFIC ISR[0]bit14——pending 被硬件取走即SWI_IRQn=14通路成立,残留则可疑;tick()——两者都涨 =时基、上下文切换、同优先级时间片在真机上成立。
验证(本机无硬件,能做的都做了)
启动头产物校验 PASS(三道:ch583-imac/ch583-imc/ch572-imc 里含新增的两个 board_check 构建)。
bash ci/gate.sh全绿(host 159 / ISR 向量 / 启动头 ×3 / 乒乓 / kernel_tests 24-24 ×3 / smp 9-9);门禁新增两条 board_check 构建步骤,防止 BSP 腐烂。
仍是待验项(这正是本 PR 的目的:让有板子的人 5 分钟拿到答案)。
Refs #14