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

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

3天内不再提示

【紫光同创国产FPGA教程】【第十四章】SD卡读取BMP图片显示例程

FPGA技术专栏 来源:芯驿电子科技 作者:芯驿电子科技 2021-02-20 13:44 次阅读

原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处(alinx.com)。

1. 实验简介

在前面的实验中我们练习了SD卡读写,HDMI视频显示等例程,本实验将SD卡里的BMP图片读出,写入到外部存储器,再通过HDMI、LCD等显示。

本实验如果通过液晶屏显示,需要有液晶屏模块。

2. 实验原理

在前面的实验中我们在HDMI、LCD上显示的是彩条,是FPGA内部产生的数据,本实验将彩条替换为SD内的BMP图片数据,但是SD卡读取速度远远不能满足显示速度的要求,只能先写入外部高速RAM,再读出后给视频时序模块显示。

BMP图片格式

本实验直接在SD卡中搜索BMP文件,假设每个文件都是从SD的某个扇区第一个字节开始,根据BMP文件头的特征找到BMP。

BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选1bit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。

对于程序设计来说最重要的是找到BMP文件头,BMP图像文件头格式如下:

1)1-2:(这里的数字代表的是字节,下同)图像文件头。0x4d42=’BM’,表示是Windows支持的BMP格式。(注意:查ascii表B 0x42,M 0x4d,bfType 为两个字节,B为low字节,M为high字节所以bfType=0x4D42,而不是0x424D,请注意)

2)3-6:整个文件大小。4690 0000,为00009046h=36934。

3)7-8:保留,必须设置为0。

4)9-10:保留,必须设置为0。

5)11-14:从文件开始到位图数据之间的偏移量(14+40+4*(2^biBitCount))(在有颜色板的情况下)。4600 0000,为00000046h=70,上面的文件头就是35字=70字节。

位图信息

6)15-18:位图图信息头长度。

7) 19-22:位图宽度,以像素为单位。8000 0000,为00000080h=128。

8)23-26:位图高度,以像素为单位。9000 0000,为00000090h=144。

9)27-28:位图的位面数,该值总是1。0100,为0001h=1。

10)29-30:每个像素的位数。有1(单色),4(16色),8(256色),16(64K色,高彩色),24(16M色,真彩色),32(4096M色,增强型真彩色)。1000为0010h=16。

11)31-34:压缩说明:有0(不压缩),1(RLE 8,8位RLE压缩),2(RLE 4,4位RLE压缩,3(Bitfields,位域存放)。

12)35-38:用字节数表示的位图数据的大小,该数必须是4的倍数,数值上等于:一行所占的字节数×位图高度。0090 0000为00009000h=80×90×2h=36864。假设位图是24位,宽为41,高为30,则数值= (biWidth*biBitCount+31)/32*4*biHeight,即=(41*24+31)/32*4*30=3720

13)39-42:用象素/米表示的水平分辨率。A00F 0000为0000 0FA0h=4000。

14)43-46:用象素/米表示的垂直分辨率。A00F 0000为0000 0FA0h=4000。

15)47-50:位图使用的颜色索引数。设为0的话,则说明使用所有调色板项。

16)51-54:对图象显示有重要影响的颜色索引的数目。如果是0,表示都重要。

本实验使用不压缩,24(16M色,真彩色)的BMP图片,文件头大小是54个字节,前两个字节为“BM”,紧接着4个字节是文件大小,19-22字节为图片宽度,这些信息是程序设计中要使用的重要信息。

3. 程序设计

由于SD卡读写实验,HDMI、LCD显示实验种我们已经练习过SD卡和视频相关知识,这里不再讲解。

本实验的重点模块是BMP图片读取模块bmp_read,bmp_read模块完成SD卡中读取一个扇区的数据,然后和BMP的文件头对比,如果前2个字节等于“BM”,然后再找到19-22字节,对比图片的宽度和输入要求的宽度是否一致,如果一致就认为找到一张BMP图片,读取出来,去掉前面54字节的文件头,写入外部存储器。

bmp_read状态机如下所示,有搜索命令以后,进入搜索状态“S_FIND”,开始不断地读取SD卡,找到符合要求的BMP图片,找到以后进入“S_READ_WAIT”,判断FIFO空间大小,如果FIFO空间足够大,进入“S_READ”状态。

o4YBAGAvUDSAE2fLAAAeEKe9XhQ225.jpg

bmp_read模块状态机

信号名称 方向 说明
clk in 时钟输入
rst in 异步复位输入,高复位
ready out 空闲状态指示
find in 搜索播放请求
sd_init_done in sd卡初始化完成
state_code out 状态码0,表示sd还在初始化1,sd卡初始化完成,等待按键按下2,正在搜索BMP文件3,找到BMP文件,正在读取
bmp_width in 搜索BMP图片的宽度
write_req out 写外部存储器请求
write_req_ack in 写外部存储器请求应答
sd_sec_read out sd卡读请求
sd_sec_read_addr out sd卡读请求扇区地址
sd_sec_read_data in sd卡读到的数据
sd_sec_read_data_valid in sd卡读数据有效
sd_sec_read_end in sd卡读请求完成
bmp_data_wr_en out bmp文件写使能
bmp_data out bmp文件的音频数据

bmp_read模块端口

