11个版本
0.3.2 | 2024年8月4日 |
---|---|
0.3.0 | 2022年12月29日 |
0.2.4 | 2021年10月5日 |
0.2.3 | 2021年5月25日 |
0.2.1 | 2020年11月7日 |
147 在 嵌入式开发
7,294 每月下载量
用于 13 个crates(5个直接使用)
170KB
2.5K SLoC
文档
stm32-fmc
STM32内存控制器(FMC/FSMC)的硬件抽象层
目前仅实现了SDRAM功能。
这个crate还在开发中!非常欢迎贡献
实现
(如果你的HAL已经实现了FMC,你可以跳过这一步)
查看文档
用法
SDRAM
FMC外设支持最多2个外部SDRAM设备。这个crate目前只支持1个,尽管它可能在1号或2号银行。
外部存储器由SdramChip
实现定义。在devices
文件夹中有几个示例,或者你可以自己创建。
要将引脚传递给构造函数,创建一个以下顺序的元组
let pins = (
// A0-A12
pa0, ...
// BA0-BA1
// D0-D31
// NBL0 - NBL3
// SDCKE
// SDCLK
// SDNCAS
// SDNE
// SDRAS
// SDNWE
);
你可以省略未使用存储器的地址/数据引脚。
构建
如果你使用HAL,请参阅HAL文档。
否则,你可以自己实现FmcPeripheral
,然后直接使用Sdram::new
/ Sdram::new_unchecked
。
初始化
一旦你有了Sdram
实例,你可以
- 通过调用
init
来初始化它。这会返回一个原始指针 - 使用
from_raw_parts_mut
将原始指针转换为有大小切片
let ram = unsafe {
// Initialise controller and SDRAM
let ram_ptr: *mut u32 = sdram.init(&mut delay);
// 32 MByte = 256Mbit SDRAM = 8M u32 words
slice::from_raw_parts_mut(ram_ptr, 8 * 1024 * 1024)
};
NAND闪存
FMC外设支持1个外部并行NAND闪存设备。
外部存储器由NandChip
实现定义。在devices
文件夹中有示例,或者你可以自己创建。
要将引脚传递给构造函数,创建一个以下顺序的元组
let pins = (
// A17/ALE
// A16/CLE
pa0, ...
// D0-D7
// NCE/#CE
// NOE/#RE
// NWE/#WE
// NWAIT/R/#B
);
构建
如果你使用HAL,请参阅HAL文档。
否则,您可以自己实现FmcPeripheral
,然后直接使用Nand::new
/ Nand::new_unchecked
。
初始化
一旦您有了Nand
实例,您应该通过调用init
来初始化它。这将返回一个NandDevice
实例。
let mut nand_device = nand.init(&mut delay);
// Read device identifier
let id = nand_device.read_id();
NOR闪存/PSRAM
待办事项
故障排除
该库自动通过log
或defmt
进行一些跟踪级别的日志记录。要启用此类日志记录,请启用您的Cargo.toml
中的log
或defmt
功能。
为了调试SDRAM寄存器内容,该库提供额外的功能trace-register-values
,启用后,将导致初始化函数将寄存器内容记录到跟踪级别。这在您想要比较stm32-fmc
和CubeMX代码中的寄存器值时非常有用。请注意,必须启用其中一个日志功能(log/defmt
)才能使其工作。
实现新设备
如果您最终依赖于比HAL crate更新的crate版本或分支,您可以使用您的Cargo.toml
中的[patch]
部分覆盖外部crate拉入的版本,如Cargo Book中所述。
发布
- 更新Cargo.toml
- 更新CHANGELOG.md
git commit -am 'v0.2.0'
git push --set-upstream origin v0.2.0
创建PR并检查CI是否通过
git push --set-upstream origin v0.2.0:master
git tag -a 'v0.2.0' -m 'v0.2.0'
git push origin refs/tags/v0.2.0
cargo publish
许可证
根据您的选择,许可为以下之一
- Apache License,版本2.0(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献都将根据上述方式双重许可,而不附加任何额外条款或条件。
依赖项
~69-255KB