#run-time #startup #risc-v #esp32-c3

no-std esp32c-rt

ESP32-C系列SoC的最小运行时/启动程序

2个版本

0.1.1 2021年8月29日
0.1.0 2021年8月29日

#5#esp32-c3

ISC 许可证

46KB
672

包含 (静态库, 8KB) bin/riscv32imc-unknown-none-elf.a

esp32c-rt

为基于RISC-V的ESP32-C系列SoC的CPU的最小运行时/启动程序。

Build Status crates.io API License

本项目是基于 riscv-rt 仓库的分支,并在其基础上为ESP32-C系列进行了特定的修改。

截至目前,只有 ESP32-C3 已发布。然而,未来计划发布ESP32-C6版本,并且预期该SoC也将与该仓库兼容。

修改

riscv-rt 仓库相比,已实施以下修改

  • 仅准备包含 rv32imc 架构的复位和启动例程的二进制blob。这是ESP32-C系列SoC的架构。
  • 从启动复位例程中排除 miemip 机中断寄存器。这些寄存器未由SoC实现,如果不删除,将导致 无效指令 异常。
  • 添加了一个名为 directboot 的功能(默认启用),该功能修改链接脚本,包括启动EPS32-C SoC到直接启动模式的魔数字符。这大大简化了启动和设置工作,但破坏了与许多 ESP-IDF 功能(安全启动等)的兼容性。更多有关直接启动模式的信息可以在 esp32c3-direct-boot-example 仓库中找到。 此模式仅支持SoC >= rev. 3
  • 添加了一个名为 esp32c3 的功能(目前默认启用),该功能将ESP32-C3的内存布局包含到链接器中,以便下游项目无需补充此文件。

ESP32-C3内存布局

当启用 esp32c3 功能时,假设以下内存布局

MEMORY
{
    irom (x): ORIGIN = 0x42000000, LENGTH = 0x400000
    drom (r): ORIGIN = 0x3C000000, LENGTH = 0x400000
    ram (rw): ORIGIN = 0x3FC80000, LENGTH = 0x50000
    rtc_ram (rx): ORIGIN = 0x50000000, LENGTH = 0x2000
}

文档

Rust文档可在此处找到:这里

最低支持的Rust版本 (MSRV)

本仓库保证在稳定的Rust 1.42.0及更高版本上编译。它可能可以用较老的版本编译,但在任何新的补丁版本中可能会改变。

许可证

请参阅 LICENSE.md

贡献

除非您明确声明,否则您有意提交以包含在存储库中的任何贡献,也应在以下描述的ISC许可证下授权,无任何额外条款或条件:LICENSE.md

行为准则

此crate的贡献受Rust行为准则的规范,该crate的维护者承诺将介入以维护该行为准则。

依赖项

~2.5MB
~60K SLoC