特点:
并行通信------数据各位同时发送
串行通信------数据一位一位发送 (SPI)
SPI的四根线:1.MISO (主设备数据输入,从设备输出)
2.MOSI(主设备输出,从设备输入)
3.SCLK (时钟信号)
4.CS/SS(片选信号)------选择哪一个从机
连接:
SPI是一个主机多个从机的,已经知道SPI有四根线,那么他们的连接方式就是点对点的,唯一有一个要注意的就是片选信号(CS/SS)他是要选择
的,不然不知道是哪一个从机。
原理:
1.SPI是没有起始信号,应答信号,校验位的。
2.SPI总线采用同步方式,在时钟线的第一个或者第二个跳变沿采集数据(主机侧读数据),然后在紧接着的下一个跳变沿发送数据。8个时钟周期即可完成一个字节的数据传输。
想象一下,你和你的朋友站在一条直线上,你们之间需要传递一些小纸条(数据)。但是,你们不能随便扔纸条,而是要等到老师(时钟信 号)吹哨子(跳变沿)的时候才能传递。
同步方式:就像你们在老师的哨声指挥下行动一样,SPI总线上的所有设备都是在时钟信号的控制下同时进行数据传输的。这意味着,没有 时钟信号,就不会有数据的移动。
时钟线的第一个或第二个跳变沿采集数据:这就好比老师第一次或第二次吹哨时,你开始读取手中纸条上的信息(主机读取从机发送的数 据)。这里的“跳变沿”指的是时钟信号从低到高或从高到低的变化时刻。
紧接着的下一个跳变沿发送数据:在老师下一次吹哨时,你将自己准备好的纸条(数据)传递给下一个朋友(主机向从机发送数据)。
8个时钟周期完成一个字节的数据传输:一个字节由8位组成,所以在SPI总线中,通过8次哨声(时钟周期),就能完成一个字节的信息传 递。这意味着,每次哨声响起,都会有一位数据被传输。
简单来说,SPI总线就像一个有组织的游戏,大家按照统一的规则(时钟信号)和步骤(跳变沿)来传递信息,确保了数据传输的准确性和高效性。
极性和相位:
1.SPI有四种模式:
1.低电平触发
2.高电平触发
3.上升沿触发
4.下降沿触发
(美女老师说过)如果在SPI是配置里面没有主机和从机进行相关的模式配置,那么SPI是没有办法通信的。也会通信失败。
2.极性和相位是和SPI的时钟信号关连起来的,它们决定了数据是如何在时钟信号的控制下被采样和传输的。理解这两个概念对于正确配置和使用 SPI接口至关重要。(可以理解为上面的纸条传输,要听哨声。那么这个东西主要是看从机的,然后再去配置主机)
SPI子系统主要由以下组件构成:
1.spi_master:代表SPI总线的控制器,负责管理SPI总线的时钟信号和其他控制信号。
2.spi_device:表示连接到SPI总线上的一个具体设备,包含了设备的地址、配置参数等信息。
3.spi_board_info:在板级支持文件中定义,包含了SPI设备的硬件信息,用于注册SPI设备到系统中。
在使用SPI子系统时,开发者通常需要:
定义spi_board_info结构体,包含设备的标识符、引脚配置、中断信息等。
注册spi_board_info到内核,这样SPI子系统就可以识别并初始化这个设备。
编写驱动程序,实现spi_driver结构体,包含设备的探测、移除和数据传输函数。
使用SPI子系统提供的API,如spi_write()、spi_read()和spi_transfer(),来与SPI设备进行数据交换。
SPI子系统就像是这条高速公路的交通管理中心
1. 设备管理
想象交通管理中心:它负责登记所有的小镇(SPI设备),知道哪些小镇在哪个位置,以及它们的特殊需求,比如有的小镇需要更快的车速(更高的时钟频率),有的小镇可能只允许特定类型的车辆进入(数据格式要求)。
2. 抽象层
就像路线指示牌:交通管理中心为司机(应用程序或驱动程序)提供清晰的指示牌,告诉他们如何到达目的地,而不需要了解公路的具体构造和维护细节。这样,无论是新手司机还是老司机,都能轻松找到路。
3. 配置和控制
想象红绿灯和速度限制:交通管理中心可以控制红绿灯(时钟信号)和速度限制(时钟频率),确保交通流畅,避免拥堵和事故。同时,它还可以决定哪些小镇现在可以通行(片选信号)。
4. 驱动程序支持
就像GPS导航系统:为司机提供路线规划和实时路况信息,司机只需要关注他们的目的地和驾驶,而不需要关心道路的具体设计和维护。
使用SPI子系统的过程
定义小镇的位置和需求:在板级支持文件中,定义每个小镇(SPI设备)的位置和特殊需求,比如是否需要快速通道(高时钟频率)。
注册小镇:将小镇的信息提交给交通管理中心(SPI子系统),这样管理中心就知道了小镇的存在。
编写小镇的访问指南:为每个小镇编写访问指南(驱动程序),告诉司机(应用程序)如何到达那里,以及小镇的特色服务(数据读写)。
使用访问指南旅行:司机(应用程序)根据访问指南,通过高速公路(SPI总线)到达小镇(SPI设备),享受小镇的服务(读写数据)。
总之,SPI子系统就像是一个智能的交通管理中心,它简化了城市与小镇之间的通信,让数据的传输变得更加高效和容易。开发者只需要关注他们想要实现的功能,而不需要深入了解SPI总线的底层细节。