SPI的通信速率到底可以达到多少_第1页
SPI的通信速率到底可以达到多少_第2页
SPI的通信速率到底可以达到多少_第3页
SPI的通信速率到底可以达到多少_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、楼主提问:SPI 的通信速率到底可以达到多少?按照手册上的说明,应该能到 fosc/4,然而实际上由于 SPI 通信底层没有任何握手,不彳象I2C 总线那样带 ACK,所以 SPI 速率实际上根本不能达到 fosc/4,除非发信端与收信端完全同步,然而事实上接收端往往要对接收到的数据进行一些判断和处理,所以在接收端往往会丢数,解决办法就是在发信端发完一个字节后人为加上延时等待接收端处理,但是如果这样的话,高速还有什么意义呢?我做了一个试验,即使关掉所有其它中断,只作 SPI 通信处理,在 fosc/4 的通信速率下,接收端只能接收 10 个字节以内的数据,10 个字节以上就会丢数,而在 fos

2、c/8 的通信速率下,如果关闭所有其它中断,收发 256 个字节是没什么问题的,但是如果应用程序有 1ms 的时钟中断事件的话,spi 通信成功率很低。在前面很多帖子里,看到不少人说 spi 只是硬件底层,通信的可靠性要靠通信协议,诚然如此,但是我以为通信协议只是最后一道保障,如果底层不可靠,通信协议再完善也是惘然。轮询和中断方式有本质区别吗?轮询就能保证不被其它中断干扰吗?主机自己掌握SPI 节奏,它只知道自己发送出去了,并不知道从机是否处理完,如果从机还在处理上一个字节,这时候发下个字节显然会丢数据啊解答者 1 回答:是同步!不是异步!也就是说 MASTER 提供时钟,所以完全由 MAST

3、ER 决定速率(当然大家都能达到的)再有就是这个速率仅仅指一个 BYTE 的通讯速率,不是整个帧速率(2 个 BYTE 以上)从机查询和中断无关,说白了就是移位寄存器!楼主再问:关键就在于这个速率要大家都能达到啊,如果都能达到就不用讲了,实测下来就是 slave端达不到这个速率啊。如果这个速率是一个 BYTE 的指标那就没啥说的了,我认了,只能在字节之间加延时了。解答者 2:我试过用 fosc/2 的时钟速率进行两机通讯(系统时钟 16M),连续传了好多字节都没有问题。主机用查询方式发送;从机用中断接收,接收到的数据用液晶显示出来。解答者 1:多字节是不可能达到 fosc/2 的!除非从机速率

4、更快,有足够的时间去处理或保存(读取数据),要不然是吹牛的!影响速率达不到 fosc/2 就是从机提取数据!与系统时钟多少那无关!再有,从机响应中断都要 4 个机器周期,更别说要存储,中断出来也要 4 个机器周期。对于单字节来说是可以达到 fosc/2,因为 AVR 可以使用倍率,本来是 fosc/4 的!所以,数据手册里讲白可以达到 fosc/4 那是指单字节的速率!楼主:所以说手册给出来的指标很带有欺骗性,为了可靠起见(相信很多人的程序中都有个时钟在运行),建议放在 fosc/16。SPI 接口原理SPI 接口的全称是SerialPeripheralInterface,意为串行外围接口,是

5、 Motorola 首先在其MC68HCXX 系列处理器上定义的。SPI 接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI 接口是在 CPU 和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输, 高位在前, 地位在后, 为全双工通信,数据传输速度总体来说比 I2C 总线要快, 速度可达到几 Mbps。SPI 接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,其接口包括以下四种信号:(1)MOSI-主器件数据输出,从器件数据输入(2)MISO-主器件数据输入,从器件数据输出(3)SCLK-时钟

6、信号,由主器件产生(4)/SS-从器件使能信号,由主器件控制在点对点白通信中,SPI 接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比 I2C 系统要稍微复杂一些。SPI 接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为 8 位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在 SCLK 的下降沿上数据改变,同时一位数据被存入移位寄存器。SPI 接口内部硬件图示:最后,SPI 接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。/SPI与UART勺区另 I:SPI 是三

7、线或者四线(CSCLKDIDO)UART 是两线制(TXDRXD),实际上就是串口;SPI 一般是 CS=0 启动传输,以 CLK 作为同步信号,不含启动位停止位等 UART 传输信号中包含了启动位和停止位等,本身就可作为同步信号使用SPI 一般没有标准的通信速率UART 一般都是使用标准的通信波特率/SPI 通信-单片机最多能带动多少从机?回答 1:SPI 主要是芯片级或板级通信使用,也有设备之间使用的。但不可能在实际应用中有太多的 SPI设备互连。回答 2:SPI 是一个环形总线结构,由 ss(cs)、sck、sdi、sdo 构成,其时序其实很简单,主要是在 sck的控制下,两个双向移位寄

8、存器进行数据交换。假设下面的 8 位寄存器装的是待发送的数据 10101010,上升沿发送、下降沿接收、高位先发送。那么第一个上升沿来的时候数据将会是 sdo=1;寄存器=0101010 x。下降沿到来的时候,sdi 上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在 8 个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个 spi 时序。例子:假设主机和从机初始化就绪:并且主机的 sbuff=0 xaa,从机的 sbuff=0 x55,下面将分步对 spi 的 8 个时钟周期的数据情况演示一遍:假设上升沿发送数据脉冲主机 sbuff 从机 sbuffsdisd

9、o01010101001010101001 上 0101010X1010101X011 下 0101010010101011012 上 1010100X0101011X102 下 1010100101010110103 上 0101001X1010110X013 下 0101001010101101014 上 1010010X0101101X104 下 1010010101011010105 上 0100101X1011010X015 下 0100101010110101016 上 1001010X0110101X106 下 1001010101101010107 上 0010101X1101

10、010X017 下 0010101011010101018 上 0101010X1010101X108 下 010101011010101010这样就完成了两个寄存器 8 位的交换,上面的上表示上升沿、下表示下降沿,sdi、sdo 相对于主机而言的。其中 ss 引脚作为主机的时候,从机可以把它拉底被动选为从机,作为从机的是时候,可以作为片选脚用。根据以上分析,一个完整的传送周期是 16 位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个 8位时钟周期才把数据读回来SPI 总线是 Motorola 公司推出的三线同步接口,同步串行 3 线方式进行通信:一条时

11、钟线SCK,一条数据输入线 MOSI,一条数据输出线 MISO;用于 CPU 与各种外围器件进行全双工、 同步串行通讯。SPI 主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。图 3 示出 SPI 总线工作的四种方式,其中使用的最为广泛的是 SPI0 和 SPI3 方式(实线表示):图 2SPI 总线四种工作方式SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果 CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论