video_timing_data模块完成视频时序到FIFO读取的信号的转换,主要原理就是把视频时序中的“DE”做为FIFO的读信号,但是读出的数据会有延时,所以做了相应的对齐处理。

4. 实验现象

1)格式化sd卡(fat32格式),sd卡必须是2.0以上的版本(容量大于4G

pIYBAGAvUDSAEzAVAABd35d-dXU597.jpg

2)把BMP格式文件放到sd卡中,需要注意,BMP图片数据存储是倒序,所以先用图片处理工具上下颠倒一下。根据显示输出不同的分辨率,放置不同分辨率的图片,HDMI输出采用1024x768分辨率,7寸液晶屏模块AN070分辨率是800x480,4.3寸液晶屏模块AN430分辨率是480x272。

o4YBAGAvUDSAfEH0AACTxYUWpJc037.jpg

3)将准备好的sd卡注入开发板的sd卡槽(sd卡不能带电插拔),上电,下载实验程序,等待LED1变亮时,按下KEY2,这个时候LED2会变亮,表示正在搜索BMP文件,如果找到BMP图片LED1、LED2会显示会同时亮,这时候显示器(或者液晶屏模块,根据实验工程选择,连接方法在《HDMI测试实验教程》中已讲述)就会显示相应的图片。如果sd卡内有多张BMP,可以再次按按键KEY2,会显示下一张图片。


开发板

显示效果

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

    关注

    1600

    文章

    21281

    浏览量

    592868
  • HDMI
    +关注

    关注

    32

    文章

    1485

    浏览量

    149659
  • SD卡
    +关注

    关注

    2

    文章

    529

    浏览量

    63000
  • BMP
    BMP
    +关注

    关注

    0

    文章

    48

    浏览量

    16963
  • 紫光同创
    +关注

    关注

    4

    文章

    68

    浏览量

    27242
收藏 人收藏

    评论

    相关推荐

    2024新品|紫光同创盘古系列FPGA开发板套件,100%国产化方案

    专业厂商紫光同创生态合作伙伴,小眼睛科技一直深耕FPGA产品和解决方案,基于紫光同创器件,推出100%
    发表于 12-28 14:18

    国产FPGA介绍-紫光同创

    紫光同创紫光集团旗下紫光国微的子公司,成立于2013年,有十余年可编程逻辑器件研发经历,布局覆盖高中低端FPGA产品。 早在2015年,
    发表于 01-24 10:45

    紫光同创FPGA有哪些型号

    请问紫光同创FPGA有哪些型号?分别用于什么场景?
    发表于 01-24 10:48

    至芯科技之altera 系列FPGA教程 第十四篇 分配管脚

    至芯科技之altera 系列FPGA教程 第十四篇 分配管脚
    发表于 08-11 03:33

    【小梅哥FPGA进阶教程】第十四章 TFT屏显示图片

    十四、TFT屏显示图片本文由杭电网友曾凯峰贡献,特此感谢学习了小梅哥的TFT显示屏驱动设计后,想着在此基础上通过TFT屏显示一张
    发表于 02-26 16:44

    FPGA实现对SD图片读取

    怎么用fpga实现对sd中的图片进行读取,送到SDRAM中。求大神指教
    发表于 04-11 10:39

    紫光同创简介

    本帖最后由 DamonXZ 于 2018-5-26 23:56 编辑 紫光同创紫光集团旗下公司,注册资金1.5亿元,总投资5亿元,是是国家高新技术企业,已通过ISO9001-2015
    发表于 05-26 10:58

    请教下,读取sd,u盘里面的bmp图片解码显示

    本帖最后由 hpdell 于 2016-1-12 15:12 编辑 请教下,读取sd、u盘里面的bmp图片解码
    发表于 10-24 08:10

    请问如何显示一张BMP图片

    原子大哥,请问怎么显示一张BMP图片,你的那个STMf103RBT6的开发板的例程中,ILI93XX.c中好像没有这个函数,而那个图片
    发表于 02-19 22:10

    软件定义无线电手册,第十四

    软件定义无线电手册,第十四版。pentek公司出的资料。
    发表于 02-18 09:52

    请问使用iconview控件时可以直接从sd读取bmp格式的图片进行显示吗 ?

    请教下,使用 iconview 控件时,能否直接从sd读取bmp格式的图片进行显示啊 ?我看
    发表于 04-07 04:36

    【正点原子FPGA连载】第十九章SDBMP图片LCD显示实验-领航者ZYNQ之嵌入式开发教程

    原子公众号,获取最新资料第十九章SDBMP图片LCD显示实验在“
    发表于 09-05 15:39

    【正点原子FPGA连载】第二十章SDBMP图片HDMI显示实验-领航者ZYNQ之嵌入式开发教程

    。20.2实验任务本章的实验任务是使用领航者ZYNQ开发板读取SD中存放的BMP格式图片,分辨率为1920*1080,并将其
    发表于 09-05 15:40

    紫光同创FPGA开发套件,高性能国产FPGA方案

    紫光同创FPGA开发套件,高性能国产FPGA方案,100%国产化,全系列产品,方案可定制,满足多
    发表于 11-16 17:25

    第十四讲 555定时器

    第十四讲 555定时器 5.5.1 555定时器的电路结构及其功能 一、结构框图(图5.5.1 双极型)1.
    发表于 03-30 16:20 3624次阅读
    <b class='flag-5'>第十四</b>讲 555定时器