串口转SPI驱动协议的制定

串口转SPI驱动协议的制定

      最近在做到一个项目,需要使用SPI去驱动外设,但是我们不是直接使用主控去编写外设的SPI驱动。所以就会有一个串口转SPI的需求,即使用UART发送数据转为SPI驱动。做了简单的框架图,以帮助大家理解。
在这里插入图片描述
      到这,不免大家有疑问,我干嘛要这样多此一举,我直接用可编程主控去控制SPI外设不就好了。正常情况下,这样的想法一点问题都没有,甚至想给你点个赞。OK,接下来看我装逼了~~~~。
      假如我手里的主控是一个带无线的主控。例如DFRobot的Bluno系列,就是带蓝牙的主控。这里只是简单举个例子,不一定要用蓝牙,有wifi,2.4G之类的等等,都有可能。那既然有无线,我干嘛一定要使用有线的呢。当然,如果你是速度党,那就另当别论了。接下来的可能不太适合你了,请移步~。
      所以上面的框架图自然而然就得更新了,然后图就变成下面这样了。
在这里插入图片描述
      这样的话,我想大家就应该能理解为什么需要做这个串口转SPI的驱动协议了。当然这里所说的串口并不一定是物理的UART,我这里用的蓝牙,就是蓝牙透传过来的数据。统称为了串口数据。说白了就是把蓝牙接收到的数据转成SPI协议驱动外设。
      接下来我们先简单看下SPI的协议。使用过SPI的应该比较熟悉,四线SPI的数据线有MISO和MOSI两个,这两条线上的数据是同步传输的,也就是主机在发一个数据的时候,从机也会有一个数据返回,至于返回的数据是否是有效的,就看各个传感器自己的定义的。
在这里插入图片描述
      上图的意思就是MOSI上数据为0x01时,MISO返回的为0x11。MOSI数据为0x02时,MISO返回的是0x12,依次类推。MOSI和MISO是同步产生的,也就是说MOSI和MISO是在同一时间段上产生的。所以SPI的实质就是交换数据,但是像我们自定义的UART转SPI协议是不可能像这样全双工的。因为我们需要把UART得到数据先解析判断一次,看它是个什么意思,再把这意思通过SPI跟从设备进行通信。所以,在没有数据量缓存的情况下,可以按照下面这种来进行通行。
在这里插入图片描述
      当然现在的单片机显示是不可能这点数据缓存量都没有。所以按照正常来说,我们还是选用发一段数据后,再查看这段数据的返回值。因为有很多SPI传感器是需要查看返回值的,根据返回的值来判断下一步该怎样执行。时序图就像下面这样了。
在这里插入图片描述
      当然如果我们的无线传输如果是全双工的,并且速度很快的话,也可以像下面这样,先缓存部分数据后,接收数据和SPI通信便可以同步进行,只需要主控这边在接收到返回的数据后,进行一下偏移操作就可以得到正确的返回值。
在这里插入图片描述
      我这边使用的是BLE设备,所以速度都被BLE限制了,再加上BLE这边每次只能发送20字节的数据。感觉怎样优化都没多大影响了。所以决定干脆直接以BLE的一个包为解析对象了。
在这里插入图片描述
我们理想的状态就像上面一样第一个包把数据传过来,SPI驱动后把数据再还回去。但是不可能达到理想状态,因为我们既然是做的UART转SPI协议,就得让他可以支持其他SPI外设,也就是我们得需要片选命令。保证其可以根据片选命令来执行拉低哪个IO口。所以我们需要一个包保证其先选对从机设备。例如可以发送一个如下图的包在这里插入图片描述
这个包首先是一个不满20字节的包,然后包头为0x55,0xAA,包尾为0x0D,0x0A。数据位xx代表的是切换到哪个CS。
      接下来的话,就是当我结束SPI通信时,需要把CS拉高。我们也可以同样发送上面的包,把xx设置为0xFF就代表通信结束。或则发送的数据包不足20个字节也代表结束。这样的话,整个通讯流程就比较清晰了。
      OK,然后我这边总结下流程,演示一次跟SPI从机通信的流程。
      1、主控先通过蓝牙发送控制CS的命令,设置好UART转SPI芯片需要操作的CS的NUM号。
在这里插入图片描述
      2、UART转SPI芯片接收到这条命令后,解析出需要操作的CS号是0x01号。
      3、主控在再发送下面的命令。
在这里插入图片描述
      4、UART转SPI芯片接收到这条数据后,把之前设置好的CS引脚拉低,使能SPI从机,根据命令与SPI 从机进行通信,因为该包没有达到20字节,说明这个包包含了所有通信命令,即与SPI 从机通信后就可以把CS拉高。然后把返回的数据再通过蓝牙发送回去。
在这里插入图片描述
      5、主控再根据接收到的数据来执行别的动作了。单次的SPI通信就完成了,有其他操作只需要重复步骤就好了。这样就实现了UART转SPI的功能了。
烦请各位积极批斗,一个人的想法肯定是不完善的,有批斗才有进步。

发布了3 篇原创文章 · 获赞 7 · 访问量 4363

猜你喜欢

转载自blog.csdn.net/qq_28738985/article/details/104359924