0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【紫光同創(chuàng)國(guó)產(chǎn)FPGA教程】【第十四章】SD卡讀取BMP圖片顯示例程

FPGA技術(shù)專欄 ? 來(lái)源:芯驛電子科技 ? 作者:芯驛電子科技 ? 2021-02-20 13:44 ? 次閱讀

原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處(alinx.com)。

1. 實(shí)驗(yàn)簡(jiǎn)介

在前面的實(shí)驗(yàn)中我們練習(xí)了SD卡讀寫,HDMI視頻顯示等例程,本實(shí)驗(yàn)將SD卡里的BMP圖片讀出,寫入到外部存儲(chǔ)器,再通過(guò)HDMI、LCD等顯示。

本實(shí)驗(yàn)如果通過(guò)液晶屏顯示,需要有液晶屏模塊。

2. 實(shí)驗(yàn)原理

在前面的實(shí)驗(yàn)中我們?cè)贖DMI、LCD上顯示的是彩條,是FPGA內(nèi)部產(chǎn)生的數(shù)據(jù),本實(shí)驗(yàn)將彩條替換為SD內(nèi)的BMP圖片數(shù)據(jù),但是SD卡讀取速度遠(yuǎn)遠(yuǎn)不能滿足顯示速度的要求,只能先寫入外部高速RAM,再讀出后給視頻時(shí)序模塊顯示。

BMP圖片格式

本實(shí)驗(yàn)直接在SD卡中搜索BMP文件,假設(shè)每個(gè)文件都是從SD的某個(gè)扇區(qū)第一個(gè)字節(jié)開始,根據(jù)BMP文件頭的特征找到BMP。

BMP(全稱Bitmap)是Windows操作系統(tǒng)中的標(biāo)準(zhǔn)圖像文件格式,可以分成兩類:設(shè)備相關(guān)位圖(DDB)和設(shè)備無(wú)關(guān)位圖(DIB),使用非常廣。它采用位映射存儲(chǔ)格式,除了圖像深度可選以外,不采用其他任何壓縮,因此,BMP文件所占用的空間很大。BMP文件的圖像深度可選1bit、4bit、8bit及24bit。BMP文件存儲(chǔ)數(shù)據(jù)時(shí),圖像的掃描方式是按從左到右、從下到上的順序。由于BMP文件格式是Windows環(huán)境中交換與圖有關(guān)的數(shù)據(jù)的一種標(biāo)準(zhǔn),因此在Windows環(huán)境中運(yùn)行的圖形圖像軟件都支持BMP圖像格式。

對(duì)于程序設(shè)計(jì)來(lái)說(shuō)最重要的是找到BMP文件頭,BMP圖像文件頭格式如下:

1)1-2:(這里的數(shù)字代表的是字節(jié),下同)圖像文件頭。0x4d42=’BM’,表示是Windows支持的BMP格式。(注意:查ascii表B 0x42,M 0x4d,bfType 為兩個(gè)字節(jié),B為low字節(jié),M為high字節(jié)所以bfType=0x4D42,而不是0x424D,請(qǐng)注意)

2)3-6:整個(gè)文件大小。4690 0000,為00009046h=36934。

3)7-8:保留,必須設(shè)置為0。

4)9-10:保留,必須設(shè)置為0。

5)11-14:從文件開始到位圖數(shù)據(jù)之間的偏移量(14+40+4*(2^biBitCount))(在有顏色板的情況下)。4600 0000,為00000046h=70,上面的文件頭就是35字=70字節(jié)。

位圖信息

6)15-18:位圖圖信息頭長(zhǎng)度。

7) 19-22:位圖寬度,以像素為單位。8000 0000,為00000080h=128。

8)23-26:位圖高度,以像素為單位。9000 0000,為00000090h=144。

9)27-28:位圖的位面數(shù),該值總是1。0100,為0001h=1。

