做童车外贸上哪个网站,wordpress显示作者的信息,河南新闻最新消息10条,越秀五屏网站建设一、SPI简介(serial Peripheral Interface#xff08;串行 外设 接口#xff09;)
1、电路模式#xff08;采用一主多从的模式#xff09;、同步#xff0c;全双工 1 所有SPI设备的SCK、MOSI、MISO分别连在一起 2 主机另外引出多条SS控制线#xff0c;分别接到各从机的S…
一、SPI简介(serial Peripheral Interface串行 外设 接口)
1、电路模式采用一主多从的模式、同步全双工 1 所有SPI设备的SCK、MOSI、MISO分别连在一起 2 主机另外引出多条SS控制线分别接到各从机的SS引脚 3 输出引脚配置为推挽输出输入引脚配置为浮空或上拉输入 4 推挽输出高低电平都有很强的驱动能力使得SPI引脚信号的下降沿和上升沿非常迅速 5 IIC因为要实现半双工经常切换输出输入IIC又要实现多主机的时钟同步和总线仲裁若使用推挽输出任意电源短路 6 SPI的MISO可能有冲突一位内主机是输入三个从机都是输出若三个从机始终是推挽输出势必会导致冲突。 故SPI有个规定 当从机的SS引脚为高电平时即从机未被选中其MISO引脚必须切换成高阻态高阻态相当于引脚断开不输出任何电平这样可以防止一条线有多个输出导致电平冲突问题 SS为低电平时MISO才允许变为推挽输出切换在从机中不需要关注 2、4条信号线 1 SS片选信号线理解为从机选择线、Slave Select:单片机通过给片选信号线高低电平来确定哪一个从机通讯一般当这根线为低电平时片选才有效 2 SCK时钟信号线、Serial Clock主设备产生 3 MOSI发送信号线、Master Output Slave Input:主设备从MOSI输出数据而从设备通过MOSI接收数据 4 MISO接收信号线、Master Input Slave Output主设备通过这根线接收数据 3、通信过程 同步肯定有时钟因此SCK引脚就是用来提供时钟信号的。数据位的输出和输入都是SCK的上升沿和下降沿进行的。这样数据位的收发时刻就可以明确的确定。 全双工数据发送和数据接收单独各占一条线。MOSI和MISO就是分别用于发送和接收的两条线路。MOSI是主机输出从机输入主机向从机发送数据的线路。MISO就是主机从从机接收数据的线路。 SPI仅支持一主多从不支持多主机。I2C太麻烦直接开辟一条通讯线专门用来指定我要跟哪个从机进行通信即SS从机选择线。 I2C实现一主多从的方式是在其实条件下主机必须先发送一个字节进行寻址用来指定我要跟哪个从机进行通信。所以I2C要涉及分配地址和寻址的问题。 4、SPI的硬件规定、SPI的软件规定
主机stm32 从机存储器、显示屏、通信模块、传感器等 SPI所有通信线都是单端信号它们的高低电平都是相对GND的电压差所以单端信号所有设备还需要共地。
如果从机没有独立供电主机需要额外引出电源正极VCC给从机供电。
SCK时钟线完全由主机掌控所以对于主机来说时钟线为输出对于所有从机来说时钟线为输入。这样主机的同步时钟就能送到各个从机 MOSI:主机输出从机输入
MISO:主机输入从机输出
SS:低电平有效主机想指定谁就把对应的SS输出线置低电平。比如主机初始化所有SS线都置高电平谁也不指定
输出引脚推挽输出高低电平均有很强的驱动能力这将使得SPI引脚信号的下降沿和上升沿非常迅速不像I2C下降沿非常迅速但是下降沿就非常缓慢。SPI信号变化快自然它就能达到更高的传输速度。一般SPI信号都能轻松达到MHz的速度级别。I2C并不是不想使用更快的推挽输出而是I2C要实现半双工经常要切换输入输出而且I2C又要实现多主机的时钟同步和总线仲裁这些功能都不允许I2C使用推挽输出。否则容易导致电源短路I2C选择更多的功能自然放弃更强的性能
输入引脚浮空或上拉输入
SPI有个缺点如果三个从机始终都是推挽输出主机一个是输入势必会导致冲突。规定当从机的SS引脚为高电平时也就是从机未被选中它的MISO引脚必须切换为高阻态高阻态就相当于引脚断开不输出任何电平。这样就可以防止一条线有多个输出而导致的电平冲突的问题。在SS为低电平时MISO才允许变为推挽输出。 5、I2C和SPI的比较 1I2C 1、I2C在硬件和软件电路设计都比较复杂但可在消耗最低硬件资源的情况下实现最多的功能 2、由于I2C开漏外加上拉电阻的电路结构使得通信线高电平的驱动能力比较弱这会导致通信线由低电平变到高电平的时候上升沿耗时比较长限制了IIC的最大通信速度 3、故IIC的标准模式只有100kHz的时钟频率快速模式只有400kHz (2)SPI 1、SPI传输更快,没有严格规定最大传输速度,最大传输速度取决于芯片厂商的设计需求,即看手册 2、SPI的设计比较简单粗暴,实现的功能没IIC多,硬件开销比较大,通行线的个数比较多哈,并且通行过程中,经常会有资源浪费的现象 3、SPI的风格最简单最快速的完成任务,没有应答机制 6、移位示意图SPI核心
左边是SPI主机里面有一个8位的移位寄存器右边是SPI从机里面也有一个8位的移位寄存器。移位寄存器有一个时钟输入端因为SPI一般是高位先行因此每来一个时钟移位寄存器都会向左进行移位。移位寄存器的时钟源是由主机提供的这里叫做波特率发生器它产生的时钟驱动主机的移位寄存器进行移位。同时这个时钟也通过SCK引脚进行输出接到从机的移位寄存器里。
组成一个圈 主机移位寄存器左边移出去的数据通过MOSI引脚输入到从机移位寄存器的右边。 从机移位寄存器左边移出去的数据通过MISO引脚输入到主机移位寄存器的右边。
1SPI的基础是交换一个字节 SPI通信的基础是交换一个字节从而可以实现①发送一个字节②接收一个字节和③发送同时接收一个字节三种功能。
2SPI时序基本单元 交换一个字节模式0应用最多 CPOL0时间极性空闲状态时SCK为低电平 CPHA0时钟相位SCK第一个边沿移入数据第二个边沿移出数据
四个模式
模式0CPOL0空闲SCK为0CPHA0SCK第一个边沿移入数据第二个边沿移出
模式1CPOL0空闲SCK为0CPHA1SCK第一个边沿移出数据第二个边沿移入
模式2CPOL0空闲SCK为1CPHA0SCK第一个边沿移入数据第二个边沿移出
模式3CPOL0空闲SCK为1CPHA1SCK第一个边沿移出数据第二个边沿移入
上述MOSI、MISO为两条线表示发送的既有可能是高电平又有可能是低电平 7、SPI完整的时序波形基于W25Q64
I2C中有效数据流第一个字节是寄存器地址之后依次是读写的数据使用的是读写寄存器的模型。
SPI中通常采用的是指令码加读写数据的模型。
SPI起始后第一个交换发送给从机的数据一般叫做指令码在从机中对应会定义一个指令集当我们需要发送什么时就可以在起始后第一个字节发送指令集里面的数据。
在W25Q64里0X06代表的是写使能在这里使用SPI模式0在空闲状态SS为高电平SCK为低电平MOSI和MISO电平没有严格规定。然后SS产生下降沿时序开始在这个下降沿时刻MOSI和MISO就要开始变换数据。
SCK低电平是数据变化的时期高电平是读取数据的时期
以下主机用0x06换来从机0xFF但是实际上从机并没有输出0XFF是默认高电平。 那整个时序的功能就是发送指令指令码是0x06从机比对后事先定义好的指令集发现0x06是写使能的指令那从机就会控制硬件进行写使能。这样一个指令从发送到执行就完成了。 1、发送指令实现向从机的0x123456的地址上发送0x55 1主机向SS指定的设备发送指令码0x06写使能的指令
2发送指令0x02表示要写入
3指定地址0x123456发送0x12高位地址、0x34、0x56低位地址
4发送指定数据0x55 2、指定地址读数
1主机向SS指定的设备发送指令码0x06写使能的指令
2发送指令0x03表示要读取
3指定地址0x123456发送0x12高位地址、0x34、0x56低位地址
4主机为高电平从机发送数据 二、W25Q64简介