spi接口的仿真及验证毕业论文(编辑修改稿)内容摘要:

线 MOSI 和低电平有效的从机选择线 SS(有的 SPI 接口芯片带有中断信号线 INT、有的 SPI 接口芯片没有主机输出 /从机输入数据线 MOSI) [7]。 SPI 简介 SPI( Serial Peripheral Interface)接口是工业标准的同步串行接口,是一种全双工、三线通信的系统。 由于串行总线的信号线比并行总线更少、更简单 ,越来越多的系统放弃 使用并行总线而采用串行总线。 在众多串行总线中 ,SPI 总线与 I2C 总线、 CAN 总线、 USB 等其他常用总线相比有很大优势。 SPI 总线最典型的应用就是主机与外围设备 (如 EEPROM、Flash RAM、 A/D 转换器、 LED 显示器、实时时钟等 )之间的通信 [6]。 SPI 的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少 4 根线(单向传输时只需要 3 根)。 也是所有基于 SPI 的设备共有的,它们是 SDI(数据输入), SD(数据输出), SCK(时钟), CS(片选)。 它们的定义如下: SCK:同步时钟信号 ,用来同步主机和从机的数据传输 ,由主机控制输出 ,从机在 SCK 的边沿接收和发送数据。 MOSI:主机输出、从机输入信号 ,主机在上升沿 (或下降沿 )通过该信号线发送数据给从机 ,从机在下降沿 (或上升沿 )通过该信号线接收该数据。 江南大学学士学位论文 6 MISO:主机输入、从机输出信号 ,从机在上升沿 (或下降沿 )通过该信号线发送数据给主机 ,主机在下降沿 (或上升沿 )通过该信号线接收该数据。 CS:从机片选信号 ,由主机控制输出。 其中 CS 是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位) ,对此芯片的操作才有效。 这就允许在同一总线上连接多个 SPI 设备成为可能。 接下来就负责通讯的 3 根线了。 通讯是通过数据交换完成的,这里先要知道 SPI 是串行通讯协议,也就是说数据是一位一位的传输的。 这就是 SCLK 时钟线存在的原因,由 SCK提供时钟脉冲, SDI, SDO 则基于此脉冲完成数据传输。 数据输出通过 SDO 线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。 完成一位数据传输,输入也使用同样原理。 这样,在至少 8 次时钟信号的改变(上沿和下沿为一次),就可以完成 8 位数据的传输。 要注意的 是, SCLK 信号线只由主设备控制,从设备不能控制信号线。 同样,在一个基于 SPI 的设备中,至少有一个主控设备。 这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少 8 位数据,而 SPI 允许数据一位一位的传送,甚至允许暂停,因为 SCLK 时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。 也就是说,主设备通过对 SCLK 时钟线的控制可以完成对通讯的控制。 SPI 还是一个数据交换协议:因为 SPI 的数据输入和输出线独立,所以允许同时完成数据的输入和输出。 不同的 SPI 设备的 实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义。 SPI 接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据 [11]。 SPI 的工作模式 SPI 有两种工作模式,分别为主模式和从模式。 主模式 将 Master 的数据传送给 Slave, 8 位数据传送,传送完毕,申请中断,如图 所示: 图 SPI 工作主模 式 MOSI MOSI SCLK SCLK SPI 接口的仿真及验证 7 从模式 在从模式下,每一位数据都是接收到时钟信号 SCLK 和 CS 信 号之后才发送 /接收。 此时, SCLK 信号又主机产生,接收的数据在三岔路口信号作用下依次由 MOSI 引脚写入移位寄存器,发送的数据在 SCLK 信号作用下由移位寄存器发送到 MISO 引脚。 图 SPI 工作从模式 SPI 的传输模式 SPI 总线是 Motorola 公司推出的三线同步接口,同步串行 3 线方式进行通信 :一条时钟线 SCK,一条数据输入线 MOSI,一条数据输出线 MISO。 用于 CPU 与各种外围器件进行全双工、同步串行通讯。 SPI 主要特点有 :可以同时 发出和接收串行数据。 可以当作主机或从机工作。 提供频率可编程时钟。 发送结束 中断标志。 写冲突保护。 总线竞争保护等。 下图 示出SPI 总线工作的四种方式,其中使用的最为广泛的是 SPI0 和 SPI3 方式 (实线表示 ): 图 SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时 钟极性( CPOL)对传输协议没有重大的影响。 如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果 CPOL=1,串行同步时钟的空闲状态为高电平。 时钟相位( CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。 如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。 SPI 主模块和与之通信的外设备时钟相位和极性应该一致。 SPI 总线包括 1 根串行同步时钟信号线以及 2 根数据线。 SPI 模块为了和外设进行数据交换,根据外 设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性( CPOL)对传输协议没有重大的影响。 如果 CPOL=0,串行MISO CS SCLK MISO CS SCLK 江南大学学士学位论文 8 同步时钟的空闲状态为低电平;如果 CPOL=1,串行同步时钟的空闲状态为高电平。 时钟相位( CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。 如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。 SPI 主模块和与之通信的外设音时钟相位和极性应该一致。 ( 1) SPI0 模式下的 CPOL 为 0, SCK 的空闲电平为低; CPHA 为 0,数据在串行同步时钟的第一个跳变沿(由于 CPOL 为低,因此第 1 个跳变沿只能为上升沿)时数据被采样。 ( 2) SPI1 模式下的 CPOL 也为 0, SCK 的空闲电平为低;但是 CPHA 为 1,数据在串行同步时钟的第二个跳变沿(由于 CPOL 为低,因此第 2 个跳变沿只能为下降沿)时数据被采样。 ( 3) SPI2 模式下的 CPOL 为 1, SCK 的空闲电平为高; CPHA 为 0,数据在串行同步时钟的第 1 个跳变沿(由于 CPOL 为高,因此第 1 个跳变沿只能为下降沿)时数据被采样。 ( 4) SPI3 模式下的 CPOL 为 1, SCK 的空闲电平为高; CPHA 为 1,数据在串行同步时钟的第 2 个跳变沿(由于 CPOL 为高,因此第 1 个跳变沿只能为上升沿)时数据被采样。 在上述 4 种模式中,使用的最为广泛的是 SPI0 和 SPI3 方式。 由于每一种模式都与其他三种不兼容,因此为了完成主、从设备间的通讯,主、从设备的 CPOL 和 CPHA 必须有相同的设置。 读者需要注意的是:如果主设备 /从设备在 SCK 上升沿发送数据,则从设备 /主设备最好在下降沿采样数据;如果主设备 /从设备在 SCK 下降沿发送数据,则从设备 /主设备 最好在 SCK 上升沿采样数据 [8]。 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 位时钟周期才把数据读回来 [9]。 SPI 接口的仿真及验证 9 表 脉冲 主机 SBUFF 从机 SBUFF SDI SDO 0 10101010 01010101 0 0 1 上 0101010x 1010101x 0 1 1 下 01010100 10101011 0 1 2 上 1010100x 0101011x 1 0 2 下 10101001 01010110 1 0 3 上 0101001x 1010110x 0 1 3 下 01010010 10101101 0 1 4 上 1010010x 0101101x 1 0 4 下 10100101 01011010 1 0 5 上 0100101x 1011010x 0 1 5 下 01001010 10110101 0 1 6 上 1001010x 0110101x 1 0 6 下 10010101 01101010 1 0 7 上 0010101x 1101010x 0 1 7 下 00101010 11010101 0 1 8 上 0101010x 1010101x 1 0 江南大学学士学位论文 10 SPI 接口的仿真及验证 11 第 3 章方案论证 对于 SPI 接口的设计,我们可以分为两大类,分别为利用单片机如 51 系列单片机实现和利用 FPGA 等可编程逻辑器件编程实现,下面将分别介绍两种方法的方法。 用 FPGA 来设计 SPI 通过对 SPI 的结构的了解可以设计一个系统框架,按照框架完成输入输出的功能。 一个典型的 SPI 系统包括一个主 MPU 和一个或者多个从外围器件。 单片机通过 SPI接口模块与 SPI 相连,当单片机以主机模式运行的时候,就可以与系统中的从机实现通信,而当它处于从机模式工作时,就能与宁外一个主机进行数据通信。 但在同一个时间内,系统中只能拥有一个 主机,否侧会造成系统的工作异常。 一个典型的用 FPGA 设计的系统框架如图 所示 [11]: 图 用 51 系列单片机实现 SPI 对于 MCS51 系列单片机来说,由于它不带有 SPI 串行总线接口,我们可以使用软件来模拟 SPI 的操作,包括串行时钟、数据输入以及数据输出。 不同的串行接口外围芯片拥有不同的时钟时序。 对于在 SCK 的上升沿输入(接收)数据并且在下降沿输出(发送)数据的器件,大都应在初始状态将其串行时钟输出口 设置为 1,而在允许接口后再将 置为 0。 这样, MCU 在输出 1 位 SCK 时钟的同时,可以将接口芯片串行左移,从而输出 1位数据到 MCS51 单片机的 口(模拟 MCU 的 MISO 线),之后再将置 为 1,使MCS51 系列 单片机从 (模拟 MCU 的 MOSI 线)输出 1 位数据至串行接口芯片。 这样就完成了 1 位数据输入输出的模拟。 此后再置 为 0,模拟下 1 位数据的输入输出 …… ,依此完成 8 次循环,即可完成 1 次通过 SPI 总线传输 8 位数据的操作。 对于在 SCK 的下降沿输入数据和上升沿输出数据的器件,则应取串行时钟输出的初始状态为 0,即在接口芯片允许时,先置 为 1,以便外围接口芯片输出 1 位数据( MCU 接收 1 位数据),之后再置时钟为 0,使外围接口芯片接收 1 位数据 (MCU 发送 1 位数据 ),从而完成 1 位数据的传送。 图 所示为 MCS51 系列单片机与存储器 X25F008( E2PROM)的硬件连接图 ; 微处理器 微处理器接口 SPI 总线接口 adr_i[1:0] dat_i[7:0] dat_o[7:0] int_o we_i cs_o miso_i mosi_o sck_o rst_i 江南大学学士学位论文 12 图 模拟 MCU 的数据输出端( MOSI), 模拟 SPI 的 SCK 输出端, 模拟 SPI 的从机选择端, 模拟 SPI 的数据输入端( MISO)。 以上便是两种实现 SPI 的方法,在实际应用中,只要高级点的单片机,都自带 SPI 接口,并且如 DSP 等也集成了 SPI 接口,大多芯片都趋向于用硬件而。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。