10)29-30:每個(gè)像素的位數(shù)。有1(單色),4(16色),8(256色),16(64K色,高彩色),24(16M色,真彩色),32(4096M色,增強(qiáng)型真彩色)。1000為0010h=16。

11)31-34:壓縮說(shuō)明:有0(不壓縮),1(RLE 8,8位RLE壓縮),2(RLE 4,4位RLE壓縮,3(Bitfields,位域存放)。

12)35-38:用字節(jié)數(shù)表示的位圖數(shù)據(jù)的大小,該數(shù)必須是4的倍數(shù),數(shù)值上等于:一行所占的字節(jié)數(shù)×位圖高度。0090 0000為00009000h=80×90×2h=36864。假設(shè)位圖是24位,寬為41,高為30,則數(shù)值= (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:位圖使用的顏色索引數(shù)。設(shè)為0的話,則說(shuō)明使用所有調(diào)色板項(xiàng)。

16)51-54:對(duì)圖象顯示有重要影響的顏色索引的數(shù)目。如果是0,表示都重要。

本實(shí)驗(yàn)使用不壓縮,24(16M色,真彩色)的BMP圖片,文件頭大小是54個(gè)字節(jié),前兩個(gè)字節(jié)為“BM”,緊接著4個(gè)字節(jié)是文件大小,19-22字節(jié)為圖片寬度,這些信息是程序設(shè)計(jì)中要使用的重要信息。

3. 程序設(shè)計(jì)

由于SD卡讀寫實(shí)驗(yàn),HDMI、LCD顯示實(shí)驗(yàn)種我們已經(jīng)練習(xí)過(guò)SD卡和視頻相關(guān)知識(shí),這里不再講解。

本實(shí)驗(yàn)的重點(diǎn)模塊是BMP圖片讀取模塊bmp_read,bmp_read模塊完成SD卡中讀取一個(gè)扇區(qū)的數(shù)據(jù),然后和BMP的文件頭對(duì)比,如果前2個(gè)字節(jié)等于“BM”,然后再找到19-22字節(jié),對(duì)比圖片的寬度和輸入要求的寬度是否一致,如果一致就認(rèn)為找到一張BMP圖片,讀取出來(lái),去掉前面54字節(jié)的文件頭,寫入外部存儲(chǔ)器。

bmp_read狀態(tài)機(jī)如下所示,有搜索命令以后,進(jìn)入搜索狀態(tài)“S_FIND”,開始不斷地讀取SD卡,找到符合要求的BMP圖片,找到以后進(jìn)入“S_READ_WAIT”,判斷FIFO空間大小,如果FIFO空間足夠大,進(jìn)入“S_READ”狀態(tài)。

o4YBAGAvUDSAE2fLAAAeEKe9XhQ225.jpg

bmp_read模塊狀態(tài)機(jī)

信號(hào)名稱 方向 說(shuō)明
clk in 時(shí)鐘輸入
rst in 異步復(fù)位輸入,高復(fù)位
ready out 空閑狀態(tài)指示
find in 搜索播放請(qǐng)求
sd_init_done in sd卡初始化完成
state_code out 狀態(tài)碼0,表示sd還在初始化1,sd卡初始化完成,等待按鍵按下2,正在搜索BMP文件3,找到BMP文件,正在讀取
bmp_width in 搜索BMP圖片的寬度
write_req out 寫外部存儲(chǔ)器請(qǐng)求
write_req_ack in 寫外部存儲(chǔ)器請(qǐng)求應(yīng)答
sd_sec_read out sd卡讀請(qǐng)求
sd_sec_read_addr out sd卡讀請(qǐng)求扇區(qū)地址
sd_sec_read_data in sd卡讀到的數(shù)據(jù)
sd_sec_read_data_valid in sd卡讀數(shù)據(jù)有效
sd_sec_read_end in sd卡讀請(qǐng)求完成
bmp_data_wr_en out bmp文件寫使能
bmp_data out bmp文件的音頻數(shù)據(jù)

bmp_read模塊端口

