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

这篇具有很好参考价值的文章主要介绍了FPGA驱动SPI屏幕(附完整工程)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 简介

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

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

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

1. SPI模式

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

FPGA驱动SPI屏幕(附完整工程),FPGA,fpga开发,spi,屏幕驱动

2. 初始化

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

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

FPGA驱动SPI屏幕(附完整工程),FPGA,fpga开发,spi,屏幕驱动

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

FPGA驱动SPI屏幕(附完整工程),FPGA,fpga开发,spi,屏幕驱动

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

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

FPGA驱动SPI屏幕(附完整工程),FPGA,fpga开发,spi,屏幕驱动

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

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

3. 显示数据

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

FPGA驱动SPI屏幕(附完整工程),FPGA,fpga开发,spi,屏幕驱动

三. FPGA实现

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

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

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

FPGA驱动SPI屏幕(附完整工程),FPGA,fpga开发,spi,屏幕驱动

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


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

1. 模块状态跳转

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

FPGA驱动SPI屏幕(附完整工程),FPGA,fpga开发,spi,屏幕驱动

FPGA驱动SPI屏幕(附完整工程),FPGA,fpga开发,spi,屏幕驱动

2. 图像显示数据

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

FPGA驱动SPI屏幕(附完整工程),FPGA,fpga开发,spi,屏幕驱动

3. 模块端口

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

FPGA驱动SPI屏幕(附完整工程),FPGA,fpga开发,spi,屏幕驱动

四. 模块封装

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

FPGA驱动SPI屏幕(附完整工程),FPGA,fpga开发,spi,屏幕驱动

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

FPGA驱动SPI屏幕(附完整工程),FPGA,fpga开发,spi,屏幕驱动

五. 上板测试

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

FPGA驱动SPI屏幕(附完整工程),FPGA,fpga开发,spi,屏幕驱动

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

FPGA驱动SPI屏幕(附完整工程),FPGA,fpga开发,spi,屏幕驱动

关注 FPGA之旅 回复 FPGA驱动SPI屏幕 即可获取完整工程文件文章来源地址https://www.toymoban.com/news/detail-586039.html

到了这里,关于FPGA驱动SPI屏幕(附完整工程)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA驱动RGB888屏幕——基于正点原子达芬奇FPGA开发板

    RGB888简介 一个像素点由三种颜色控制,每个颜色8bit,共24bit,三个字节,这就是RGB888。同样的还有RGB565等。 LCD屏幕介绍 1、HSYNC(水平同步信号、行同步信号):产生此信号,说明开始显示新的一行。 2、VSYNC(垂直同步信号、帧同步信号):当产生此信号的话就表示开始显示

    2024年02月04日
    浏览(48)
  • stm32 hal库硬件spi(软件spi)驱动1.8寸tft—lcd屏幕

    屏幕是嵌入式开发中的一个重要的部分,cdsn上有许多解释原理的,还有很多是采用正点原子的屏幕来驱动的,对于刚刚入门不久的我们可能没有资金去购买较为昂贵的屏幕。而对于底层原理我们暂时也不必了解的那么深入,能点亮屏幕就是我们最大的快乐。 除了中景园的资

    2024年02月03日
    浏览(53)
  • FPGA实现SPI接口(1)--什么是SPI接口?

    目录 1、什么是SPI协议 2、SPI协议详述 2.1、SPI协议物理层 2.2、SPI 协议层 2.3、SPI协议通信过程 2.4、SPI协议的特性 2.5、SPI协议的优势、劣势 3、驱动代码的设计实现 3.1、接口定义与整体设计 3.2、Verilog代码 4、Testbench及仿真结果 4.1、单个BYTE的仿真 4.2、多个BYTE的仿真 5、其他  

    2024年02月09日
    浏览(45)
  • FPGA:三大协议(UART、IIC、SPI)之SPI

    摘要:1、本文介绍SPI物理层面连接(通过哪几条线通信),2、本文介绍SPI时序(通过哪种方式进行器件之间交流)。3、提供主机和从机verilog代码。4、仅供自己参考 一、SPI物理层连接 (1)有四根线连接:CS_N(片选信号--主机发出)、miso(从机发出,主机接收)、mosi(主机发

    2024年02月14日
    浏览(49)
  • 【FPGA】SPI协议

    SPI(Serial Perripheral Interface, 串行外围设备接口)是 Motorola 公司推出的一种同步串行接口技术。SPI 总线在物理上是通过接在外围设备微控制器(PICmicro) 上面的微处理控制单元 (MCU) 上叫作同步串行端口(Synchronous Serial Port) 的模块(Module)来实现的, 它允许 MCU 以全双工的同步串行方式

    2024年02月09日
    浏览(39)
  • FPGA——spi代码篇

            为了避免每次SPI驱动重写,直接参数化,尽量一劳永逸。SPI master有啥用呢,你发现各种外围芯片的配置一般都是通过SPI配置的,只不过有三线和四线。SPI slave有什么用呢,当外部主机(cpu)要读取FPGA内部寄存器值,那就很有用了,FPGA寄存器就相当于RAM,cpu通过

    2024年03月14日
    浏览(46)
  • 【FPGA】SPI读写flash

    SPI是同步全双工通信,通信原理以主从方式工作,通常有一个主设备和一个或多个从设备,需要4根线连接:MISO(主设备数据输入)、MOSI(主设备输出)、SCLK(时钟)、CS(片选)。通常拉低对应从机的片选来收发数据。 MISO:主设备输入,从设备输出 MOSI:主设备输出,从设备输入 SCLK:时

    2024年02月05日
    浏览(44)
  • 【LabVIEW FPGA入门】LabVIEW FPGA 实现SPI通信协议

            该实现由两个组件组成:在 LabVIEW FPGA 中实现的 SPI 协议以及用于从主机 PC 或实时控制器与 FPGA 进行通信的 LabVIEW 主机接口。该架构允许从单个主机程序控制多个 SPI 端口,同时仍然允许定制 FPGA VI 以进行其他数据采集和处理。该实现不使用任何DMA(直接内存访问

    2024年01月17日
    浏览(58)
  • FPGA使用SPI控制FLASH

    通过控制FLASH芯片进一步熟悉SPI协议 Flash 存储器 : Flash 存储器是一种非易失性存储器,它具有 RAM 和 ROM 的一些特点。与 ROM 类似,Flash 存储器的内容在断电时不会丢失,但与 RAM 类似,它可以通过编程来修改存储的内容。Flash 存储器通常用于嵌入式系统中存储程序代码、配置

    2024年03月19日
    浏览(55)
  • 【FPGA】SPI读写FLASH闪存

    通信原理 SPI也是以主从方式工作,通常需要四根线来完成数据的传输,分别是MISO MOSI CS SCLK。以下是这四根线代表的含义: MISO:主设备输入,从设备输出 MOSI:主设备输出,从设备输入 CS :片选信号,选择进行通信的从设备 SCLK:时钟线,由主设备产生给到从设备 SPI通信的

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包