串口转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的功能了。
烦请各位积极批斗,一个人的想法肯定是不完善的,有批斗才有进步。

串口转SPI驱动协议的制定相关推荐

  1. 串口RS232 RS485最本质的区别!-!I2C通讯协议 最简单的总线通讯!-深入理解SPi通讯协议!

    5分钟看懂!串口RS232 RS485最本质的区别!-4分钟看懂!I2C通讯协议 最简单的总线通讯!-深入理解SPi通讯协议,5分钟看懂! 一.5分钟看懂!串口RS232 RS485最本质的区别! 二 ...

  2. (62)SPI外设驱动协议(一)(第13天)

    (62)SPI外设驱动协议(一)(第13天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)SPI外设驱动协议(一)(第13天) 5)技术交流 6)参考资料 2 ...

  3. FPGA实现的SPI协议(一)----SPI驱动

    写在前面 SPI协议系列文章: FPGA实现的SPI协议(一)----SPI驱动 FPGA实现的SPI协议(二)----基于SPI接口的FLASH芯片M25P16的使用 1.什么是SPI协议 SPI( ...

  4. STM32CubeMX | 基于STM32使用HAL库硬件SPI驱动WK2124一拖四SPI转四路串口芯片

    STM32CubeMX | 基于STM32使用HAL库硬件SPI驱动WK2124一拖四SPI转四路串口芯片 STM32基础工程生成 首先使用STM32CUBEMX生成STM32的基础工程,配置时钟到7 ...

  5. 关于I2C和SPI总线协议

    IICvs SPI 现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身影 ...

  6. 基础篇010.2 STM32驱动RC522 RFID模块之二:STM32硬件SPI驱动RC522

    目录 1. 实验硬件及原理图 1.1 RFID硬件 1.2 硬件原理图 2. 单片机与RFID硬件模块分析 3. 利用STM32CubeMX创建MDK工程 3.1 STM32CubeMX工程创建 3. ...

  7. [转]关于I2C和SPI总线协议的优缺点

    关于I2C和SPI总线协议 IICvs SPI 现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral ...

  8. 乐鑫esp8266学习rtos3.0笔记第7篇:我又来了,基于rtos3.0版本 SDK编程 SPI 驱动 ws2812b 七彩灯,代码全部开源奉献给你们!

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  9. 【先楫HPM6750系列】RT-Thread SPI驱动和WiFi联网

    本文将会介绍--如何使用RT-Thread Studio创建基于HPM6750EVKMINI开发板的RT-Thread项目,并逐步添加WiFi联网能力.iperf网络带宽测试命令.以及简单的基于soc ...

最新文章

  1. 推送通知_手机总是收到烦人的推送,教你几招,彻底摆脱无用通知
  2. python官网下载步骤2019-Python IDE开发工具下载
  3. 循环队列-队列的顺序表示和实现
  4. Centos7 yum安装Python3.6环境,超简单
  5. COJ 1081 集训队分组
  6. 为什么搜索与推荐场景用AUC评价模型好坏?
  7. 2015《大数据》读者意见征集活动——幸运读者名单
  8. 微课|玩转Python轻松过二级(2.2.4节):位运算符与集合运算符
  9. request.setAttribute()与request.getAttribute()取值问题
  10. java 定义全局变量_都说变量有七八种,到底谁是 Java 的亲儿子
  11. [高光谱] GitHub开源项目Hyperspectral-Classification的解析
  12. 【LeetCode】【字符串】题号:*451. 根据字符出现频率排序
  13. JavaScript基础功能代码实现
  14. 如何写一份前端开发简历
  15. voldemort分布式数据库Rebalance的代码总结
  16. C#从IE浏览器获取Cookie
  17. 下水道井盖为什么是圆的?
  18. 2021年中国私募基金市场日益壮大,私募基金管理规模达到19.78万亿元[图]
  19. Rebound-Android的弹簧动画库
  20. 图片如何添加水印?这些小技巧掌握以下

热门文章

  1. 鸿蒙系统游戏和安卓系统通用吗,华为鸿蒙系统玩王者荣耀和安卓是互通的吗
  2. “植物的生殖”知识总结
  3. 输入装置什么最少用于办公室计算机,办公室最常用的装置有哪些?
  4. Python爬取谷歌街景图片
  5. echarts 不规则柱状图设置
  6. 计算机毕业设计SSM车站商铺信息管理系统【附源码数据库】
  7. 男生脸型测试比较好的软件,怎样测自己的脸型,男生脸型分类图
  8. android手机拍照,安卓手机拍照前五名?华为有两款上榜!喜欢拍照的机友看进来!...
  9. 脚本搜索网站,配合chrome和Tampermonkey使用
  10. CVPR21最佳检测:不再是方方正正的目标检测输出(附源码)