1、总线的概念
总线是指计算机设备和设备之间传输信息的公共数据通道。总线是连接计算机硬件系统内多种设备的通信线路,一个重要特征是由总线上的所有设备共享,可以将计算机系统的多种设备连接到总线上。如果是某两个设备或设备之间专用的信号连接,就不能成为总线。
2、系统总线的架构图
3、微机中的总线分类
3.1、数据总线(Data Bus)
传输数据,是双向的。CPU可通过DB从内存或输入设备读取数据,又可通过DB将内部数据送至内存或输出设备。DB的宽度决定了CPU和计算机其他设备之间每次交换数据的位数。
3.2、地址总线(Address Bus)
传送CPU发出的地址信息,是单向的。传送地址信息的目的是指明与CPU交换信息的内存单元或I/O设备。存储器是按地址访问的,所以每个存储单元都有一个固定的地址,要访问1MB存储器中的任一单元,需要给出1M个地址,需要20位地址。地址总线的宽度决定了CPU的最大寻址能力。
3.3、控制总线(Control Bus)
传送控制信号、时序信号和状态信息等。有的CPU向内存或外部设备发出的信息,有的是内存或外部设备向CPU发出的信息。显然,CB中的每一条线的信息传送方向是一定的、单向的,单作为一个整体则是双向的。所以在各种结构框图中,凡涉及到控制总线CB,均是以双向线表示。
补充:
地址总线的宽度决定了CPU的寻址能力;数据总线的宽度决定了CPU与其他器件进行数据传送时的一次数据传送量;控制总线的宽度决定了CPU对系统中其他器件的控制能力。
4、常见的总线
4.1、I2C总线简介
是一种串行(同一时刻只能传输一个bit的信号,只需要一个数据线)、半双工(数据传输允许在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信)的总线,主要用于近距离、低速的芯片之间的通信;I2C有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;I2C总线硬件结构简单,简化PCB布线。
是一种多主机总线,连接在I2C总线上的器件分为主机和从机。主机有权发起和结束一次通信,从机只能被动呼叫;当总线上有多个主机同时启用总线时候,I2C也具备冲突检测和仲裁的功能防止错误产生。每个连接到I2C总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(但同一时刻只能有一个主机)。
4.1.1、通信过程
(1)主机发送起始信号启用总线
(2)主机发送一个字节数据指明从机地址和后续字节的传送方向
(3)被寻址的从机发送应答信号回应主机
(4)发送器发送一个字节数据
(5)接收器发送应答信号回应发送器
(6)循环(4)(5)
(7)通信完成后主机发送停止信号释放总线
4.1.2、起始信号和停止信号
SCL为高电平时,SDA由高变低表示起始信号。
SCL为低电平时,SDA由低变高表示停止信号。
起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态,停止信号产生后总线被释放,处于空闲状态。空闲时,SCL和SDA都是高电平。
停止:
主机不发了,就发送停止信号。
主机不接,不应答,主机就发送停止信号结束此次通信。
4.1.3、字节传送与应答
I2C总线通信时每个字节为8位长度,数据传送时,先传送最高位,后传送低位,发送器发送完一个字节数据后接收器必须发送一位应答位来回答发送器。
4.1.4、同步数据信号
I2C总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号允许发生变化,时钟线SCL为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定。
4.1.5、典型的I2C时序
(1)主机向从机发送数据
(2)从机向主机发送数据
(3)主机向从机发送数据,然后从机再向主机发送数据
学习链接:I2C总线协议详解(特点、通信过程、典型I2C时序)_zhangduang_KHKW的博客-CSDN博客_i2c总线
4.2、SPI总线
4.2.1、SPI概念
SPI(Serial Peripheral Interface)串口外围设备接口。是一种高速的,全双工,同步的通信总线,极大节约了芯片管脚。主要应用在EEPROM、FLASH、实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
4.2.2、主从模式
SPI分为主、从两种模式,一个SPI通讯系统需要包含一个(仅能为一个)主设备,一个或多个从设备。提供时钟的为主设备,接受时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。
4.2.3、SPI信号线
SPI接口使用四根信号线通信:
SDI(数据输入)
SDO(数据输出)
SCK(时钟)
CS(片选)
MISO(Mast In Slace Out): 主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
MOSI(Msat Out Slace In): 主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
SCLK:串行时钟信号,由主设备产生。
CS/SS:从设备片选信号,由主设备控制。它的功能是用来作为“片选引脚”,也就是选择指定的从设备,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。
4.2.4、SPI数据发送接收
SPI主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。
(1)拉低SS信号线,表示与该设备进行通信。
(2)主机发送SCLK时钟信号,来告诉从机写数据或者读数据。
(3)主机将要发送的数据写到数据缓存区,缓存区通过移位寄存器,串行移位寄存器通过MOSI信号线将字节一位一位的移出去给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区
(4)从机将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。
SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。
4.2.4、SPI通信的四种模式
通信双方必须工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制主设备的通信模式。
时钟极性CPOL定义时钟空闲状态电平:
CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时。
CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时。
时钟相位(CPHA)定义数据的采集时间。
CPHA=0,在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样,在第2个边沿发送数据。
CPHA=1,在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样,在第1个边沿发送数据。
4.2.5、SPI的通信协议
主从设备必须使用相同的工作模式------SCLK、CPOL和CPHA,才能正常工作。如果有多个从设备,并且它们使用了不同的工作模式,那么主设备必须在读写不同的从设备时需要重新修改对应从设备的模式。
4.2.6、SPI三种模式
SPI工作在三中模式下,分别是运行、等待和停止。
运行模式(Run Mode)
这是基本的操作模式
等待模式(Wait Mode)
SPI工作在等待模式是一种可配置的低功耗模式,可以通过SPICR2寄存器的SPISWAI位进行控制。在等待模式下,如果SPISWAI位清0,SPI操作类似于运行模式。如果SPISWAI位置1,SPI进入低功耗状态,并且SPI时钟将关闭。如果SPI配置为主机,所有的传输将停止,但是会在CPU进入运行模式后重新开始。如果SPI配置为从机,会继续接收和传输一个字节,这样就保证从机与主机同步。
停止模式(Stop Mode)
为了降低功耗,SPI在停止模式是不活跃的。如果SPI配置为主机,正在进行的传输会停止,但是在CPU进入运行模式后会重新开始。如果SPI配置为从机,会继续接受和发送一个字节,这样就保证了从机与主机同步。
重点:
STM32中SPI初始化配置
(1)初始化GPIO口,配置相关引脚的复用功能,使能SPIx时钟。调用函数:void GPIO_Init();
(2)使能SPI时钟总线:RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE)
(3)配置SPI初始化的参数,设置SPI工作模式:SPI_Init(SPI1,&SPI_Initstructure)
(4)使能SPI外设:SPI_Cmd(SPI1,ENABLE);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)