0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用FPGA驱动SPI屏幕

FPGA研究院 来源:FPGA之旅 2023-08-23 09:17 次阅读

一. 简介

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

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

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

1. SPI模式

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

64dc1e58-4144-11ee-a2ef-92fbcf53809c.png

2. 初始化

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

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

64f3f6a4-4144-11ee-a2ef-92fbcf53809c.png

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

6509b610-4144-11ee-a2ef-92fbcf53809c.png

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

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

命令到数据,或者数据到命令,是不能连续,中间需要停顿数个时钟周期。

6522bb06-4144-11ee-a2ef-92fbcf53809c.png

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

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

3. 显示数据

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

654142a6-4144-11ee-a2ef-92fbcf53809c.png

三. FPGA实现

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

SPI主机模块: 用来和屏幕进行数据交互

屏幕初始化模块: 将初始化数据依次通过SPI主机模块发送给模块

屏幕刷新模块: 将显示数据依次通过SPI主机模块发送给模块

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

656517da-4144-11ee-a2ef-92fbcf53809c.png

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

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

1. 模块状态跳转

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

658be3ec-4144-11ee-a2ef-92fbcf53809c.png

65b67350-4144-11ee-a2ef-92fbcf53809c.png

2. 图像显示数据

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

65e40568-4144-11ee-a2ef-92fbcf53809c.png

3. 模块端口

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

65fa2168-4144-11ee-a2ef-92fbcf53809c.png

四. 模块封装

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

6613b0ba-4144-11ee-a2ef-92fbcf53809c.png

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

663c66b8-4144-11ee-a2ef-92fbcf53809c.png

五. 上板测试

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

66575856-4144-11ee-a2ef-92fbcf53809c.png

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

6674ee48-4144-11ee-a2ef-92fbcf53809c.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1603

    文章

    21326

    浏览量

    593242
  • 显示器
    +关注

    关注

    21

    文章

    4738

    浏览量

    137880
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1615

    浏览量

    89644
  • 驱动芯片
    +关注

    关注

    12

    文章

    1092

    浏览量

    53644

原文标题:FPGA驱动SPI屏幕

文章出处:【微信号:FPGA研究院,微信公众号:FPGA研究院】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何使用FPGA驱动OLED屏幕

    这是FPGA之旅设计的第九例啦!!!本例将介绍如何使用FPGA驱动OLED屏幕,并在接下来的几例中,配合其它模块,进行一些有趣的综合实验。由于使用的OLED屏是IIC接口的,对IIC接
    发表于 09-01 10:51 2818次阅读

    【正点原子新起点开发板免费试用连载】基于FPGA实现TFT屏幕驱动

    项目名称:基于FPGA实现TFT屏幕驱动试用计划:申请理由:本人在某家电公司负责TFT屏幕部分,最近开发了一个新方案使用ST单片机驱动TFT
    发表于 06-23 09:44

    FPGA实现的SPI协议

    写在前面SPI协议系列文章:FPGA实现的SPI协议(一)----SPI驱动 在上篇文章,简要介绍了SP
    发表于 02-17 06:03

    SPI驱动屏幕移植LVGL软件包具体流程

    一、spi驱动屏幕,我使用的屏幕为1.8寸spi屏幕 驱动
    发表于 07-08 15:09

    请教一个stm32的硬件SPI 驱动0.96寸oled屏幕的问题

    请教一下大家,本人在学习oled屏幕,发现网上多是IIC和软件SPI,遂想利用stm32的硬件spi驱动oled屏幕,此oled
    发表于 09-04 22:42

    SPI驱动TFTLCD屏幕相关资料推荐

    1、SPI驱动TFTLCD屏幕简析  本文实现了使用GD32FF427V-START板子的SPI1驱动TFTLCD,LCD是2.2寸的ILI
    发表于 12-21 15:19

    SPI方式FPGA配置和SPI flash编程

    SPI方式FPGA配置和SPI flash编程
    发表于 05-16 18:01 164次下载
    <b class='flag-5'>SPI</b>方式<b class='flag-5'>FPGA</b>配置和<b class='flag-5'>SPI</b> flash编程

    SPI接口的应用与基于FPGASPI自动发送模块设计

    一种基于FPGA 的将并行数据以SPI 串行方式自动发送出去的方法。 二、关键字: VHDL、FPGASPI、串行数据输出选择模块、移位脉冲产生模块、
    发表于 10-19 10:33 19次下载
    <b class='flag-5'>SPI</b>接口的应用与基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>SPI</b>自动发送模块设计

    基于FPGASPI协议及设计实现

    基于FPGASPI协议及设计实现博主微信:flm13724054952,不懂的有疑惑的也可以加微信咨询,欢迎大家前来投稿,谢谢!引言介绍在电子通信领域里采用的通信协议有IIC,SPI,UART
    发表于 11-05 19:05 22次下载
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>SPI</b>协议及设计实现

    STC8的硬件SPI驱动ST7735彩色TFT屏幕

    20200719STC8的屏幕驱动摸了,不会用markdown。放上代码完事代码是基于中景园的软件SPI屏幕驱动的,仅仅是改成了硬件
    发表于 12-22 19:17 34次下载
    STC8的硬件<b class='flag-5'>SPI</b><b class='flag-5'>驱动</b>ST7735彩色TFT<b class='flag-5'>屏幕</b>

    FPGA实现的SPI协议(二)----基于SPI接口的FLASH芯片M25P16的使用

    写在前面SPI协议系列文章:FPGA实现的SPI协议(一)----SPI驱动 在上篇文章,简要介绍了
    发表于 12-22 19:25 19次下载
    <b class='flag-5'>FPGA</b>实现的<b class='flag-5'>SPI</b>协议(二)----基于<b class='flag-5'>SPI</b>接口的FLASH芯片M25P16的使用

    STM32L4 模拟SPI 驱动LCD 240*240屏幕

    第一次写博客,写的可能很乱,各位看客可能费点精神。因为不能保证打样的板子没那么快到手上,所以在开发板上先进行了模拟SPI驱动屏幕。在开发板上开发主要器件:TFTLCD屏幕240*240
    发表于 12-22 19:29 22次下载
    STM32L4  模拟<b class='flag-5'>SPI</b> <b class='flag-5'>驱动</b>LCD 240*240<b class='flag-5'>屏幕</b>

    FPGA实现SPI

    FPGA实现SPI协议
    发表于 03-20 10:35 0次下载

    FPGA中关于SPI的使用

    FPGA中关于SPI的使用
    的头像 发表于 04-12 10:13 597次阅读

    R128实现SPI驱动TFT LCD屏教程

    同时,提供了SPILCD驱动框架以供 SPI 屏幕使用,本次使用的是 Dshan_Display Module。
    的头像 发表于 10-21 16:31 666次阅读
    R128实现<b class='flag-5'>SPI</b><b class='flag-5'>驱动</b>TFT LCD屏教程