iic和spi
SPI和IIC详解

25
I2C总线协议
I2C的起始和停止条件
//产生IIC起始信号 void IIC_Start(void) { SDA_OUT(); //sda线输出 IIC_SDA=1; IIC_SCL=1; delay_us(4); IIC_SDA=0; //START:when CLK is high,DATA change form high to low delay_us(4); IIC_SCL=0; //钳住I2C总线,准备发送或接收数据 } //产生IIC停止信号 void IIC_Stop(void) { SDA_OUT(); //sda线输出 IIC_SCL=0; IIC_SDA=0; //STOP:when CLK is high DATA change form low to high delay_us(4); IIC_SCL=1; IIC_SDA=1; //发送I2C总线结束信号 delay_us(4); }
串行总线扩展技术 —— SPI和I2C
2013级电路与系统 ZACK
1
SPI总线
SPI是英语 Serial Peripheral interface 的缩写,含义为串行外围设备接口
。它是由 Motorola 公司开发的、用来在微控制器和外围设备芯片之间 实现数据交换的低成本、易使用的接口。被广泛应用 于 EEPROM, FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解 码器之间。
DMA使能设置: TXDMAEN: 发送DMA使能 RXDMAEN: 接收DMA使能
SSOE:SS输出使能。若设备处于多主设备模式,该位必须置为0,此时SS的功能 可由通用I/O口来替代。
14
状态寄存器SPI_SR
BSY:
IIC通讯协议与SPI通讯协议小结

IIC通讯协议与SPI通讯协议小结协议概述:本文旨在对IIC通讯协议(Inter-Integrated Circuit)和SPI通讯协议(Serial Peripheral Interface)进行小结和比较。
这两种通讯协议在嵌入式系统和电子设备中广泛应用,具有不同的特点和适用场景。
通过对两种协议的功能、优势和限制进行详细分析,旨在帮助读者更好地理解和选择适合自己应用的通讯协议。
一、IIC通讯协议1. 功能:IIC通讯协议是一种串行通讯协议,用于在芯片之间进行数据传输。
它使用两根线(SDA和SCL)进行数据和时钟的传输,支持多主设备和多从设备的连接。
2. 优势:- 简单、灵活:IIC协议使用两根线进行通讯,线路简单,布线方便。
同时,IIC协议支持多主设备和多从设备的连接,具有灵活性。
- 低功耗:IIC协议在通讯时钟停止时,设备进入低功耗模式,节省能源。
- 适用范围广:IIC协议广泛应用于各种电子设备中,如传感器、存储器、显示屏等。
3. 限制:- 通讯速度较慢:IIC协议的通讯速度较慢,最高速率一般为400kbps,不适合高速数据传输。
- 线路长度限制:由于IIC协议使用的是开漏输出,线路长度受到限制,一般不超过1米。
二、SPI通讯协议1. 功能:SPI通讯协议是一种全双工的串行通讯协议,用于在芯片之间进行数据传输。
它使用四根线(MISO、MOSI、SCK和SS)进行数据、时钟和设备选择信号的传输。
2. 优势:- 高速通讯:SPI协议支持高速通讯,通讯速率可以达到几百Mbps,适合高速数据传输。
- 简单、直接:SPI协议的通讯方式直接,不需要复杂的协议处理,对硬件要求较低。
- 灵活性高:SPI协议支持多主设备和多从设备的连接,具有较高的灵活性。
3. 限制:- 线路复杂:SPI协议使用四根线进行通讯,布线相对复杂。
- 设备选择信号限制:SPI协议每个从设备需要一个独立的设备选择信号,限制了可连接设备的数量。
总线I2C和SPI详解

