新闻中心

SPI的应用领悟

作者: 时间:2016-11-27 来源:网络 收藏
最近在做一个使用SPI协议对ADS1298芯片进行数据读取的项目。通过这个项目也渐渐的了解了SPI的一些皮毛知识。在此记录,以后可用。

本文引用地址://m.amcfsurvey.com/article/201611/322579.htm

SPI串口协议的工作原理是时钟信号控制移位寄存器的输入输出。主机发送时钟信号(SCLK),控制主机的寄存器和从机寄存器的移位。

最常用的全双工模式是这样工作的:

主机控制片选信号,使能我们要操作的从机。

然后主机写一个数据,写数据的时候,会发送相应的SCLK,同时主机按照SCLK,将寄存器位中的数据一一移位发送出来,从机也按照SCLK将从机寄存器的数据一一移位出来。到最后一个时钟的时候,他们两个寄存器的数据互换了。

如果主机发送数据的时候,从机也会发送数据,从机发送的数据也许并不是有效数据,但是我们去管他干什么呢。我买你将这次的数据放弃就是了。也就是说发送的时候肯定会有接收。要想接收那就必须要发送一个数据(无论是不是有效数据)。换句话讲,从机并不知道自己什么时候要移位发送数据,只是根据SCLK来发送数据。

我们也可以这么理解,因为单片机内部设置的是,发送数据时候才会产生相应的SCLK,这时候从机知道了就会把寄存器中的数据发出来。我们如果自己进行模拟的话,控制单片机或者FPGA发送SCLK就可以将从机的数据读出来,而不用使用主机的发送数据命令。即:SCLK控制和协调一切。

我们以 ADS1298的读取寄存器 这样一个操作为例,主机使用STM32F103。

ADS1298读取寄存器命令是这样的:



我们用单片机控制的话,不能控制SCLK的产生,那我们就用写数据,来产生SCLK,读取后面的REG DATA。至于OPCODE,我们就是直接发送了,为主机的有效数据,就是说前两个发送有效数据,接收到的数据丢弃。第三个发送过程,发送数据随便填写,无效,而接受的数据为有效数据,我们留起来用。

程序是这样子写的:

这是主程序里面的段落。

下面是读写子程序。




1、发送读寄存器的地址

2、发送读寄存器的个数

3、读发回来的数据(如果读寄存器的个数为n,那个就要有n个此条命令)


关于ADS1298,具体的还是要仔细阅读其说明文档。像我自己在做实验的时候,总是无法读取出来正常的命令。通过示波器看到输入线上的数据不对,完全为0.。后来仔细的阅读了其说明文档,发现ADS1298在连续读数据模式下,无法有效实现读寄存器。然后在前面关闭了连续读模式,就能够成功的读取到寄存器的数据了。

留此,以后翻阅。



关键词:SPI应用领

评论


技术专区

关闭