video_timing_data模塊完成視頻時(shí)序到FIFO讀取的信號(hào)的轉(zhuǎn)換,主要原理就是把視頻時(shí)序中的“DE”做為FIFO的讀信號(hào),但是讀出的數(shù)據(jù)會(huì)有延時(shí),所以做了相應(yīng)的對(duì)齊處理。

4. 實(shí)驗(yàn)現(xiàn)象

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

pIYBAGAvUDSAEzAVAABd35d-dXU597.jpg

2)把BMP格式文件放到sd卡中,需要注意,BMP圖片數(shù)據(jù)存儲(chǔ)是倒序,所以先用圖片處理工具上下顛倒一下。根據(jù)顯示輸出不同的分辨率,放置不同分辨率的圖片,HDMI輸出采用1024x768分辨率,7寸液晶屏模塊AN070分辨率是800x480,4.3寸液晶屏模塊AN430分辨率是480x272。

o4YBAGAvUDSAfEH0AACTxYUWpJc037.jpg

3)將準(zhǔn)備好的sd卡注入開發(fā)板的sd卡槽(sd卡不能帶電插拔),上電,下載實(shí)驗(yàn)程序,等待LED1變亮?xí)r,按下KEY2,這個(gè)時(shí)候LED2會(huì)變亮,表示正在搜索BMP文件,如果找到BMP圖片LED1、LED2會(huì)顯示會(huì)同時(shí)亮,這時(shí)候顯示器(或者液晶屏模塊,根據(jù)實(shí)驗(yàn)工程選擇,連接方法在《HDMI測(cè)試實(shí)驗(yàn)教程》中已講述)就會(huì)顯示相應(yīng)的圖片。如果sd卡內(nèi)有多張BMP,可以再次按按鍵KEY2,會(huì)顯示下一張圖片。


開發(fā)板

