K210 开发板相关问题
我们采用的真实硬件平台 Kendryte K210 在设计的时候基于 RISC-V 特权级架构 1.9.1 版本,它发布于 2016 年,目前已经不被 主流工具链所支持了。麻烦的是, 1.9.1 版本和后续版本确实有很多不同。为此,RustSBI 做了很多兼容性工作,使得基于新版规范 的软件几乎可以被不加修改的运行在 Kendryte K210 上。在这里我们先简单介绍一些开发板相关的问题。
K210 相关 Demo 和文档
K210 相关工具
JTAG 调试
烧写
K210 可用内存大小
K210 的内存是由 CPU 和 KPU 共享使用的,如果想要 CPU 能够使用全部的 \(8\text{MiB}\) 需要满足三个条件:
KPU 不能处于工作状态;
PLL1 必须被使能;
PLL1 的 clock gate 必须处于打开状态。
否则, CPU 仅能够使用 \(6\text{MiB}\) 内存。
我们进行如下操作即可让 CPU 使用全部 \(8\text{MiB}\) 内存(基于官方 SDK):
sysctl_pll_enable(SYSCTL_PLL1);
syscyl_clock_enable(SYSCTL_CLOCK_PLL1);
K210 的频率
默认情况下,K210 的 CPU 频率为 403000000 ,约 \(400\text{MHz}\) 。而计数器 mtime
CSR 增长的频率为 CPU 频率的 1/62 ,约 \(6.5\text{MHz}\) 。
K210 的 MMU 支持
K210 有完善的 SV39 多级页表机制,然而它是基于 1.9.1 版本特权级架构的,和我们目前使用的有一些不同。不过在 RustSBI 的帮助下,本项目中完全看不出 Qemu 和 K210 两个平台在这方面的区别。详情请参考 RustSBI 的设计与实现 的 P11 。
K210 的外部中断支持
K210 的 S 特权级外部中断不存在(被硬件置为零),因此任何软件/硬件代理均无法工作。为此,RustSBI 专门提供了一个新的 SBI call ,让 S 模式软件可以编写 S 特权级外部中断的 handler 并注册到 RustSBI 中,在中断触发的时候由 RustSBI 调用该 handler 处理中断。详情请参考 RustSBI 的设计与实现 的 P12 。