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

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

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

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

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

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

1. 實驗簡介

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

本實驗如果通過液晶屏顯示,需要有液晶屏模塊。

2. 實驗原理

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

BMP圖片格式

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

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

對于程序設(shè)計來說最重要的是找到BMP文件頭,BMP圖像文件頭格式如下:

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

2)3-6:整個文件大小。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:位圖圖信息頭長度。

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:每個像素的位數(shù)。有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:用字節(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的話,則說明使用所有調(diào)色板項。

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

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

3. 程序設(shè)計

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

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

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

o4YBAGAvUDSAE2fLAAAeEKe9XhQ225.jpg

bmp_read模塊狀態(tài)機

信號名稱 方向 說明
clk in 時鐘輸入
rst in 異步復(fù)位輸入,高復(fù)位
ready out 空閑狀態(tài)指示
find in 搜索播放請求
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 寫外部存儲器請求
write_req_ack in 寫外部存儲器請求應(yīng)答
sd_sec_read out sd卡讀請求
sd_sec_read_addr out sd卡讀請求扇區(qū)地址
sd_sec_read_data in sd卡讀到的數(shù)據(jù)
sd_sec_read_data_valid in sd卡讀數(shù)據(jù)有效
sd_sec_read_end in sd卡讀請求完成
bmp_data_wr_en out bmp文件寫使能
bmp_data out bmp文件的音頻數(shù)據(jù)

bmp_read模塊端口

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

4. 實驗現(xiàn)象

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

pIYBAGAvUDSAEzAVAABd35d-dXU597.jpg

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

o4YBAGAvUDSAfEH0AACTxYUWpJc037.jpg

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


開發(fā)板

顯示效果

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

    關(guān)注

    1629

    文章

    21744

    瀏覽量

    603664
  • HDMI
    +關(guān)注

    關(guān)注

    32

    文章

    1710

    瀏覽量

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

    關(guān)注

    2

    文章

    565

    瀏覽量

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

    關(guān)注

    0

    文章

    48

    瀏覽量

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

    關(guān)注

    5

    文章

    87

    瀏覽量

    27513
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

    使用iconview控件時,能否直接從sd讀取bmp格式的圖片進行顯示啊 ?

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

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

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

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

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

    FPGA實現(xiàn)對SD圖片讀取

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

    請教下,讀取sd,u盤里面的bmp圖片解碼顯示 ?

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

    請問如何顯示一張BMP圖片?

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

    軟件定義無線電手冊,第十四

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

    請問使用iconview控件時可以直接從sd讀取bmp格式的圖片進行顯示嗎 ?

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

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

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

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

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

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

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

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

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