IIC vs SPI现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身影。
原因是这两种通信协议非常适合近距离低速芯片间通信。
Philips(for IIC)和Motorola(for SPI)出于不同背景和市场需求制定了这两种标准通信协议。
IIC 开发于1982年,当时是为了给电视机内的CPU和外围芯片提供更简易的互联方式。
电视机是最早的嵌入式系统之一,而最初的嵌入系统是使用内存映射(memory-mapped I/O)的方式来互联微控制器和外围设备的。
要实现内存映射,设备必须并联入微控制器的数据线和地址线,这种方式在连接多个外设时需大量线路和额外地址解码芯片,很不方便并且成本高。
为了节省微控制器的引脚和和额外的逻辑芯片,使印刷电路板更简单,成本更低,位于荷兰的Philips实验室开发了‘Inter-Integrated Circuit’,IIC 或 IIC ,一种只使用二根线接连所有外围芯片的总线协议。
最初的标准定义总线速度为100kbps。
经历几次修订,主要是1995年的400kbps,1998的3.4Mbps。
有迹象表明,SPI总线首次推出是在1979年,Motorola公司将SPI总线集成在他们第一支改自68000微处理器的微控制器芯片上。
SPI总线是微控制器四线的外部总线(相对于内部总线)。
与IIC不同,SPI没有明文标准,只是一种事实标准,对通信操作的实现只作一般的抽象描述,芯片厂商与驱动开发者通过data sheets和application notes沟通实现上的细节。
SPI对于有经验的数字电子工程师来说,用SPI互联两支数字设备是相当直观的。
SPI是种四根信号线协议(如图):•SCLK: Serial Clock (output from master);•MOSI; SIMO: Master Output, Slave Input(output from master); •MISO; SOMI: Master Input, Slave Output(output from slave); •SS: Slave Select (active low, outputfrom master).SPI是[单主设备( single-master )]通信协议,这意味着总线中的只有一支中心设备能发起通信。
IIC通讯协议与SPI通讯协议小结

IIC通讯协议与SPI通讯协议小结一、引言本文旨在对IIC通讯协议与SPI通讯协议进行小结,分析两种通讯协议的特点、应用场景以及优缺点,并提供相应的标准格式的协议文档。
二、IIC通讯协议1. 特点IIC(Inter-Integrated Circuit)是一种串行通信协议,由飞利浦公司(Philips)开发。
其特点如下:- 仅需两根信号线:时钟线(SCL)和数据线(SDA)。
- 支持多主机和多从机通信。
- 传输速率相对较慢,适用于短距离通信。
- 具备广泛的设备支持,包括传感器、存储器等。
2. 应用场景IIC通讯协议在以下场景中得到广泛应用:- 与各类传感器的通信,如温度传感器、湿度传感器等。
- 与存储设备的通信,如EEPROM、Flash等。
- 与LCD显示屏的通信。
3. 优缺点IIC通讯协议的优点包括:- 简单易用,仅需两根信号线。
- 支持多主机和多从机通信。
- 设备支持广泛。
然而,IIC通讯协议也存在一些缺点:- 传输速率相对较慢,不适用于高速通信。
- 通信距离有限,适用于短距离通信。
4. IIC通讯协议标准格式协议文档以下是IIC通讯协议标准格式的协议文档示例:协议名称:IIC通讯协议标准格式版本号:1.0发布日期:YYYY-MM-DD1. 引言本文档旨在定义IIC通讯协议的标准格式,以便于各方在通信过程中遵循统一的规范。
2. 协议规范2.1 通信信号线定义- 时钟线(SCL):用于传输时钟信号。
- 数据线(SDA):用于传输数据信号。
2.2 通信过程2.2.1 主机发送起始信号- 主机将SCL线保持高电平,然后将SDA线从高电平切换至低电平,即发送起始信号。
2.2.2 主机发送地址和读/写位- 主机在发送起始信号后,将7位从机地址和读/写位依次发送至SDA线。
2.2.3 主机发送数据- 主机发送完地址和读/写位后,继续发送数据至SDA线。
2.2.4 主机发送停止信号- 主机在发送完数据后,将SDA线从低电平切换至高电平,即发送停止信号。
iic和spi有什么区别

iic和spi有什么区别什么是iicIIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS),IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。
这种方式简化了信号传输总线接口。
IIC简介即I2C,一种总线结构。
例如:内存中的SPD信息,通过IIC,与BX芯片组联系,IIC 存在于英特尔PIIX4结构体系中。
随着大规模集成电路技术的发展,把CPU和一个单独工作系统所必需的ROM、RAM、I/O 端口、A/D、D/A等外围电路集成在一个单片内而制成的单片机或微控制器愈来愈方便。
目前,世界上许多公司生产单片机,品种很多。
其中包括各种字长的CPU,各种容量的ROM、RAM以及功能各异的I/O接口电路等等,但是,单片机的品种规格仍然有限,所以只能选用某种单片机来进行扩展。
扩展的方法有两种:一种是并行总线,另一种是串行总线。
由于串行总线的连线少,结构简单,往往不用专门的母板和插座而直接用导线连接各个设备。
因此,采用串行线可大大简化系统的硬件设计。
PHILIPS公司早在十几年前就推出了I2C串行总线,利用该总线可实现多主机系统所需的裁决和高低速设备同步等功能。
因此,这是一种高性能的串行总线。
飞利浦电子公司日前推出新型二选一I2C主选择器,可以使两个I2C主设备中的任何一个与共享资源连接,广泛适用于从MP3播放器到服务器等计算、通信和网络应用领域,从而使制造商和终端用户从中获益。
PCA9541可以使两个I2C主设备在互不连接的情况下与同一个从设备相连接,从而简化了设计的复杂性。
此外,新产品以单器件替代了I2C多个主设备应用中的多个芯片,有效节省了系统成本。
什么是spiSPI是串行外设接口(Serial Peripheral Interface)的缩写。
通用接口协议(串口,iic,spi,can,TCPIP协议)

