SPI Nor FLASH

本文主要介绍了Linux内核中对SPI Nor Flash设备的驱动管理,参考了dervices/mtd/devices/m25p80.c及M25P64 datasheet。Linux通过MTD驱动来管理SPI Nor Flash,重点在于设备的注册、mtd_info的配置以及分区设置。SPI Flash驱动作为SPI设备驱动的一部分,MTD设备的读写操作依赖于注册的字符设备及其底层读写方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SPI Nor FLASH

参考内核 dervices/mtd/devices/m25p80.c
M25P64 datasheet

由于M25P64属于SPI Nor Flash linux内核对于Flash采用Mtd驱动进行管理。
分析m25p80.c 省略了MTD Nor Flash Jedec与CFI 分析 这块分析可以参考韦东山老师Nor flash驱动的讲解 ,对于SPI falsh 驱动已经支持的很好了,只需要去添加以下设备注册
驱动硬件接口属于SPI设备驱动

static struct spi_driver m25p80_driver = {
   
	.driver = {
   
		.name	= "m25p80",
		.bus	= &spi_bus_type,
		.owner	= THIS_MODULE,
	},
	.probe	= m25p_probe,
	.remove	= __devexit_p(m25p_remove),
};


static int m25p80_init(void)
{
   
	return spi_register_driver(&m25p80_driver);
}


static void m25p80_exit(void)
{
   
	spi_unregister_driver(&m25p80_driver);
}


module_init(m25p80_init);
module_exit(m25p80_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Mike Lavender");
MODULE_DESCRIPTION("MTD SPI driver for ST M25Pxx flash chips");

对于MTD Nor Flash设备驱动核心在于分配,设置mtd_info,注册。 MTD设备读写均使用MTD注册字符设备进行读写,最终调用mtd_info中注册的底层设备读写方法。


struct m25p {
   
	struct spi_device	*spi;
	struct semaphore	lock;
	struct mtd_info		mtd;
	unsigned		partitioned;
	u8			command[4];
};

/*
 * board specific setup should have ensured the SPI clock used here
 * matches what the READ command supports, at least until this driver
 * understands FAST_READ (for clocks over 25 MHz).
 */
static int __devinit m25p_probe(struct spi_device *spi)
{
   
### SPI NOR Flash 技术原理 SPI NOR Flash 是一种通过串行外设接口(Serial Peripheral Interface,SPI)进行通信的非易失性存储器。其内部结构基于传统的NOR Flash技术,但在外部连接上采用了更精简的SPI协议来减少引脚数量和简化电路设计。 #### 工作机制 SPI NOR Flash 的工作机制主要包括以下几个方面: - **命令集驱动**:所有的操作都是由主机发送特定指令给SPI NOR Flash完成。例如读取数据时会先发出READ指令再跟随地址信息;写入前需先擦除目标区域并通过WRITE ENABLE设置允许写状态之后才能真正开始写入过程[^4]。 - **页编程模式**:当向SPI NOR Flash中写入新数据之前,必须先将要修改的数据所在的整个页面全部加载到缓存里,在这个基础上做更改后再一次性把更新后的整页内容回写回去覆盖旧有的记录。这种方式虽然增加了额外开销但是能有效防止部分写失败造成逻辑错误的情况发生。 - **扇区/块擦除功能**:为了能够重用已占用的空间,提供了不同大小级别的物理删除单位——最小的是4KB的小型扇区,往上还有32KB的大区块以及最大范围内的全片清除选项可供选择。这种分级管理方式提高了空间利用率同时也兼顾到了效率上的考量。 ```c // C语言示例代码展示如何初始化并读取SPI NOR Flash中的数据 void spi_nor_init(void){ // 初始化SPI总线配置... } uint8_t read_spi_nor_data(uint32_t address, uint8_t *buffer, size_t length){ // 发送READ INSTRUCTION命令 send_command(CMD_READ); // 设置起始读取位置 set_address(address); // 接收指定长度的数据流至缓冲区内 receive_data(buffer,length); return SUCCESS; } ``` ### 应用场景 由于具备良好的随机访问性能、较低的成本优势加上易于集成等特点,SPI NOR Flash被广泛应用于各种领域当中: - **固件储存**:作为启动ROM使用保存BIOS或其他引导程序以便于计算机加电自检阶段调用执行从而实现系统的冷启动流程控制[^1][^2]。 - **嵌入式开发板卡**:为MCU单片机提供必要的外围扩展资源比如字体库文件或是图形界面素材等静态资料存放场所[^3]。 - **消费电子产品**:像路由器、智能家居设备内核镜像版本升级包临时暂存仓库等功能模块都离不开这类高效稳定的非挥发介质的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值