【嵌入式Linux内核驱动】SPI子系统 | 硬件原理 | 应用编程 | 内核驱动 | 总体框架

文章详细介绍了SPI通信协议的原理,包括其硬件连接、时序、CPOL和CPHA模式,以及SPI与IIC的有效字节流区别。接着,重点讲解了W25Qxx系列SPIFlash的工作原理、存储容量、操作注意事项和代码实现,如读ID、写使能、等待忙状态等。此外,提到了SPI的优缺点,并分析了内核驱动中的spidev应用程序及其局限性,最后概述了SPI驱动程序的框架和设备树配置。

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

1. 硬件原理

1.1 SPI通信协议

  • SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线

  • 四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select)

  • 同步,全双工

  • 支持总线挂载多设备(一主多从)

1.2 硬件连接

  • 多NSS独立片选方式
  • 菊花链方式

image-20221013101029283image-20221013101057997

引脚 含义
DO(MOSI) Master Output, Slave Input,
SPI主控用来发出数据,SPI从设备用来接收数据,输出引脚设置为推挽输出
DI(MISO) Master Input, Slave Output,
SPI主控用来发出数据,SPI从设备用来接收数据,输入引脚设置为浮空或上拉输入,从机不输出时为高阻态。
SCK Serial Clock,时钟
CS Chip Select,芯片选择引脚,NSS 信号线由高变低,是 SPI 通讯的起始信号。NSS 信号由低变高,是 SPI 通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。

移位寄存器示意图

image-20230707165907029 image-20230409213607428

1.3 时序

  • 起始:CS从高到低
  • 终止:CS从低到高

image-20230409213805870image-20230409213914435

SPI的时钟极性CPOL和时钟相位CPHA可以分别为0或1,由此构成了四种组合:

CPOL CPHA 模式 含义
0 0 0 CLK初始电平为低电平,在第一个时钟沿采样数据
0 1 1 CLK初始电平为低电平,在第二个时钟沿采样数据
1 0 2 CLK初始电平为高电平,在第一个时钟沿采样数据
1 1 3 CLK初始电平为高电平,在第二个时钟沿采样数据

常用的是模式0和模式3,因为它们都是在上升沿采样数据,不用去在乎时钟的初始电平是什么,只要在上升沿采集数据就行。

IIC有效字节流数据第一个字节是寄存器地址,之后是读写的数据,使用的是读写寄存器模型

SPI用指令码加读写数据模型,发送指令字节的方式来读取,从机中有指令集对应,

发送指令。

指定地址读。

指定地址写。

1.4 代码

IO模拟
void MySPI_Start(void)
{
   
	MySPI_W_SS(0);
}

void MySPI_Stop(void)
{
   
	MySPI_W_SS(1);
}

uint8_t MySPI_SwapByte(uint8_t ByteSend) //交换字节,发送的话就不需要读取返回值,接收的话就发送0XFF接收返回的数据。
{
   
	uint8_t i, ByteReceive = 0x00;
	
	for (i = 0; i < 8; i ++)  //模式0,其他模式对着时序图换一下MySPI_W_SCK就行
	{
   
		MySPI_W_MOSI(ByteSend & (0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值