通⽤接⼝协议(串⼝,iic,spi,can,TCPIP协议) UARTUART通信⽅式:异步串⾏全双⼯通信⽅式异步通信:有通信速度要求。
UART通信速度由两个设备⾃⼰决定。
UART通信有⼀个数据格式。
UART通信四要素:波特率、数据位长度、校验位、停⽌位。
芯⽚通信过程中将这四个要素配好,完成了⼀⼤半功能。
备注:⾃⼰⽤过的开发版:STM32F407VGIIC协议:iic有两根线:⼀根时钟线,⼀个数据线。
iic有⼀个起始信号:时钟线拉⾼,数据从⾼电平到低电平,形成iic的起始信号iic是如何发送数据的:起始信号+设备地址+数据+结束信号7.1 字节格式发送到 SDA 线上的每个字节必须为 8 位每次传输可以发送的字节数量不受限制每个字节后必须跟⼀个响应位⾸先传输的是数据的最⾼位 MSB 见图 6如果从机要完成⼀些其他功能后例如⼀个内部中断服务程序才能接收或发送下⼀个完整的数据字节可以使时钟线 SCL 保持低电平迫使主机进⼊等待状态当从机准备好接收下⼀个数据字节并释放时钟线 SCL 后数据传输继续7.2 响应数据线低电平时产⽣应答,可继续发送,不然应为⾼电平,主机产⽣结束条件项⽬中的iic:HDC2010、DAC5574HDC2010:它是⼀个测量环境温湿度的⼀个芯⽚(IC),湿度和温度数字传感器8位的⼀个寄存器使⽤过程如下:使⽤iic进⾏寄存器的初始化:复位、关闭中断、启动测量寄存器//等待测量完成//去读取温湿度寄存器的数据。
void HDC2010Init(void){HDC2010WriteReg(HDC2010_RESET_DRDY_INT_CONF,SOFT_RES_NORMAL|ODR_1_120HZ|HEAT_EN_OFF|DRDY_OR_INT_EN_HIGH_Z); //正常复位、1/120输出速度、DRDY/INT_EN 引脚输出为⾼阻,不中断HDC2010WriteReg(HDC2010_INTERRUPT_MASK,DRDY_MASK_DISABLE|TH_MASK_DISABLE|TL_MASK_DISABLE|HH_MASK_DISABLE|HL_MASK_DISABLE); //中断掩码寄存器设置,所有中断关HDC2010WriteReg(HDC2010_MEASUREMENT_CONF,TEM_RES_14BIT|HUM_RES_14BIT|MEAS_CONF_TEM_HUM|MEAS_TRIG_START);//测量寄存器设置,温度14bit,温湿度均使⽤、并且启动测量}void HDC2010Read(void){unsigned short temperture=0;unsigned short humidity=0;float temperture_temp=0;float humidity_temp=0;while(HDC2010ReadReg(HDC2010_INTERRUPT_DRDY)&DRDY_START_READAY!=DRDY_START_READAY);//等待测量完成temperture=HDC2010ReadRegU16(HDC201_TEMPERATURE_LOW);humidity=HDC2010ReadRegU16(HDC201_HUMIDITY_LOW);//printf("temperture=%d\n",temperture);//printf("humidity=%d\n",humidity);temperture_temp=(float)(((float)temperture)*165/65536) - 40;humidity_temp=(float)(((float)humidity)*165/65536);if(temperture_temp<0)printf("00");elseprintf("%.2d",(int)temperture_temp);//printf("%d\n",(int)humidity_temp);}DAC5574是⼀个模拟电压输出的芯⽚。
IIC通讯协议与SPI通讯协议小结

IIC通讯协议与SPI通讯协议小结协议摘要:本文旨在对IIC通讯协议与SPI通讯协议进行综合性小结,包括协议的基本概念、原理、应用领域以及各自的优缺点等方面。
通过对比分析,以期为读者提供对这两种通讯协议的深入了解和正确应用的指导。
1. IIC通讯协议IIC(Inter-Integrated Circuit)通讯协议是一种串行通信协议,由飞利浦公司(现在的恩智浦半导体)开发。
它采用两线制,包括数据线(SDA)和时钟线(SCL),用于在集成电路之间进行通信。
1.1 基本原理IIC通讯协议采用主从结构,其中一个设备作为主设备,其他设备作为从设备。
主设备负责产生时钟信号和发送起始和停止条件,从设备则根据主设备的时钟信号进行数据传输。
1.2 应用领域IIC通讯协议广泛应用于各种电子设备之间的通信,如传感器、存储器、显示器、温度计等。
它在短距离通信和多设备连接方面具有优势。
1.3 优点- 仅需两根线进行通信,节省了引脚资源- 支持多从设备连接,可实现多设备之间的数据交互- 适用于短距离通信,传输速率较快1.4 缺点- 通信距离受限,一般在几米范围内- 对于长距离通信,需要额外的设备进行信号放大和重建2. SPI通讯协议SPI(Serial Peripheral Interface)通讯协议是一种全双工、同步的串行通信协议,由Motorola公司开发。
它采用四线制,包括数据线(MOSI)、数据线(MISO)、时钟线(SCLK)和片选线(SS)。
2.1 基本原理SPI通讯协议采用主从结构,其中一个设备作为主设备,其他设备作为从设备。
主设备通过控制时钟信号和片选信号与从设备进行通信。
2.2 应用领域SPI通讯协议广泛应用于各种外围设备之间的通信,如存储器、显示器、传感器、无线模块等。
它在高速数据传输和简单硬件设计方面具有优势。
2.3 优点- 支持高速数据传输,适用于对传输速率要求较高的应用- 硬件设计简单,成本较低- 可以同时与多个从设备进行通信2.4 缺点- 需要引脚资源较多,对于芯片内部引脚资源有限的应用不适用- 通信距离受限,一般在几米范围内3. IIC与SPI的比较3.1 通信方式- IIC通讯协议采用两线制,SPI通讯协议采用四线制。
IIC通讯协议与SPI通讯协议小结

IIC通讯协议与SPI通讯协议小结协议名称:一、引言本文旨在对IIC通讯协议与SPI通讯协议进行详细介绍和比较,以便读者更好地理解和应用这两种常见的通讯协议。
二、IIC通讯协议1.定义IIC(Inter-Integrated Circuit)通讯协议是一种串行通信协议,由飞利浦公司于1982年推出。
它采用双线制,包括一个数据线(SDA)和一个时钟线(SCL),能够在多个设备之间进行通信。
2.工作原理IIC通讯协议使用主从结构,其中一个设备充当主设备(Master),其他设备充当从设备(Slave)。
主设备通过发送起始信号和地址选择从设备进行通信。
通信过程中,主设备发送数据到从设备或接收从设备发送的数据。
3.特点- 线路简单:只需两根信号线,适用于连接多个设备。
- 速度较慢:通信速率一般在100 kHz或400 kHz,适用于短距离通信。
- 可靠性高:采用了应答机制,能够检测通信错误。
- 支持多主设备:多个主设备可以共享同一条IIC总线。
4.应用领域IIC通讯协议广泛应用于各种电子设备中,如传感器、显示屏、存储器等。
三、SPI通讯协议1.定义SPI(Serial Peripheral Interface)通讯协议是一种全双工的串行通信协议,由Motorola公司于1980年代推出。
它使用多线制,包括一个主设备(Master)和一个或多个从设备(Slave)。
2.工作原理SPI通讯协议使用主从结构,主设备通过选择从设备的片选信号进行通信。
通信过程中,主设备通过时钟信号(SCLK)发送数据到从设备的输入线(MOSI),同时从设备通过MISO线将数据返回给主设备。
3.特点- 速度较快:通信速率可以达到几十 MHz,适用于高速数据传输。
- 线路复杂:通信需要四根信号线,包括时钟线、主设备输出线、主设备输入线和片选线。
- 不支持多主设备:SPI通讯协议只支持单主设备与多个从设备的通信。
4.应用领域SPI通讯协议常用于与外围设备的高速数据传输,如存储器、显示屏、无线模块等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
uart,spi,i2c总线的区别I2C的数据输入输出用的是一根线,SPI则分为dataIN和dataOUT。
由于这个原因,采用I2C 时CPU的端口占用少,SPI多一根。
但是由于I2C的数据线是双向的,所以隔离比较复杂,SPI则比较容易。
所以系统内部通信可用I2C,若要与外部通信则最好用SPI带隔离(可以提高抗干扰能力)。
但是I2C和SPI都不适合长距离传输。
长距离时就要用485 了。
第一:SPI(Serial Peripheral Interface:串行外设接口);I2C(INTER IC BUS)UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)第二,区别在电气信号线上:SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。
SPI总线可以实现多个SPI设备互相连接。
提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。
主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。
如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。
I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。
在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。
(注:I2C资料了解得比较少,这里的描述可能很不完备)UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。
第三,从第二点明显可以看出,SPI和UART可以实现全双工,但I2C不行;个人认为:I2C线更少,我觉得比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。
SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。
I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。
SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。
外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU 等。
SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOST和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。
也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。
(1)SDO –主设备数据输出,从设备数据输入(2)SDI –主设备数据输入,从设备数据输出(3)SCLK –时钟信号,由主设备产生(4)CS –从设备使能信号,由主设备控制其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。
这就允许在同一总线上连接多个SPI设备成为可能。
接下来就负责通讯的3根线了。
通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。
这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。
数据输出通过SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。
完成一位数据传输,输入也使用同样原理。
这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。
要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。
同样,在一个基于SPI 的设备中,至少有一个主控设备。
这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。
也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。
SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。
不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。
在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。
最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。
AT91RM9200的SPI接口主要由4个引脚构成:SPICLK、MOSI、MISO及/SS,其中SPICLK 是整个SPI总线的公用时钟,MOSI、MISO作为主机,从机的输入输出的标志,MOSI是主机的输出,从机的输入,MISO 是主机的输入,从机的输出。
/SS是从机的标志管脚,在互相通信的两个SPI总线的器件,/SS管脚的电平低的是从机,相反/SS管脚的电平高的是主机。
在一个SPI通信系统中,必须有主机。
SPI总线可以配置成单主单从,单主多从,互为主从。
SPI的片选可以扩充选择16个外设,这时PCS输出=NPCS,说NPCS0~3接4-16译码器,这个译码器是需要外接4-16译码器,译码器的输入为NPCS0~3,输出用于16个外设的选择。
SPI协议举例SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。
那么第一个上升沿来的时候数据将会是sdo=1;寄存器=0101010x。
下降沿到来的时候,sdi 上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。
这样就完成里一个spi时序。
举例:假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi 的8个时钟周期的数据情况演示一遍:假设上升沿发送数据这样就完成了两个寄存器8位的交换,,sdi、sdo相对于主机而言的。
其中ss引脚作为主机的时候,从机可以把它拉底被动选为从机,作为从机的是时候,可以作为片选脚用。
根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的命令准备数据,主机在下一个8位时钟周期才把数据读回来。
SPI 总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线OSI,一条数据输出线MISO;用于CPU与各种外围器件进行全双工、同步串行通讯。
SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。
下图示出SPI总线工作的四种方式,其中使用的最为广泛的是SPI0和SPI3方式(实线表示):SPI总线四种工作方式SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。
如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。
时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。
如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
SPI主模块和与之通信的外设备时钟相位和极性应该一致。
SPI总线包括1根串行同步时钟信号线以及2根数据线。
SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。
如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。
时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。
如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
SPI主模块和与之通信的外设音时钟相位和极性应该一致。
补充:上文中最后一句话:SPI主模块和与之通信的外设备时钟相位和极性应该一致。
个人理解这句话有2层意思:其一,主设备SPI时钟和极性的配置应该由外设来决定;其二,二者的配置应该保持一致,即主设备的SDO同从设备的SDO配置一致,主设备的SDI同从设备的SDI配置一致。
因为主从设备是在SCLK的控制下,同时发送和接收数据,并通过2个双向移位寄存器来交换数据。
上升沿主机SDO发送数据1,同时从设备SDO发送数据0;紧接着在SCLK的下降沿的时候从设备的SDI接收到了主机发送过来的数据1,同时主机也接收到了从设备发送过来的数据0.SPI协议心得SPI接口时钟配置心得:在主设备这边配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。
因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。
但要注意的是,由于主设备的SDO连接从设备的SDI,从设备的SDO连接主设备的SDI,从设备SDI接收的数据是主设备的SDO发送过来的,主设备SDI接收的数据是从设备SDO发送过来的,所以主设备这边SPI时钟极性的配置(即SDO的配置)跟从设备的SDI接收数据的极性是相反的,跟从设备SDO发送数据的极性是相同的。