SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。
SPI总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于 CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。
SPI总线有四种工作方式(SP0, SP1, SP2, SP3),其中使用的最为广泛的是SPI0和SPI3方式。SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
SPI主模块和与之通信的外设音时钟相位和极性应该一致。
SPI时序详解---SPI接口在模式0下输出第一位数据的时刻SPI接口有四种不同的数据传输时序,取决于CPOL和CPHL这两位的组合。图1中表现了这四种时序,时序与CPOL、CPHL的关系也可以从图中看出。
图1
CPOL是用来决定SCK时钟信号空闲时的电平,CPOL=0,空闲电平为低电平,CPOL=1时,空闲电平为高电平。CPHA是用来决定采样时刻的,CPHA=0,在每个周期的第一个时钟沿采样,CPHA=1,在每个周期的第二个时钟沿采样。由于我使用的器件工作在模式0这种时序(CPOL=0,CPHA=0),所以将图1简化为图2,只关注模式0的时序。
图2
我们来关注SCK的第一个时钟周期,在时钟的前沿采样数据(上升沿,第一个时钟沿),在时钟的后沿输出数据(下降沿,第二个时钟沿)。首先来看主器件,主器件的输出口(MOSI)输出的数据bit1,在时钟的前沿被从器件采样,那主器件是在何时刻输出bit1的呢?bit1的输出时刻实际上在SCK信号有效以前,比SCK的上升沿还要早半个时钟周期。bit1的输出时刻与SSEL信号没有关系。再来看从器件,主器件的输入口MISO同样是在时钟的前沿采样从器件输出的bit1的,那从器件又是在何时刻输出bit1的呢。从器件是在SSEL信号有效后,立即输出bit1,尽管此时SCK信号还没有起效。
从这张图就可以很清楚的看出主从器件的bit1是怎样输出的。
关键字:串行外设接口 SPI 总线时序
引用地址:
串行外设接口(SPI)总线时序详解
推荐阅读最新更新时间:2024-05-03 00:15
基于STM32f030c8t6的spi,iic,串口的初始化源程序
stm32单片机源程序如下: #include spi.h #include uart.h #include stdio.h #include delay.h void SPI1_Init(void) { RCC - AHBENR |=0X01 18; RCC - APB2ENR |=0x01 12; //SCK(pb3) MOSI(pb5)配置为普通功能推挽输出 //端口模式设置 //模式----通用输出模式(01) GPIOB- MODER &=~(0x03 6 |0x03 10); GPIOB- MODER |=0X01 6 | 0
[单片机]
STM32的SPI接口
STM32的SPI接口支持SPI协议和I2S音频协议,默认为SPI,可通过软件切换为I2S。 SPI接口: MISO 主设备输入/从设备输出 MOSI 主设备输出/从设备输入 SCK 串口时钟 NSS 从设备选择 初始化例程如下: void SPI_Init(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE );
[单片机]
STM32 SPI通信时钟极性和相位设置
通过 SPI_CR1 寄存器中的 CPOL 和 CPHA 位,可以用软件选择四种可能的时序关系。 CPOL(时钟极性)位控制不传任何数据时的时钟电平状态。此位对主器件和从 器件都有作 用。如果复位 CPOL,SCK 引脚在空闲状态处于低电平。如果将 CPOL 置 1,SCK 引脚在 空闲状态处于高电平。 如果将 CPHA(时钟相位)位置 1,则 SCK 引脚上的第二个边沿(如果复位 CPOL 位,则 为下降沿;如果将 CPOL 位置 1,则为上升沿)对 MSBit 采样。即,在第二个时钟边沿锁存 数据。如果复位 CPHA 位,则 SCK 引脚上的第一个边沿(如果将 CPOL 位置 1,则为下降 沿;如果复位 CPOL 位,则为
[单片机]
基于DSP+CPLD的断路器智能控制单元设计
摘要 :本文介绍了基于新型高性能数字信号处理器(DSP)芯片TMS320F2812和复杂可编程逻辑器件(CPLD)MAX7128实现的断路器智能控制单元设计。重点叙述了调理电路、F2812通信模块、CPLD模块的设计。采用嵌入式实时多任务操作系统μC/OS-Ⅱ作为系统软件平台,论述了系统软件和应用软件(任务的优先级、流程、通信与同步、通信协议等)的设计,并用VHDL语言实现执行电路的程序设计。该设计方案可提高断路器智能控制单元的可靠性,便于性能扩展。 随着计算机技术、信号检测技术及微电子技术的迅猛发展,对断路器控制单元的要求也不断提高,现代智能控制单元不仅要求具有自动保护、维护和信息传递功能,而且要求具备标准的通信协议
[工业控制]
Spansion发布128Mb MirrorBit SPI闪存,实现业界领先的104MHz性能
作为对SPI产品线的补充,该产品满足了机顶盒、网络、打印机和其它消费产品、企业以及基础架构应用对可靠性、性能和容量的需求 北京,2007年4月13日 —— 全球最大的纯闪存解决方案供应商Spansion(NASDAQ:SPSN)今天发布了具有业界最高性能的128Mb SPI(串行外设接口)闪存产品。这一128Mb MirrorBit SPI产品以90nm制程制造,能够帮助制造商利用SPI具有的更低的整体系统成本的优势,同时为更高容量的应用提供所需要的高性能和可靠性。Spansion目前还量产从4Mb到64Mb的SPI产品。 在104MHz下,128Mb MirrorBit SPI产品将串行闪存的性能提升到了一个全新的水平,它
[新品]
STM8 SPI的学习
#define SPI_CS_PORT GPIOC #define SPI_CS_PIN GPIO_PIN_4 #define SPI_CLK_PORT GPIOC #define SPI_CLK_PIN GPIO_PIN_5 #define SPI_MOSI_PORT GPIOC #define SPI_MOSI_PIN GPIO_PIN_6 #define SPI_MISO_PORT GPIOC #define SPI_MISO_PIN GPIO_PIN_7 SPI是串行设备接口(Serial Peripheral Interface)的英文缩写,是一种单主多从式的全双工同步串行通信协议。 SCK:同步时钟信号线
[单片机]
I2C总线时序模拟(一)-加深理解总线协议
view plain copy print ? #include reg52.h #define uchar unsigned char sbit sda=P2^0; sbit scl=P2^1;//用单片机的两个I/O口模拟I2C接口 uchar a; *************************************************************************** void delay()//简单延时函数 { ;; } *************************************************************
[单片机]
S3C2440的SPI解析
S3C2440A的串行外设接口(SPI)可以与串行数据传输连接。S3C2440A包含了2个SPI,每个都有2个分别用于发送和接收的8位移位寄存器。一次SPI传输期间,同时发送(串行移出)和接收(串行移入)数据。由相应控制寄存器设置指定8位串行数据的频率。如果只希望发送,则接收数据可以保持伪位(dummy)。此外如果只希望接收,则需要发送伪位'1'数据 使用SPI主要需要以下寄存器 选择SPI模式,中断模式,查询模式等SCK选择,主从机选择以及GPOL GPOA选择,关于GPOL与GPOA的描述请查看SPI协议手册 选择SPI时钟,SPI挂在PCLK上,具体计算公式如下 针对数据传输完成之后的SPI总线状
[单片机]