SLAVE是不用主动进行操作的我没用过STM三二,不过可以从SPI接口的原理来解释一下,一般都是按我说的方式工作SPI需要设为MASTER/SLAVE,而且必须一方为主,另一方为从,同步的时钟信号由主设备输出,从设备根据主设备给出的时钟信号进行相应操作。主设备:配置好相关寄存器---->写数据到SPI数据寄存器---->输出时钟脉冲的同时将数据移位输出从设备从设备:配置好相关寄存器---->写数据到SPI数据寄存器---->随着主设备输出的时钟脉冲同时将数据移位输出给主设备 由上可知,SPI的收发是同时进行的,这样就有一些问题需要解释: 一.主设备想读从设备的数据,先发命令,这好理解,直接将命令写到数据寄存器输出即可,但后面读数据的过程主设备应该发送什么?这个问题需要先明白SPI自己并不能支持数据读写这样的操作,而是用户自己利用SPI接口扩展出来的功能,需要定制相关协议,对于读从设备数据,数据序列一般如下。主设备:命令字节一,命令字节二,...,命令字节N,任意数据一,任意数据二,...,任意数据M从设备收到命令字后知道是主设备读数据,就会忽略主设备后面发出的数据,直接将主设备需要读回的数据回传给主设备,主设备发任意数据一的时候从设备回所需读数据第一个字节,依次类推。需要注意的是,从设备必须在主设备发送任意数据一之前就把第一个字节写入SPI数据寄存器,否则主设备读到的数据会不对。 二.在主设备发数据的时候,如果从设备不写数据到SPI数据寄存器,主设备会不会收到数据?对于主设备,只要设置成收发同时进行的模式,就是不连从设备,一样可以收到数据,实际上是每输出一个时钟脉冲,主设备就会将SPI发送口设为相应状态,并从SPI接收口读一个状态放入接收移位寄存器,所以从设备不写数据到SPI数据寄存器,主设备依然可以收到数据。对于这种情况,从设备回传的数据内容不能确定,理论上讲应该是其SPI数据寄存器之前的内容。 三.有的SPI会支持FIFO、DMA等功能,这只是把软件的工作由硬件来完成,收发流程并没有什么不同。 四.你所说的空字节正确的称呼应该是哑元字节(dumy byte),意思是填充上来凑数的,没有表示任何实际意义
SPI的工作原理中有一句话:如果只进行写操作,主机只需忽略接收到的字节。请问,如何设置主机忽略?
最新推荐文章于 2023-08-18 09:52:08 发布