530 likes | 843 Views
5. 3 SPI 总线. ① 串行总线系统依靠一定的通信协议,只用很少几根线,就 能完成有效的数据传送。. ② 常见的 串行接口总线 Motorola 公司的 SPI ( Serial Peripheral Interface )总线、 PHILIPS 公司的 I 2 C 总线、 国家半导体公司的 NS8085U , Microwire 、 Intel 和 Duracell 公司提出的 SMBus ( System Management Bus )等。 在这一节里,主要介绍 SPI 总线。. 系统处理.
E N D
5. 3 SPI总线 ① 串行总线系统依靠一定的通信协议,只用很少几根线,就 能完成有效的数据传送。 • ②常见的串行接口总线 • Motorola 公司的 SPI(Serial Peripheral Interface)总线、 • PHILIPS公司的 I2C总线、 • 国家半导体公司的 NS8085U, • Microwire 、Intel 和 Duracell 公司提出的SMBus • (System Management Bus)等。 • 在这一节里,主要介绍 SPI总线。 系统处理 微机控制技术
5. 3 SPI总线 • SPI 是 增强型单片机MC68HC70508A( Motorola)的上的串行接口。 • 能与外部设备进行全双工、同步串行通信。 • 其功能类似MCS-51系列单片机串行口中的方式0。 • 关于MC68HC70508A单片机的详细内容请参看 Motorola公司的有关资料。 微机控制技术
5. 3 SPI总线 SPI具有如下特点: • 全双工操作 • 主从方式 • 有 4 种可编程主方式频率(最大为1.05MHz) • 最大从方式频率为 2.1 MHz • 具有可编程极性和相位的串行时钟 5. 有传送结束中断标志 7. 有写冲突出错标志 8.有总线冲突出错标志 不为低。 微机控制技术
5. 3 SPI总线 5.3.1 SPI的内部结构 5.3.2 SPI的工作原理 5.3.3 多机SPI系统 5.3.4 串行时钟的极性和相位 5.3.5 SPI中断 5.3.6 直接采用SPI总线接口芯片的应用 5.3.7 SPI总线模拟程序设计
5.3.1 SPI的内部结构图5.14 SPI接口内部结构 SPI接口的内部结构图如5.18所示。 微机控制技术
5.3.1 SPI的内部结构 从图5.14中可以看出,SPI接口由SPI移位寄存器、SPI控制电路、管脚控制逻辑、除法器、时钟逻辑以及控制寄存器(SPCR)、状态寄存器(SPSR)、数据寄存器(SPDR)等组成。SPI移位寄存器主要完成串/并数据之间的转换;管脚控制逻辑主要控制PD2/MISO,PD3/MOSI,PD4/SCK以及PD5/ 4个管脚的工作方式;除法器则是系统时钟的分频器,由程序控制选择4种不同的时钟频率;SPI控制电路用来控制串行工作状态及错误信息;3个SPI寄存器SPCR,SPSR和SPDR,主要用来保存各种状态信息及数据。 微机控制技术
5.3.1 SPI的内部结构 1.SPI数据寄存器(SPDR) 图5.15所示的SPDR是用于SPI所接收字符的读缓冲器。写一个字节到SPDR中,就是把该字节直接放入SPI移位寄存器。 微机控制技术
5.3.1 SPI的内部结构 2.SPI控制寄存器(SPCR) SPCR各位的功能如图5.16所示。 • SPCR具有下列功能: • 允许SPI中断请求; • 允许SPI; • 设置SPI为主或从方式; • 选择串行时钟极性、相位和频率。 微机控制技术
图5.15 SPI数据寄存器(SPDR)图5.16 SPI控制寄存器(SPCR) 图5.19 SPI数据寄存器(SPDR) 图5.20 SPI控制寄存器(SPCR) 微机控制技术
5.3.1 SPI的内部结构 图5.20所示的SPCR寄存器各位的功能: SPIE——SPI中断允许位,该读/写位允许SPI中断。复位时该位被清零。该位置“1”,表示允许SPI中断;置“0”表示禁止SPI中断。 SPE——SPI复位允许位,该读/写位允许SPI复位。复位时该位将被清零。该位为1时,允许SPI复位;为0时禁止SPI复位。 MSTR——主机位,该位用来选择主/从工作方式。复位时为零。该位为1时,选择主方式;为0时,选择 从方式。 微机控制技术
5.3.1 SPI的内部结构 CPOL——时钟极性位,该读/写位决定各发送数据之间PD4/SCK管脚的状态。为了在SPI总线上传送数据,各SPI必须有相同的CPOL位,复位不影响CPOL位。该位为1时表示传送数据间PD4/SCK管脚为逻辑1,为0时表示传送数据间PD4/SCK管脚为逻辑0。 CPHA——时钟相位位。该读/写位用来控制串行时钟和数据之间的时序关系。 微机控制技术
5.3.1 SPI的内部结构 为了在SPI总线上传送数据,各SPI之间必须有相同CPHA位。复位时对该位没有影响。 该位等于1时,表示PD4/SCK上第一个有效沿后的下一个有效沿锁存数据。该位为0时,表示PD4/SCK上第一个有效沿锁存数据。 微机控制技术
5.3.1 SPI的内部结构 SPR1和SPR0——SPI时钟速率位。这些读/写位用来选择主方式的串行时钟速率,如表5.2所示。从SPI的这两位对串行时钟无影响。 微机控制技术
表5.2 SPI时钟速率选择表 微机控制技术
5.3.1 SPI的内部结构 3.SPI状态寄存器(SPSR) 图5.17所示为SPSR中的标志位。在下列条件下,将产生置位信号: • SPI发送完毕 • 写冲突 • 方式错 图5.21 SPI状态标志寄存器(SPSR) 微机控制技术
5.3.1 SPI的内部结构 其中: SPIF——SPI标志位。该位是可清除的位,并且只能读,不能写。每当移出或移入到移位寄存器中一个字节时,该位被置位。如果SPCR中的SPIE也是置位状态,则SPIF产生一个中断请求。当SPIF置位时通过读SPSR可以清除SPIF,然后读(或写)SPDR。复位时该位被清除。该位为1时,表示传送完毕。该位为0时,表示传送未完。 微机控制技术
5.3.1 SPI的内部结构 WCOL——写冲突位。和SPIF一样,该位也是可清除的位,并且只能读,不能写。在传送过程中,软件对SPDR进行写时,该位置位。当WCOL置位时,可以用读SPSR的方法清除这一位;可以读和写SPDR,复位也将清除该位。该位置1,表示写SPDR无效。该位置0,表示写SPDR有效。 微机控制技术
5.3.1 SPI的内部结构 MODF——方式错位。该位也是只读并可清除位。当MSTR位置位时,在PD5/管脚上产生逻辑0时,MODF被置位。如果此时SPIF位也被置位,则MODF产生一个中断请求。清除及复位对它的影响同WCOL位。 该位置1,当MSTR位置位时,PD5/为低;该位置0,当MSTR位置位时,PD5/不为低。 微机控制技术
5.3.2 SPI的工作原理 • 主/从式 SPI 允许在主机与外围设备(包括CPU )之间进行串行通信。 • 当主机的 SPI 8位移位寄存器把一个字节传送到另一设备时,来自接收设备的一个字节也被送到主机 SPI 的移位寄存器。 • 主 SPI 的时钟信号与数据传送是同步的。 微机控制技术
5.3.2 SPI的工作原理 • 只有主SPI可以对传送过程初始化。 • 软件通过写入SPI数据寄存器(SPDR)的方法开始从主 SPI 传送数据。 • 在 SPI 传送过程中,SPDR 不能缓冲数据,写到 SPI 的数据直接进入移位寄存器,并在串行时钟控制下立即开始传送。 • 当经过 8 个串行时钟脉冲以后,SPI标志开始置位时,传送结束。同时SPIF置位,从接收设备移位到主SPI的数据被传送到SPDR。因此,SPDR所缓冲的数据是SPI所接收的数据。在主SPI传送下一个数据之前,软件必须通过读SPDR清除SPIF标志位,然后再执行。 微机控制技术
5.3.2 SPI的工作原理 在从SPI中,数据在主SPI时钟控制下进入移位寄存器,当一个字节进入从SPI之后,被传送到SPDR。为了防止越限,从机的软件必须在另一个字节进入移位寄存器之前,先读SPDR中的这个字节,并准备传送到SPDR中。 图5.22所示表示主SPI与从SPI进行数据交换的过程。 微机控制技术
图5.18 主机/从机数据传送方法 微机控制技术
5.3.2 SPI的工作原理 从图5.22 可以看出,实际上可以把两个8位的主、从寄存器看成一个循环的16位的寄存器。在传输时,只需这个16位寄存器循环移位8次,即可完成一次数据交换。 微机控制技术
5.3.2 SPI 的工作原理 当主CPU进入停止方式时,波特率发生器停止工作,进入所有主方式SPI操作。如果在SPI传送时执行STOP指令,则发生器暂停,直到IRQ管脚为低电平退出停止方式时为止。如果用复位来退出停止方式,SPI控制和状态位被清除,并且SPI被禁止。 微机控制技术
5.3.2 SPI的工作原理 在执行STOP指令时,如果主CPU是在从方式下,从SPI将继续运行,并仍能接收数据和时钟信息,以及把本身的数据返回到主机。对于从SPI,在传送结束时不置标志位,直到IRQ信号唤醒CPU为止。 值得注意的是,虽然从SPI在停止方式时可以与主SPI交换数据,但从SPI的状态位在停止方式时是无效的。 微机控制技术
1. 主方式下的管脚功能 设SPI控制寄存器(SPCR)中的MSTR位为SPI主方式。在主方式下SPI管脚功能如下: • PD4/SCK(串行时钟)——在主方式下,PD4/SCK管脚是同步时钟输出。 • PD3/MOSI(主输出,从输入)——在主方式下,PD3/MOSI管脚是串行输出。 • PD2/MISO(主输入,从输出)——在主方式下,PD2/MISO管脚为串行输入。 微机控制技术
2. 从方式下的管脚功能 清除SPCR中的MSTR位,使SPI工作于从方式,在从方式下SPI的管脚功能如下: • PD4/SCK(串行时钟)——在从方式下,PD4/SCK管脚是从主机SPI来的同步时钟信号的输入端; • PD3/MOSI(主输出,从输入)——在从方式下,该管脚为串行输入端; • PDI/MIS0(主输入,从输出),在从方式下,该管脚为串行输出端。 • PD5/ (从选择)——在从方式下,该管脚用做来自主SPI的数据和串行时钟接收的使能端。 微机控制技术
1. 主方式下的管脚功能 • PD5/ (从选择)——在主方式下,PD5/ 管脚用来保护在主方式下两个SPI同时操作时所引起的冲突。主机PD5/ 管脚上的逻辑0禁止SPI,清除MSTR位,并产生方式错误标志(MODF)。 微机控制技术
5.3.2 SPI的工作原理 当CPHA=0时,移位时钟是 与SCK相或。在此时钟相位方式下, 必须在SPI信息中的两个有效字符之间为高电平。 当CPHA=1时, 线在有效的传输之间保持低电平。这一格式多出现在有一个单独的、固定的主机和一个单独的从驱动MISO数据线的系统中。 微机控制技术
5.3.3 多机SPI系统 多机SPI系统的连接方法有网络型总线方式、菊花链式方式两种。 1. 网络型总线方式 2. 菊花链方式 微机控制技术
1. 网络型总线方式 在网络型总线方式主SPI系统中,所有的PD4/SCK,PD3/MOSI和PD2/MISO同名管脚均连在一起。在传送数据之前,一个SPI作为主机,其他均为从机,图5.19所示是网络型总线方式主SPI系统的原理框图。 事实上,一个系统中也可以有两个主机。一个由两个主SPI和三个从SPI组成的多SPI系统的原理,如图5.20所示。 微机控制技术
图5.23 一个主机和三个从机系统的原理框图 微机控制技术
图5.24 两个主SPI和三个从SPI系统原理框图 微机控制技术
2. 菊花链方式 在菊花链式连接系统中,所有的时钟和选择线都连在一起,一个设备的输出端连到后一个设备的输入端。菊花链上的设备数原则上可以任意多。该方法的原理,如图5.25所示。 微机控制技术
图5.21 菊花链式多SPI系统 微机控制技术
5.3.4 串行时钟的极性和相位 为了适应外部设备不同串行通信的要求,可以用软件改变SPI串行时钟的相位和极性。 SPCR中时钟的极性位(CPOL)和时钟的相位位(CPHA)用来控制串行时钟和传送数据间的时间关系。图5.22所示表示CPOL和CPHA位与时钟/数据之间的关系。 微机控制技术
图5.26 SPI时钟/数据时序图 微机控制技术
5.3.5 SPI中断 SPI有两个中断源: (1)SPI传送完中断——SPI状态寄存器中的SPI标志位(SPIF)表示SPI传送数据结束。当数据移入或移出SPI寄存器时,SPIF开始置位。如果SPIE也置位,则SPIF产生中断请求。 (2)SPI方式错中断——SPI状态寄存器中的方式错状态位(MODF)置位,表示SPI方式错。当SPI控制寄存器(SPCR)中的主机位(MSTR)置位,PD5/管脚为逻辑0时,MODF开始置位。如果SPIE也置位,则MODF产生中断。 微机控制技术
5.3.5 SPI中断 SPCR中的SPI中断允许位(SPIE)是两个中断的屏蔽控制位。只有当该位置位时,才允许中断。否则,即使上述两个中断位,即SPIF和MODF置位,也不能产生中断。 微机控制技术
5.3.6 直接采用SPI总线接口芯片的应用 MC68HC70508A中的SPI总线数据格式一般为8位。但不是所有的外设都是8位的,如串行A/D或D/A转换器除了8位外,还有10,12,14或16位的。因此,在SPI串行通信系统中,一定要注意串行通信的格式。 图5.27为SPI接口与单个外设连接示意图。图中(a)为与A/D转换器的连接图;(b)为与D/A转换器的接线图。要特别注意图中数据线MISO和MOSI的连接。图中,MAX1242/1243为10位串行A/D转换器;MAX5150/5151为13位电压输出型D/A转换器。 微机控制技术
图5.27 SPI与单个外设连接系统图 微机控制技术
5.3.6 直接采用SPI总线接口芯片的应用 在同一个SPI系统中,有时需要多个从设备,此时可以采用总线式或采用菊花链式结构,图5.28和图5.29为一个主机和3个从机(D/A)分别采用两种不同的连接方法的示意图。 微机控制技术
5.3.7 SPI总线模拟程序设计 值得说明的是,带SPI总线接口的器件,也可以和不带SPI总线的单片机连接,此时可用软件模拟SPI总线。例如,常用的51系列单片机就没有SPI总线。此时,我们可以采用模拟的方法来解决。为了适用各种器件的SPI接口,单片机可使用软件来模拟SPI的操作,包括串行时钟、数据输入和输出。对于不同的串行接口外围芯片,它们的时钟时序是不同的。 微机控制技术
5.3.7 SPI总线模拟程序设计 图5.30为8031(CPU)与美国Xicor公司芯片X25045(集uP监控、看门狗定时器、EEPROM于一体)的硬件连接图,有关X25045的详细情况请参见该公司产品手册。图中P1.0模拟SPI的数据输出端(MOSI),P1.1模拟SPI的SCK输出端,P1.2模拟SPI的从机选择端,P1.3模拟SPI的数据输入端(MISO)。 微机控制技术
图5.26 8031与X25045接口原理图 微机控制技术
5.3.7 SPI总线模拟程序设计 下面介绍用8031汇编语言模拟SPI串行输人、串行输出二个子程序。这些子程序也适用于在串行时钟的上升沿输入和下降沿输出各种串行外围接口芯片,如8位或10位A/D芯片,74LS系列输出芯片等,对于下降沿输入,上升沿输出的各种串行外围接口芯片,只要改变P1.1的输出顺序,即输出0再输入1,0……,他们也同样适用。 微机控制技术
5.3.7 SPI总线模拟程序设计 1.CPU串行输入子程序SPIIN 功能:按X25045时序从P1.3读人1字节数据至A。 入口参数:无 出口参数:A一数据 微机控制技术
5.3.7 SPI总线模拟程序设计 SPIIN: SETB P1.1 ;使P1.1(时钟)输出为1 CLR P1.2 ;选择从机 MOV R1,#08H ;置循环次数 SPIINl: CLR P1.1 ;使P1.1(时钟)输出为0 NOP ;延时 NOP MOV C,P1.3 ;从机输出至进位C RLC A ;左移至累加器A SETB P1.1 ;使P1.1(时钟)输出为1 DJNZ R1,SPINl ;判是否循环8次(1字节数据) RET ;返回 微机控制技术