Chinaunix首页 | 论坛 | 博客
  • 博客访问: 876419
  • 博文数量: 284
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1960
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-04 16:41
文章分类

全部博文(284)

文章存档

2018年(5)

2017年(95)

2016年(69)

2015年(15)

2014年(100)

我的朋友

分类: 嵌入式

2016-12-15 10:35:32


SLAVE是不用主动进行操作的

我没用过STM32,不过可以从SPI接口的原理来解释一下,一般都是按我说的方式工作
SPI需要设为MASTER/SLAVE,而且必须一方为主,另一方为从,同步的时钟信号由主设备输出,从设备根据主设备给出的时钟信号进行相应操作。
主设备:配置好相关寄存器---->写数据到SPI数据寄存器---->输出时钟脉冲的同时将数据移位输出从设备
从设备:配置好相关寄存器---->写数据到SPI数据寄存器---->随着主设备输出的时钟脉冲同时将数据移位输出给主设备


由上可知,SPI的收发是同时进行的,这样就有一些问题需要解释:


1.主设备想读从设备的数据,先发命令,这好理解,直接将命令写到数据寄存器输出即可,但后面读数据的过程主设备应该发送什么?
这个问题需要先明白SPI自己并不能支持数据读写这样的操作,而是用户自己利用SPI接口扩展出来的功能,需要定制相关协议,对于读从设备数据,数据序列一般如下。
主设备:
命令字节1,命令字节2,...,命令字节N,任意数据1,任意数据2,...,任意数据M
从设备收到命令字后知道是主设备读数据,就会忽略主设备后面发出的数据,直接将主设备需要读回的数据回传给主设备,主设备发任意数据1的时候从设备回所需读数据第一个字节,依次类推。
需要注意的是,从设备必须在主设备发送任意数据1之前就把第一个字节写入SPI数据寄存器,否则主设备读到的数据会不对


2.在主设备发数据的时候,如果从设备不写数据到SPI数据寄存器,主设备会不会收到数据?
对于主设备,只要设置成收发同时进行的模式,就是不连从设备,一样可以收到数据,实际上是每输出一个时钟脉冲,主设备就会将SPI发送口设为相应状态,并从SPI接收口读一个状态放入接收移位寄存器,所以从设备不写数据到SPI数据寄存器,主设备依然可以收到数据。
对于这种情况,从设备回传的数据内容不能确定,理论上讲应该是其SPI数据寄存器之前的内容。


3.有的SPI会支持FIFO、DMA等功能,这只是把软件的工作由硬件来完成,收发流程并没有什么不同。


4.你所说的空字节正确的称呼应该是哑元字节(dumy byte),意思是填充上来凑数的,没有表示任何实际意义。

阅读(1070) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~