FPGA驱动SPI屏幕(附完整工程)

news2024/11/25 2:22:46

一. 简介

相信大家都玩过屏幕,在FPGA上使用最多的就是VGA/HDMI接口的显示器了,这两种显示器的优点就不用说了,缺点就是体积比较大,而且价格比较贵,对于追求便携/价格低的我来说,SPI接口的屏幕才是我的首要选择,而且一般是可以带触摸的哦。

后面图像处理相关的代码都会基于此屏幕哦!

二. SPI屏幕驱动(驱动芯片ST7789V)

1. SPI模式

SPI时序就不介绍了,很最重且必须要掌握的协议。要想驱动屏幕,最关系的肯定是使用那种模式来驱动了,答案就在这里,数据在SCL时钟的上升沿被采样,数据在SCL时钟的下降沿切换(空闲的时候对SCL的电平不作要求),对应的模式为0和3

请添加图片描述

2. 初始化

摸清楚SPI的模式之后,就可以开始初始化屏幕了,最简单高效的方法当然是参考C语言的现实。

可以看出,初始化的过程就是依次发送命令和数据即可。那么如何辨别命令和数据呢?

请添加图片描述

通过下图可以清楚的知道,是通过DC信号线的电平来区别的(低电平表示当前发送的数据为命令)。

请添加图片描述

弄懂了上述问题之后,就可以按照C语言实现依葫芦画瓢,依次将命令和数据发送出去即可。另外有两点需要注意的是:

  1. 两条命令不能连续发送,中间需要停顿数个时钟周期;而数据则不需要。
  2. 命令到数据,或者数据到命令,是不能连续,中间需要停顿数个时钟周期。

请添加图片描述

另外这三个命令需要注意一下0x36,0x2A,0x2B,它们分别是设置显示的方向(还有就是数据是RGB还是BGR)、列地址和行地址。0x36设计到的东西比较多,需要详细了解的可以自行去翻阅数据手册。

经过上面的初始化,如果成功了,屏幕上显示出杂乱无章的图案。

3. 显示数据

C语言的实现如下,设置要显示X,Y的范围,也就是矩形的左上角和右下角的值,然后发送要显示的数据即可。非常简单。

请添加图片描述

三. FPGA实现

有了C语言作为参考,FPGA端的实现那还不是小菜一碟,总共只需要分为如下的三个模块:

  1. SPI主机模块: 用来和屏幕进行数据交互
  2. 屏幕初始化模块: 将初始化数据依次通过SPI主机模块发送给模块
  3. 屏幕刷新模块: 将显示数据依次通过SPI主机模块发送给模块

模块框图如下,有点小哈(⭐)

请添加图片描述

SPI主机模块和初始化模块非常简单,就不作说明啦!重点来说说刷新模块。


刷新模块不会像单片机中那样,调用的时候才会进行刷新,而且在初始化完成之后,就一直在对整个屏幕进行刷新了,

1. 模块状态跳转

模块由如下四个在状态组成,在发送前11个数据的时候,需要进入打啊奥延时状态,原因是这11个数据中既有命令也有数据(此数据,懂?), 后面则一直在DATA态,它只包括显示数据,所以不需要延时。最后一个显示数据发送完成后,就进入帧同步状态,表示一帧数据发送完成。

请添加图片描述

请添加图片描述

2. 图像显示数据

很easy!发送完前面的命令和数据后,剩下的全部都是显示数据了,都丢在default里面就可以了。这里暂时写死了(后面会将显示的数据修改为模块输入的数据)。

请添加图片描述

3. 模块端口

端口信号如下,着重关注用户接口的三个信号即可,非常easy!

请添加图片描述

四. 模块封装

spi模块top模块的接口如下,很明显不够完美,无法知道当前显示的像素坐标,而且图像数据一般为16bit的,而这个模块的输入为8bit的数据,另外在替换VGA接口的屏幕时候,也不能简单高效的替换下来,所以需要经过一次封装,将其与外部进行交互的端口信号封装为VGA接口的信号(近似)。

请添加图片描述

封装后的模块端口信号如下,其内部实现类似于VGA驱动。

请添加图片描述

五. 上板测试

测试代码如下,显示四个方块,是不是感觉so easy!。

请添加图片描述

测试图片如下,显示效果完美!!!!

请添加图片描述

关注 FPGA之旅 回复 FPGA驱动SPI屏幕 即可获取完整工程文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/771918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实战操作接口自动化测试

最近接到一个接口自动化测试的case,并展开了一些调研工作,最后发现,使用pytest测试框架并以数据驱动的方式执行测试用例,可以很好的实现自动化测试。这种方式最大的优点在于后续进行用例维护的时候对已有的测试脚本影响很小。当然…

文件IO_文件截断_ftruncate,truncate(附Linux-5.15.10内核源码分析)

目录 1.为什么需要文件截断? 2.truncate函数介绍 2.1 truncate函数 2.2 truncate函数内核源码分析 2.3 truncate函数使用示例 3.ftruncate函数介绍 3.1 ftruncate函数 3.2 ftruncate函数内核源码分析 3.3 ftruncate函数使用示例 3.4 ftruncate和文件偏移量…

8年测试总结,App自动化测试-Appium常遇问题+解决(详细整理)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 问题1&#xff1a…

小白入门C#编写MVC登录小案例

