【【手把手教你从SD卡驱动VDMA显示图片实验】】

本文详细介绍了如何在XilinxZynq开发板上使用VDMA接口从SD卡加载BMP图像,包括文件头解析、BMP数据结构以及如何配置和启动VDMA来传输图像数据。作者提供了三个版本的main.c示例代码,展示了不同处理BMP文件头部的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

手把手教你从SD卡驱动VDMA显示图片实验

图像格式介绍

典型的BMP图像文件是由四部分组成的
包括了BMP的文件头,BMP信息头,调色板,位图数据
因为传递的是RGB图像 RGB不太需要调色板了 从信息头直接到位图数据

在这里插入图片描述
文件头占据了14个字节
分别是
在这里插入图片描述
查看这个16进制格式 BMP的文件格式 总是低字节的放在低地址位,高字节放在高地址位。
可以查看到如下的二进制
在这里插入图片描述
前2字节 0x4d42 是 代表了图片的类型是 BM
后面的4字节 0x00_11_94_36 是 代表了字节的大小
后面的合起来4字节 保留都是 0x00_00_00_00
最后的4字节是代表了从文件开始到真正的数据的偏移量 0x36 代表了54个字节
记住这里的是0ah 的位置
这里一共合计14个字节

下面的一共 40个字节 用来表示BMP数据头的信息
在这里插入图片描述
在这里面最主要关注的就是上面的
bitWidth 图像宽度
bitHeight 图像高度
bitBitCount 图像位深
bitSizeImage 图像大小

整个架构block design 的连接参照
VDMA与HDMI的连接

需要修改的是 zynq核
启用SD的连接
在这里插入图片描述
在这里插入图片描述
注意修改电平 不然会被烧坏整个SD卡
整体的block design 构建如下
其实和上一节的 block design是一样的
在这里插入图片描述
启动vitis

我的src只有3个文件
因为输出的是720p的图像 我并没有参照例程做
我的main.c有两版都可以运行

第一个main.c

#include"stdio.h"
#include "stdlib.h"
#include "string.h"
#include"xparameters.h"
#include"vdma_api.h"
#include "xaxivdma.h"
#include "xil_types.h"
#include "xil_cache.h"
#include "ff.h"
#define   VDMA_ID        XPAR_AXI_VDMA_0_DEVICE_ID      // VDMA ID
#define   DDR_ADDRESS    XPAR_PS7_DDR_0_S_AXI_BASEADDR  // DDR的基地址 0x00100000
#define   WIDTH          1280
#define   HEIGHT         720
int       frame_buffer_addr   =   DDR_ADDRESS + 0x10000000   ;
void load_sd ( u8 * frame);
int main()
{
   
Xil_DCacheDisable();
    XAxiVdma vdma_inst;  // 这是例化的驱动实例


// 往VDMA的帧缓存写入图案
//先写SD卡

    // 配置并启动VDMA
    run_triple_frame_buffer(
            &vdma_inst,        // VDMA 驱动实例
            VDMA_ID,           // VDMA 器件ID
             WIDTH,             // 图像宽度
            HEIGHT,            // 图像高度
            frame_buffer_addr, // VDMA帧缓存的起始地址
            0,
            0);

load_sd((u8*)frame_buffer_addr);
}
void load_sd ( u8 * frame)
{
   
//先定义一个 FATFS 的 文件系统
static     FATFS fatfs;
FIL     fil
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值