介绍
SPI 闪存控制器驱动程序旨在供用户访问 SPI NOR/NAND 闪存,目前仅支持用户模式。
架构
SPI 闪存控制器驱动程序的 SPI NOR 闪存和 NAND 闪存的软件架构分别在下面的两个图中显示。
SPI Flash controller for NOR Flash software architecture
SPI Flash controller for NAND Flash software architecture
实现
SPI 闪存控制器驱动程序实现为以下文件:
文件 |
描述 |
---|---|
|
SPIC 驱动程序 Kconfig |
|
SPIC 驱动程序 Makefile |
|
SPIC 驱动程序有关 NAND 闪存的具体实现 |
|
SPIC 驱动程序有关 NOR 闪存的具体实现 |
|
SPIC 驱动程序有关 NOR 闪存定义的头文件 |
配置
设备树配置
对于用于 NOR 闪存的 SPI 闪存控制器驱动程序,设备树节点在文件 <dts>/rtl8730e-spi-nor.dtsi
:
spic: spi@44000000 {
compatible = "realtek,rxi312-nor";
#address-cells = <1>;
#size-cells = <0>;
bus_num = <2>;
reg = <0x44000000 0x200>;
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
spi-max-frequency = <100000000>;
flash0: flash@0 {
/* NOR Flash configurations */
};
};
对于用于 NAND 闪存的 SPI 闪存控制器驱动程序,设备树节点定义在文件 <dts>/rtl8730e-spi-nand-128m.dtsi
或 <dts>/rtl8730e-spi-nand-256m.dtsi
中。
spic: spi@44000000 {
compatible = "realtek,rxi312-nand";
#address-cells = <1>;
#size-cells = <0>;
bus_num = <2>;
reg = <0x44000000 0x200>;
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
spi-max-frequency = <100000000>;
flash0: flash@0 {
/* NAND Flash configurations */
};
};
配置如下表所列。
属性 |
描述 |
可配置? |
---|---|---|
compatible |
用于将SPIC驱动程序与SPI闪存控制器设备匹配的ID |
否 |
#address-cells |
Flash节点的地址单元数量 |
否 |
#size-cells |
Flash节点的大小单元数量 |
否 |
bus_num |
SPI 总线编号 |
否 |
reg |
注册资源 |
否 |
interrupts |
SPI中断:用于NOR闪存的SPI闪存控制器驱动程序的中断模式,保留给NAND闪存的SPI 闪存控制器驱动程序 |
否 |
spi-max-frequency |
SPI最大频率(赫兹,预留) |
否 |
备注
选择芯片后,上述设备树文件将自动选择。若非必要,请勿更改设备树配置。
编译配置
选择
:
对于 NOR 闪存,选择
:
备注
RXI312 模式仅适用于 NOR 闪存的 SPI Flash 控制器驱动程序,对于 NAND 闪存的 SPI Flash 控制器驱动程序将被忽略。
APIs
用户空间 API
无。
内核空间 API
用于 NOR 闪存的 SPI Flash 控制器驱动程序为 SPI NOR Flash 驱动程序提供了 spi_nor 钩子,这些钩子的原型定义在文件 <linux>/include/linux/mtd/spi-nor.h
中。
API |
描述 |
---|---|
read_reg |
从SPI NOR闪存寄存器读取数据 |
write_reg |
将数据写入SPI NOR闪存寄存器 |
read |
从SPI NOR闪存读取数据 |
write |
将数据写入SPI NOR闪存 |
erase |
擦除SPI NOR闪存的一个扇区 |
用于 NAND 闪存的 SPI 闪存控制器驱动程序在 MTD 框架中为 SPI NAND 闪存核心提供了 spi-mem 接口,该接口在文件 <linux>/include/linux/spi/spi-mem.h
中定义。
API |
描述 |
---|---|
spi_mem_exec_op |
执行内存操作 |