4.4-串行外设接口(SPI)协议

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

4.9通用串行通信接口(USCI)—SPI模式主要内容•SPI总线协议–总线结构–工作模式–数据传输时序•MSP430SPI模块–模块的特性–主从机模式–SPI模块寄存器–应用示例SPI总线介绍•SPI接口是Motorola首先提出的全双工三/四线同步串行外围接口,采用主从模式架构,支持多从设备应用,一般只支持单主设备。•利用3~4条线完成两个芯片之间的双工高速通信。两条数据线用于收发数据,一条时钟线用于同步,一条作为从机选择。•时钟由主设备控制,当主机发送一字节数据(通过主出从入MOSI引脚)的同时,从机返回一字节数据(通过主入从出MISO引脚)。•总线上允许连接多个设备,在同一时刻只允许一个主机操作总线,并且同时只能与一个从机通信。主机控制数据的传输过程。•目前应用中的数据速率可达Mbps级。SPI总线可在软件的控制下构成各种简单的或复杂的系统:•1个主MCU和几个从MCU•几个从MCU相互连接构成多主机系统(分布式系统)•1个主MCU和1个或几个从I/O设备常用SPI总线结构主控器MCU被控器1被控器2被控器N.../SS1/SS2/SSNSCKMOSIMISOSPI典型结构如下:SPI工作模式•主机模式:当器件作为主机时,使用一个IO引脚拉低相应从机的选择引脚(STE),传输的起始由主机发送数据来启动,时钟(SCK)信号由主机产生。通过MOSI发送数据,同时通过MISO引脚接收从机发出的数据。•从机模式:当器件作为从机时,传输在从机选择引脚(STE)被主机拉低后开始,接收主机输出的时钟信号,在读取主机数据的同时通过MISO引脚输出数据。SPI电气连接以4线SPI为例,其通信时需要的4个引脚分别为:引脚名称类型描述SCK输入/输出串行时钟,用于同步SPI接口间数据传输的时钟信号。该时钟信号总是由主机驱动,并且从机接收STE输入从机选择,SPI从机选择信号是一个低有效信号,用于指示被选择参与数据传输的从机。每个从机都有各自特定的从机选择输入信号。MISO输入/输出主入从出,MISO信号是一个单向的信号,它将数据由从机传输到主机。MOSI输入/输出主出从入,MOSI信号是一个单向的信号,它将数据从主机传输到从机。SPI主机SPI从机1SPI从机2SSELSPIBUSP0.1P0.2nCSnCS作SPI主机时,STE要接上拉电阻STE引脚作用•STE:从机模式发送接收允许控制引脚,控制多主从系统中的多个从机。该引脚不用于3线SPI操作,可以在4线SPI操作中使多主机共享总线,避免发生冲突。•4线SPI操作主模式中,STE的含义如下:–SIMO和SCLK被强制进入输入状态–SIMO和SCLK正常操作•4线SPI操作从模式中,STE的含义如下:–允许从机发送接收数据,SIMO正常操作–禁止从机发送接收数据,SIMO被强制进入输入状态SPI数据传输数据传输格式:通常是高位(MSB)在前,低位(LSB)在后。一些增强型MCU中可以通过软件设置高位在前或低位在前。下面以8位数据的传输为例,看一下4种不同数据传输格式的时序。首先介绍两个概念:1.时钟极性:表示时钟信号在空闲时是高电平还是低电平。2.时钟相位:决定数据是在SCK的上升沿采样还是在SCK的结束沿采样。SPI传输时序时钟相位为1时钟前沿数据输出时钟后沿数据采样时钟信号极性0极性1从机选择时钟相位控制为0时钟前沿数据采样时钟后沿数据输出Bit112345678Bit1Bit2Bit3Bit4Bit5Bit6Bit7Bit8Bit1Bit2Bit3Bit4Bit5Bit6Bit7Bit8Bit1Bit2Bit3Bit4Bit5Bit6Bit7Bit812345678SCK(CPOL=0)SCK(CPOL=1)SSELCPHA=0Cycle#CPHA=0MOSI(CPHA=0)MISO(CPHA=0)CPHA=1Cycle#CPHA=1MOSI(CPHA=1)MISO(CPHA=1)Bit2Bit3Bit4Bit5Bit6Bit7Bit8时钟前沿输出时钟后沿采样时钟前沿采样时钟后沿输出传输模式根据时钟极性(CPOL)及相位(CPHA)不同可以组合成4种工作模式:SPI0,SPI1,SP2,SP3.(1)SPI0:CPOL=0,CPHA=0(2)SPI1:CPOL=0,CPHA=1(3)SPI2:CPOL=1,CPHA=0(4)SPI3:CPOL=1,CPHA=1传输模式•时钟极性(CPOL)定义了时钟空闲状态电平,对传输协议没有重大影响。•CPOL=0:时钟空闲状态为低电平。•CPOL=1:时钟空闲状态为高电平。传输模式•时钟相位(CPHA)定义数据的采样时间。•CPHA=0:在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样。•CPHA=1:在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样。SPI接口内部结构SCK_inSCK_outSS_inSPI移位寄存器SPI状态寄存器SPI时钟发生器&检测器输出使能逻辑SPI寄存器接口SPI中断VPB总线SPI总线SCK_out_enMOSI_out_enMISO_out_en特点•优点:(1)接口简单,利于硬件设计与实现。(2)时钟速度快,且没有系统开销。(3)相对抗干扰能力强,传输稳定。特点缺点:(1)缺乏流控制机制,无论主器件还是从器件均不对消息进行确认,主器件无法知道从器件是否繁忙。因此,需要软件弥补,增加了软件开发工作量。(2)没有多主器件协议,必须采用很复杂的软件和外部逻辑来实现多主器件架构。通用串行通信接口(USCI)模块•通用串行通信接口(USCI)模块支持多种串行通信模式。不同的USCI模块支持不同的模式•USCI_Ax模块支持:–UART模式–IrDA通信的脉冲整形–LIN通信的自动波特率检测–SPI模式•USCI_Bx模块支持:–I2C模式–SPI模式MSP430模块特点MSP430的SPI模块有如下特点:–支持3线或4线SPI操作–支持7位或8位数据格式–接收和发送有单独的移位寄存器–接收和发送有独立的缓冲器–接收和发送有独立的中断能力–时钟的极性和相位可编程–主模式的时钟频率可编程–传输速率可编程–支持连续收发操作–支持主从方式主模式MSP430USCI作为主机、外围设备作为从机图从模式外围设备作为主机,MSP430USCI作为从机图UCSI串行时序同步串行通信时序,UCMSB=1SPI模式下可用的USCI寄存器名称描述访问复位值寄存器访问UCBxCTLW0USCI_Bx控制字0读/写0001h字UCBxBRWUSCI_Bx波特率控制字读/写0000h字UCBxMCTLUSCI_Bx调制器控制UCBxSTATUSCI_Bx状态寄存器读/写00h字节UCBxRXBUFUSCI_Bx接收缓存读/写00h字节UCBxTXBUFUSCI_Bx发送缓存读/写00h字节UCBxI2COAUSCI_BxI2C本机地址读/写0000h字UCBxI2CSAUSCI_BxI2C从机地址读/写0000h字UCBxICTLUSCI_Bx中断控制读/写0200h字UCBxIEUSCI_Bx中断使能读/写00h字节UCBxIFGUSCI_Bx中断标志读/写02h字节UCBxIVUSCI_Bx中断向量读0000h字USCI_Ax和USCI_Bx都有SPI模块,下面以USCI_Bx为例,介绍相关寄存器应用示例SPI主机与从机通过三线SPI接口通信,主机发送数据给从机,同时又接收从机发来的数据,发送数据从0x01开始递增,从机接收到数据,就立马发出,主机接到这个数据,进入中断如果发送和接收数据相同,则点亮LED灯,否则熄灭。程序流程图RXISR初始化SPI模块初始化发送数据MST_Data判断发送缓冲是否为空,若是,则发送第一个字符判断发送缓冲是否为空,为空说明上次发送完毕判断本次接收到的字符和上次发送是否相同,相同则亮灯发送数据自加1,并赋值给发送缓冲主机RXISR初始化SPI模块判断发送缓冲是否为空,为空说明上次发送完毕本次接收到的数据赋值给发送缓冲从机主机——端口初始化P8SEL|=BIT4+BIT5+BIT6;P8DIR|=BIT4+BIT5+BIT6;P1DIR|=BIT0+BIT1;P1SEL|=BIT0+BIT1;选择P1.1~P1.0端口为输出选择P1.1~P1.0端口为输出选择P8.4~P8.6为外设功能选择P8.4~P8.6端口方向为输出UCB1CTL1|=UCSWRST;UCB1CTL0|=UCMST+UCSYNC+UCCKPL+UCMSB;UCB1CTL1|=UCSSEL_2;UCB1BR0=0x02;UCB1BR1=0;UCB1IE|=UCRXIE;UCB1CTL1&=~UCSWRST主机——SPI模块初始化选择SMCLKUSCI_Bx模块逻辑复位3线,8位,主机模式,时钟极性高,MSB先发送配置波特率打开SPI中断USCI_Bx复位释放主机——其他配置MST_Data=0x01;SLV_Data=0x00;P1OUT|=BIT1;__delay_cycles(100);while(!(UCB1IFG&UCTXIFG));UCB1TXBUF=MST_Data;从机选择引脚USCI_Bx模块逻辑复位3线,8位,主机模式,时钟极性高,MSB先发送延时判断发送缓冲是否为空,如果为空,标志位置位,则说明上个数据未发送完毕,等待直到数据发送完毕发送第一个字符主机——接收中断#pragmavector=USCI_B1_VECTOR__interruptvoidUSCI_B1_ISR(void){switch(__even_in_range(UCB1IV,4)){case0:break;case2:while(!(UCB1IFG&UCTXIFG));if(UCB1RXBUF==SLV_Data)P1OUT|=0x01;elseP1OUT&=~0x01;MST_Data++;SLV_Data++;UCB1TXBUF=MST_Data;__delay_cycles(500);break;case4:break;default:break;}}判断发送缓冲是否为空,如果为空,标志位置位,则说明上个数据未发送完毕,等待直到数据发送完毕如果接收与发送相同,点亮LED发送下一个字符从机——端口初始化P8SEL|=BIT4+BIT5+BIT6;P8DIR|=BIT4+BIT5+BIT6;P1REN|=BIT4;P1OUT|=BIT4;P1IES&=~BIT4;P1IFG&=~BIT4;P1IE|=BIT4;使能P1.4内部电阻P1.4输出为1选择P8.4~P8.6为外设功能选择P8.4~P8.6端口方向为输出P1.4上升沿捕获,进入中断P1.4IFG清零P1.4中断使能主机——SPI模块初始化UCB1CTL1|=UCSWRST;UCB1CTL0|=UCSYNC+UCCKPL+UCMSB;UCB1CTL1&=~UCSWRSTUSCI_Bx模块逻辑复位3线,8位,主机模式,时钟极性高,MSB先发送USCI_Bx复位释放从机——接收中断#pragmavector=USCI_B1_VECTOR__interruptvoidUSCI_B1_ISR(void){switch(__even_in_range(UCB1IV,4)){case0:break;case2:while(!(UCB1IFG&UCTXIFG));UCA0TXBUF=UCA0RXBUF;break;case4:break;default:break;}}判断发送缓冲是否为空,如果为空,标志位置位,则说明上个数据未发送完毕,等待直到数据发送完毕发送下一个字符从机——接收中断#pragmavector=USCI_B1_VECTOR__interruptvoidUSCI_B1_ISR(void){switch(__even_in_range(UCB1IV,4)){case0:break;case2:while(!(UCB1IFG&UCTXIFG));UCA0TXBUF=UCA0

1 / 40
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功