一、C#编写MVC登录小案例 🚀1. 新建MVC项目。 🚀2. 在Models文件夹下创建一个User类,包含登录所需要的用户名和密码属性。 namespace MvcLogin.Models {public class User{public string UserName{get; set;}public string Password{get;se…

基于Java+SpringBoot+Vue+Uniapp前后端分离考试学习一体机设计与实现(视频讲解,已发布上线)

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

计算机基础专升本笔记三 计算机中的数据表示、编码

计算机基础专升本笔记三计算机中的数据表示、编码 一、计算机中的数据的单位 (一)数据存储的单位有哪些? 计算机存储单位有 bit, Byte, KB, MB, GB, TB, PB, EB, ZB, BB来表示。我们经常将Byte简称为B,将KB简称K。 &#xff08…

微信怎么自动加好友,通过好友后自动打招呼

很多客户朋友每天花大量的时间用手机搜索添加好友,这样的添加很集中也容易频繁,而且效率还低。对方通过后,有时也不能及时和客户搭建链接,导致客户也流失了。 现在可以实现自动添加和自动打招呼哦,只需要导入数据、设置…

linux查看ipynb文件

linux查看ipynb文件 使用jupyter查看 使用jupyter查看 安装 pip install jupyter添加配置好的环境到jupyter notebook的kernel中: python -m ipykernel install --user --name mmdet --display-name "mmdet"运行jupyter notebook (在ipynb…

精选了6款好用的AI绘画工具,值得一试

近几年来,伴随着AI技术的发展,设计领域发生了巨大的变化。AI绘图工具的出现很大程度上减轻了设计师的工作负担,本文精选了6款优秀的AI绘图工具为大家推荐,一起来看看吧! 1、即时灵感 即时灵感作为国产的AI绘图工具&a…

相机标定学习笔记

Kalibr 是标定工具中,唯一一个可以标定camToImu的,是vio必不可少的工具,其他的都有替代品。所以学习多种开源算法进行相机标定,并记录学习相机标定的过程。 一、相机标定 1、在场景中放置一个已知的物体 (1&#xff…

ENSP实验四:搭建VPN(GRE,配置安全策略)

首先分析一下数据的流向: PC1->PC2 1、FW1:trust->dmz 【192.168.1.1->192.168.2.1 ICMP】 2、AR1->AR2:【202.1.1.1->202.1.3.1|GRE|192.168.1.1->192.168.2.1 icmp】 3、FW2: ①untrust->local …

提示工程师:如何写好Prompt

提示工程由来 提示工程是一门相对较新的学科,用于开发和优化提示以有效地将语言模型 (LM) 用于各种应用程序和研究主题。 研究人员使用提示工程来提高 LLM 在广泛的常见和复杂任务(例如问题回答和算术推理)上的能力。 开发人员使用提示工程…

【图像处理OpenCV(C++版)】——5.6 图像平滑之联合双边滤波

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快…

用Vue如何实现低代码开发平台?

前言 在众多开发技术中,Vue组件化开发技术以其卓越的灵活性和高效性备受瞩目。 低代码平台相信不少人知道它的存在,而且现在大部分公司都在开发自己的低代码平台,首先我们来看看低代码平台可视化界面: 官网:https://ww…

UTM 4.3 发布:在 macOS 上优雅的使用 QEMU 虚拟化 Windows、Linux 和 macOS

UTM 4.3 发布:在 macOS 上优雅的使用 QEMU 虚拟化 Windows、Linux 和 macOS 在 iOS 中虚拟化 Windows、Linux 和 Unix 请访问原文链接:https://sysin.org/blog/utm-4/,查看最新版。原创作品,转载请保留出处。 作者主页&#xf…

Sql构建

Sql构建 SQL 构建对象介绍 之前通过注解开发时,相关 SQL 语句都是直接拼写的,一些关键字写起来比较麻烦、而且容易出错 MyBatis 提供了 org.apache.ibatis.jdbc.SQL 功能类,专门用于构建 SQL 语句 sql拼接测试: public class …

从制造到智造,安捷利的云数蝶变

伴随着新一轮科技革命和产业变革的兴起,制造业的数字化转型步入深水区,尤其是在5G、工业互联网、大数据等为代表的新技术推动下,制造业全方位、全链条的升级已是大势所趋。 南沙地处中国的南大门,既是国家面向世界的重要战略平台…

安达发|高级计划与智能排程APS软件的发展史进程

从泰勒的科学管理理论出发,率先追求科学的管理理论和管理工具,在计算机成为企业日常管理的基本工具之后,信息系统已经成为提高工厂管理水平的重要支柱。 在工厂计划领域,开始了从MRP到MRPII再到ERP的演变过程。MRPII指的是制造…

Appium+python自动化(十三)- 输入中文 - 一次填坑记(超详解)

简介 无论你在哪里,在做什么都会遇到很多坑,这些坑有些事别人挖的,有些是自己挖的。别人挖的叫坑人,自己挖的叫自杀,儿子挖的叫坑爹。因此在做app自动化道路上也不会是一帆风顺的,你会踩很多坑,…

异步fifo(1)

什么时异步fifo FIFO,即First In First Out ,是一种先进先出的数据缓存器,异步FIFO 是指读写时钟不一致,读写时钟是互相独立的。数据从一个时钟域写入FIFO缓冲区,并从另一个时钟域的同一FIFO缓冲区中读取数据&#xf…