顯示效果

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1624

    文章

    21539

    瀏覽量

    600533
  • HDMI
    +關(guān)注

    關(guān)注

    32

    文章

    1623

    瀏覽量

    151434
  • SD卡
    +關(guān)注

    關(guān)注

    2

    文章

    554

    瀏覽量

    63679
  • BMP
    BMP
    +關(guān)注

    關(guān)注

    0

    文章

    48

    瀏覽量

    17018
  • 紫光同創(chuàng)
    +關(guān)注

    關(guān)注

    5

    文章

    78

    瀏覽量

    27467
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    紫光同創(chuàng)國(guó)產(chǎn)FPGA教程】【第八章】SD讀寫實(shí)驗(yàn)

    文件系統(tǒng)非常復(fù)雜,本實(shí)驗(yàn)不做講解,在后續(xù)的實(shí)驗(yàn)中我們通過(guò)搜索特定的文件頭來(lái)讀特殊的文件,完成音頻播放、圖片讀取顯示等。
    的頭像 發(fā)表于 02-05 11:35 ?8230次閱讀
    【<b class='flag-5'>紫光</b><b class='flag-5'>同創(chuàng)</b><b class='flag-5'>國(guó)產(chǎn)</b><b class='flag-5'>FPGA</b>教程】【第八章】<b class='flag-5'>SD</b><b class='flag-5'>卡</b>讀寫實(shí)驗(yàn)

    國(guó)產(chǎn)FPGA介紹-紫光同創(chuàng)

    紫光同創(chuàng)紫光集團(tuán)旗下紫光國(guó)微的子公司,成立于2013年,有十余年可編程邏輯器件研發(fā)經(jīng)歷,布局覆蓋高中低端FPGA產(chǎn)品。 早在2015年,
    發(fā)表于 01-24 10:45

    紫光同創(chuàng)FPGA有哪些型號(hào)

    請(qǐng)問(wèn)紫光同創(chuàng)FPGA有哪些型號(hào)?分別用于什么場(chǎng)景?
    發(fā)表于 01-24 10:48

    使用iconview控件時(shí),能否直接從sd讀取bmp格式的圖片進(jìn)行顯示啊 ?

    請(qǐng)教下,使用 iconview 控件時(shí),能否直接從sd讀取bmp格式的圖片進(jìn)行顯示啊 ?
    發(fā)表于 04-28 08:11

    至芯科技之a(chǎn)ltera 系列FPGA教程 第十四篇 分配管腳

    至芯科技之a(chǎn)ltera 系列FPGA教程 第十四篇 分配管腳
    發(fā)表于 08-11 03:33

    【小梅哥FPGA進(jìn)階教程】第十四章 TFT屏顯示圖片

    十四、TFT屏顯示圖片本文由杭電網(wǎng)友曾凱峰貢獻(xiàn),特此感謝學(xué)習(xí)了小梅哥的TFT顯示屏驅(qū)動(dòng)設(shè)計(jì)后,想著在此基礎(chǔ)上通過(guò)TFT屏顯示一張
    發(fā)表于 02-26 16:44

    FPGA實(shí)現(xiàn)對(duì)SD圖片讀取

    怎么用fpga實(shí)現(xiàn)對(duì)sd中的圖片進(jìn)行讀取,送到SDRAM中。求大神指教
    發(fā)表于 04-11 10:39

    請(qǐng)教下,讀取sd,u盤里面的bmp圖片解碼顯示

    本帖最后由 hpdell 于 2016-1-12 15:12 編輯 請(qǐng)教下,讀取sd、u盤里面的bmp圖片解碼
    發(fā)表于 10-24 08:10

    請(qǐng)問(wèn)如何顯示一張BMP圖片?

    原子大哥,請(qǐng)問(wèn)怎么顯示一張BMP圖片,你的那個(gè)STMf103RBT6的開發(fā)板的例程中,ILI93XX.c中好像沒(méi)有這個(gè)函數(shù),而那個(gè)圖片
    發(fā)表于 02-19 22:10

    軟件定義無(wú)線電手冊(cè),第十四

    軟件定義無(wú)線電手冊(cè),第十四版。pentek公司出的資料。
    發(fā)表于 02-18 09:52

    請(qǐng)問(wèn)使用iconview控件時(shí)可以直接從sd讀取bmp格式的圖片進(jìn)行顯示嗎 ?

    請(qǐng)教下,使用 iconview 控件時(shí),能否直接從sd讀取bmp格式的圖片進(jìn)行顯示啊 ?我看
    發(fā)表于 04-07 04:36

    【正點(diǎn)原子FPGA連載】第十九章SDBMP圖片LCD顯示實(shí)驗(yàn)-領(lǐng)航者ZYNQ之嵌入式開發(fā)教程

    原子公眾號(hào),獲取最新資料第十九章SDBMP圖片LCD顯示實(shí)驗(yàn)在“
    發(fā)表于 09-05 15:39

    【正點(diǎn)原子FPGA連載】第二十章SDBMP圖片HDMI顯示實(shí)驗(yàn)-領(lǐng)航者ZYNQ之嵌入式開發(fā)教程

    。20.2實(shí)驗(yàn)任務(wù)本章的實(shí)驗(yàn)任務(wù)是使用領(lǐng)航者ZYNQ開發(fā)板讀取SD中存放的BMP格式圖片,分辨率為1920*1080,并將其
    發(fā)表于 09-05 15:40

    紫光同創(chuàng)FPGA開發(fā)套件,高性能國(guó)產(chǎn)FPGA方案

    紫光同創(chuàng)FPGA開發(fā)套件,高性能國(guó)產(chǎn)FPGA方案,100%國(guó)產(chǎn)化,全系列產(chǎn)品,方案可定制,滿足多
    發(fā)表于 11-16 17:25

    視頻_高速放大器設(shè)計(jì)指南 第十四

    視頻_高速放大器設(shè)計(jì)指南 第十四
    發(fā)表于 03-05 15:34 ?0次下載