SPI总线bus的综述Word格式.docx
- 文档编号:22534587
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:15
- 大小:336.74KB
SPI总线bus的综述Word格式.docx
《SPI总线bus的综述Word格式.docx》由会员分享,可在线阅读,更多相关《SPI总线bus的综述Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;
如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
SPI主模块和与之通信的外设音时钟相位和极性应该一致。
SPI接口时序如图3、图4所示。
SPI是一个环形总线结构由SS(CS)、SCK、SDI、SDO构成,其时序其实很简单,主要是在SCK的控制下,两个双向移位寄存器进行数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。
那么第一个上升沿来的时候数据将会是SDO=1;
寄存器=0101010x。
下降沿到来的时候,SDI上的电平将所存到寄存器中去,那么这时寄存器=0101010SDI,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。
这样就完成里一个SPI时序。
例子:
假设主机和从机初始化就绪:
并且主机的SBUFF=0xaa,从机的SBUFF=0x55,下面将分步对SPI的8个时钟周期的数据情况演示一遍:
假设上升沿发送数据
脉冲
主机SBUFF
从机SBUFF
SDI
SDO
10101010
01010101
1上
0101010x
1010101x
1
1下
01010100
10101011
2上
1010100x
0101011x
2下
10101001
01010110
3上
0101001x
1010110x
3下
01010010
10101101
4上
1010010x
0101101x
4下
10100101
01011010
5上
0100101x
1011010x
5下
01001010
10110101
6上
1001010x
0110101x
6下
10010101
01101010
7上
0010101x
1101010x
7下
00101010
11010101
8上
8下
这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,SDI、SDO相对于主机而言的。
其中SS引脚作为主机的时候,从机可以把它拉底被动选为从机,作为从机的是时候,可以作为片选脚用。
根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来。
要注意的是,SCLK信号线只由主设备控制,从设备不能控制信号线。
同样,在一个基于SPI的设备中,至少有一个主控设备。
这样传输的特点:
这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCLK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。
也就是说,主设备通过对SCLK时钟线的控制可以完成对通讯的控制。
SPI还是一个数据交换协议:
因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。
不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义。
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。
在多个从设备的系统中,每个从设备需要独立的使能信号。
2主要特性
•全双工通信,可以同时发出和接收串行数据
•1.05Mbit/s的最大主机位速率
•四种可编程主机位速率
•可编程串行时钟极性与相位
•可以当作主机或从机工作
•提供频率可编程时钟
•发送结束中断标志
•写冲突保护
•总线竞争保护等
3应用范围
SPI主要应用在高速数据传输的外设上,例如SD卡,FLASH芯片等。
在集成电路飞速发展的近几年SPI总线应用非常广泛,大量的新型器件如LCD模块、FLASH、EEPROM存储器、数据输入、输出设备、实时时钟、AD转换器、数字信号处理器和数字信号解码器等都有采用SPI接口。
在早期的单片机系统中,CPU大都不具有SPI接口,因此,对SPI接口设备的访问,基本都是通过软件模拟产生SPI接口所需要的时序。
但是随着单片机技术的进步,新型的单片机一般都已将SPI接口控制器集成在单片机内部。
SPI在单片机上的应用是其应用范围上的一大转折点,进一步拓宽了其应用领域,使得SPI的优势能在更多的领域体现。
4应用实例
1)MCP42X2双SPI数字电位器
SPI模块支持两种(共4种)标准SPI模式。
它们是模式0和3。
SCK的上升沿数据采样。
CS的无效状态Vih,低有效状态Vil和高有效状态Vihh。
Vil就是低电平,Vih就是MCP42X2的供电电压,Vihh需要一个MCP42X2的供电的倍压。
当与MCP42X2通讯时,CS只需要给出一个有效电平(低电平或倍电压)就可以。
SPI0时序图
命令格式
命令字节具有3个字段,即地址、命令和2个数据位。
当前仅定义了一个数据位(D8)。
它用于写命令。
当主器件发送正确的命令字节选择所需的操作时,会访问器件存储器。
被访问的存储器单元包含在命令字节的AD3:
AD0位中。
所期望的操作包含在命令字节的C1:
C0位中。
C1:
C0决定所期望的存储器单元是被读取、写入、递增(抽头设置+1)还是递减(抽头设置-1)。
递增和递减命令仅对于易失性抽头寄存器有效。
当命令字节装入器件(在SDI引脚上)时,器件的SDO引脚被驱动。
对于该命令的前6位,SDO引脚将输出高位。
在第7位,SDO引脚将输出CMDERR位状态。
第8位的状态取决于所选择的命令
命令位:
C1C0功能位数
11读数据16
00写数据16
01递增8
10递减8
存储器映射和受支持的命令
只有SPI发送具有正确的SCK脉冲数时,才会执行SPI发送。
只有接收到全部数量的时钟之后,命令才会被执行。
如果CS引脚被强制为无效状态(VIH),串行接口会复位。
不完整的命令不会被执行。
器件支持连续执行命令的功能。
当CS引脚处于有效状态(VIL或VIHH)时,可以接收任意的有效命令序列
2)基于LPC2103的SPI总线技术的应用
本文给出了一种基于SPI总线的LPC2103控制外围LED显示的设计方法。
利用74HC595驱动静态共阳LED数码管,使用串转并的方式实现I/O口的扩展。
1LPC2103中的SPI功能特性
LPC2103是一个基于支持实时仿真的16/32位ARM7TDMI—SCPU的微控制器,内部具有2个完全独立的SPI控制器,采用全双工的数据通信方式,最大数据位速率为外设时钟Fpclk的l/8。
与SPI总线接口有关的专用寄存器有:
(1)SPCR控制寄存器。
该寄存器包含一些可编程位来控制SPI总线的功能,而且在数据传输之前进行设定,主要有时钟相位控制、时钟极性控制、主从模式选择、字节传输移动方向及SPI中断使能;
(2)SPSR状态寄存器(为只读寄存器)。
用于监视SPI功能模块的状态,包括一般性功能和异常情况。
主要用途是检测数据传输是否完成,通过判断SPIF位来实现,其他位用于指示异常情况;
(3)SPDR数据寄存器。
为SPI提供数据的发送和接收,处于主模式时,向该寄存器写入数据,将启动SPI数据传输。
串行数据的发送和接收通过内部移位寄存器来实现;
(4)SPCCR时钟计数器寄存器。
用于设置SPI时钟分频值,SPI处于主模式时,该寄存器用于控制时钟速率,即SPI总线速率,寄存器值为l位SCK时钟所占用的PCLK周期数,并且值为偶数,必须不小于8;
(5)SPINT中断标志寄存器。
包含了SPI的中断标志位,由数据传输完成及发生模式错误来引发。
1.1SPI电气连接
利用SPI总线可在软件的控制下构成各种系统,如l个主MCU和几个从MCU、几个从MCU相互连接构成多主机系统(分布式系统)、1个主MCU和1个或几个从I/O设备所构成的各种系统等。
在大多数应用场合,可使用1个MCU作为主机来控制数据,并向1个或几个从外围器件传送该数据。
从器件只有在主机发命令时才能接收或发送数据。
同一时刻只允许有1个主机操作总线。
在数据传输过程中。
总线上只能有1个主机和1个从机通信。
在一次数据传输中,主机总是向从机发送1个字节数据,而从机也总是向主机发送1个字节数据。
图l为SPI在主模式下控制2个SPI从机的硬件连接图。
1.2SPI数据传输
在SPI数据传输中,SPCR控制寄存器的CPHA和CPOL位作用非常关键。
CPHA为时钟相位控制,该位决定SPI传输时数据和时钟的关系,并控制从机传输的起始和结束,该位为1,时钟前沿数据输出,后沿数据采样;
为0,时钟前沿数据采样,后沿数据输出。
CPOL为时钟极性控制。
为l时,SCK为低电平有效;
为0时。
SCK努高电平有效。
图2为SPI的4种不同数据传输格式时序。
描述的是8位数据传输。
该时序图水平方向分成3部分:
(1)描述SCK和SSEL信号;
(2)描述CPHA为0时的MOSI和MISO信号;
(3)描述CPHA为l时的MOSI和MISO信号。
SSEL信号为低电平,说明SPI工作在从模式。
其中,MOSI和MISO信号中的bitl—bit8表示传输的第几位数据。
274HC595扩展I/O接口电路
SPI是一个串行输入输出的接口,使用串转并的接口芯片可以实现扩展I/0口。
74HC595芯片为一种常用的8位串转并移位寄存器芯片。
本系统利用74HC595来驱动静态共阳LED数码管。
74HC595的主要优点:
具有数据存储寄存器。
在移位过程中。
输出端的数据可以保持不变。
这在串行速度慢的场合很有用处,数码管没有闪烁感。
LPC2103I作在SPI主模式下。
图3为74HC595逻辑图。
图中,SI为串行数据输入引脚,用来连接LPC2103的MOSI功能引脚;
SCK为移位寄存器的时钟输入,连接LPC2103串行时钟线SCK;
为清移位寄存器引脚;
RCK为锁寄存器锁存时钟引脚;
即输出触发端与SSEL连接;
为输出使能引脚;
SQH为串行数据输出引脚,连接MISO;
QA~QH引脚为并行输出。
当
为高电平、
使能接低时,SCK产生一个上升沿,SI引脚当前电平值将在移位寄存器中左移l位,在下一个上升沿到来时移位寄存器中的所有位都会向左移l位,同时SQH引脚也会串行输出移位寄存器中的高位的值。
当RCK产生上升沿时,移位寄存器的值将会被锁存到锁存器里,并从QA~QH引脚输出。
图4为SPI接13与74HC595的连接原理图。
其中QA~QH分别连接共阳LED数码管的8个段。
在SPI输出1个字节的数据时,SSEL产生1个低电平,SPI主机串行地发该字节的各个位,各个位都依次被锁存在74HC595的移位寄存器内,当1个字节的数据传输完成后,SSEL由低电平变为高电平,从而使74HC595的移位寄存器的值被锁存到74Hc595的锁存器并从其QA~QH引脚输出;
在SPI输出1个字节数据的同时,74HC595移位寄存器之前的值也通过MISO引脚被SPI主机读回。
3软件设计
软件设计包括:
进行IO口初始化,设置SPI引脚连接,启用LPC2103的SPI0总线,设置GPIO的P0.4、P0.5、P0.6、P0.7为SPl0总线的SCK0、MIS00、MOSIO、SSELO特殊功能,置74HC595片选端的I/O口为输出功能。
其代码如下:
PINSEL0=0x00005500;
//股置SPI引脚连接
PINSELl=Ox00000000;
IODIR=HC595_CS;
//设置片选端I/O口为输出
3.1SPI总线操作初始化
图5为SPI总线操作流程图。
使用LPC2103的SPI总线主模式下实现对74HC595的数据传输,用来驱动外围LED数码管。
设置SPI时钟。
在SPI主模式下,SPCCR寄存器控制SCK的频率,SPI速率为Fpclk/SPCCR。
通过SPCR控制寄存器设置时钟相位、时钟极性、主模式控制、字节移动方向及SPI中断使能等。
代码实现如下:
VoidMSpilni(void)
{
SPI_SPCCR=0x52;
//设置SPI时钟分频
SPI_SPCR=(0<
<
3)|//CPHA=0,数据再从SCK的第一时钟沿采样
(1<
4)|//CPOL=1,SCK为低有效
5)|//STR=1,SPI处于主模式
(0<
6)|//LSBF=0,SPI数据传输MSB(位71)在先
7);
//SPIE=0,SPI中断被禁止
}
3.2SPI总线主模式下数据发送过程
首先选择从机。
设置片选。
选择74HC595为从机,置片选端SSEL为低有效。
将发送的数据写入SPDR。
发送出去。
等待SPIF置位,即数据发送完毕。
最后可从SPDR读取收到的数据。
以下为发送函数:
uint8MSendData(uint8data)
{IOCLR=HC595_CS;
//片选端,由LPC2103指定的I/O口置位
SPI_SPDR=data;
while(0==(SPI_SPSR&
Ox80));
//等待SPIF置位,即等待数据发
//完毕
IOSET=HC595_CS;
//片选置高无效,结束发送
return(SPI_SPDR);
//返回接收到的数据
3.3控制LED数码管主函数
主函数使用LPC2103的SPI接口输出给74HC595,用来
控制LED数码管显示。
DISP_TAB[]为LED显示0一F字模的
16进制码表。
MSendData()实现每一字节数据的发送。
#defineHC595_CSOx00000100//P0.8口为74HC595的片选
uint8constDISP_TAB[16I={0xC0,OxF9,0xA4,OxBO,0x99,0x92,Ox82,OxF8,0x80,0x90,0x88,0x83,0xC6,0xAl,0x86,Ox8E};
intmain(void)
{uint8rcv_data;
uint8i;
//设置SPI引脚连接
PINSELl=0x00000000;
//设置LPC2103片选I/O口为输出功能
MSpiIni();
//初始化SPI接口
while
(1)
{for(i=0;
i<
16;
i++)
{rcv_data=MSendData(DISP_TAB[i]);
//发送显示数据
DelayNS(50);
//延时
}
return(O);
基于SPI总线的数据通信技术已经广泛应用在MCU与各种外围设备的串行通信中。
如存储系统、A/D转换系统、网络控制器和多MCU构成的分布式系统。
本文给出了74HC595芯片驱动LED数码管显示的电路,采用SPI总线技术实现对LED显示的数据传输,方便快捷、准确性高、速度快。
满足了复杂微控制系统对外围设备控制的要求。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SPI 总线 bus 综述