[方案相关] HC32F4A0+DVP+SDRAM数据搬运问题

[复制链接]
 楼主| 可以么 发表于 2025-7-24 14:30 | 显示全部楼层 |阅读模式
本帖最后由 可以么 于 2025-7-24 14:34 编辑

在使用HC32F4A0的DVP外设做图传时,发现使用DMA搬运图像数据至SDRAM上数据会丢失。
图像数据320*240则不会,一旦图像数据超出了某个阈值则会出现数据丢失。
后续使用双路DMA模拟双缓冲解决了该问题,但不完美。
暂定解决方案:
1.DMA1搬运图像数据至MCU内部sram缓冲区A->半满中断设置aos使能DMA2搬运缓冲区A的数据至SRAM内(注HC32的AOS次数只能单次,所以搬运将分成大数据块传输,避免多次中断的占用CPU的处理时间)
2.DMA1搬运图像数据至MCU内部sram缓冲区B->全满中断设置aos使能DMA2搬运缓冲区B的数据至SRAM内(注HC32的AOS次数只能单次,所以搬运将分大数据成块传输,避免多次中断的占用CPU的处理时间)
如此往复;
该解决方案带来的问题:
①占用了DMA1、DMA2,将导致其余需要使用DMA的外设将出现阻塞、dma错误等异常问题
②如一,当全速搬运图片数据时,其余通信外设(如串口、spi等使用dma的外设),因数据传输的不连续性将给应用层带来很多额外的问题

有没有哪位前辈也有过DVP+SDRAM类似经历,是否有更加完美的方案分享,万分感谢
SDRAM时序如下:
    stcDmcInit.stcTimingConfig.u8CASL = 2U;
    stcDmcInit.stcTimingConfig.u8DQSS = 0U;
    stcDmcInit.stcTimingConfig.u8MRD = 2U;      /* tMRD: 2CLK */
    stcDmcInit.stcTimingConfig.u8RAS = 2U;      /* tRAS: min=42ns */
    stcDmcInit.stcTimingConfig.u8RC = 2U;       /* tRC:  min=63ns */
    stcDmcInit.stcTimingConfig.u8RCD_B = 3U;    /* tRCD: min=15ns */
    stcDmcInit.stcTimingConfig.u8RCD_P = 0U;
    stcDmcInit.stcTimingConfig.u8RFC_B = 3U;    /* tRFC: min=63ns */
    stcDmcInit.stcTimingConfig.u8RFC_P = 0U;
    stcDmcInit.stcTimingConfig.u8RP_B = 3U;     /* tRP:  min=15ns */
    stcDmcInit.stcTimingConfig.u8RP_P = 0U;
    stcDmcInit.stcTimingConfig.u8RRD = 1U;      /* tRRD: min=14ns */
    stcDmcInit.stcTimingConfig.u8WR = 2U;       /* tWR:  2CLK */
    stcDmcInit.stcTimingConfig.u8WTR = 1U;
    stcDmcInit.stcTimingConfig.u8XP = 1U;
    stcDmcInit.stcTimingConfig.u8XSR = 3U;      /* tXSR: min=70ns */
    stcDmcInit.stcTimingConfig.u8ESR = 3U;


 楼主| 可以么 发表于 2025-7-24 14:37 | 显示全部楼层
补充:使用单路DMA双缓冲机制可以做到比DVP DMA搬运至SDRAM更高的数据完整性,但分辨率上去了仍然会丢数据,目前所试方案 最完美的就是双路DMA,图像搬运可以做到ov5640的最高分辨率
内政奇才 发表于 2025-7-31 15:58 | 显示全部楼层
HC32F4A0的DMA在传输大数据量时可能存在性能瓶颈,特别是当数据量超过某个阈值时,DMA可能无法及时完成传输,导致数据丢失。
classroom 发表于 2025-7-31 16:04 | 显示全部楼层
增大内部SRAM缓冲区,如果内部SRAM缓冲区有限,可以考虑采用分块传输的方式,将图像数据分成多个小块进行传输,减少单次传输的数据量。
jcky001 发表于 2025-7-31 16:04 | 显示全部楼层
考虑降低图像分辨率或帧率以减少数据量。
jf101 发表于 2025-7-31 16:50 | 显示全部楼层
使用HC32F4A0的DVP外设做图传时,发现使用DMA搬运图像数据至SDRAM上数据会丢失。
powerantone 发表于 2025-7-31 16:59 | 显示全部楼层
如果内部SRAM缓冲区设置过小,无法容纳大分辨率图像数据,也会导致数据丢失。
stormwind123 发表于 2025-7-31 17:59 | 显示全部楼层
DMA通道冲突?
probedog 发表于 2025-7-31 18:00 | 显示全部楼层
SDRAM的时序配置如果与DMA传输不匹配,可能导致数据丢失。
cr315 发表于 2025-7-31 18:05 | 显示全部楼层
为高速总线分配独立的DMA通道。
 楼主| 可以么 发表于 2025-8-4 19:06 | 显示全部楼层

不是的,直接使用DMA搬运数据至外部SDRAM会出现数据丢失,双通道是模拟双缓冲区,先搬运到内部sram后启用另一通道搬运至外部sram
 楼主| 可以么 发表于 2025-8-4 19:07 | 显示全部楼层
cr315 发表于 2025-7-31 18:05
为高速总线分配独立的DMA通道。

独立通道搬运会出现数据丢失,现在只能利用内部SRAM作为缓冲区进行搬运,但这个解决方案不完美,具体如题描述那样
 楼主| 可以么 发表于 2025-8-4 19:08 | 显示全部楼层
内政奇才 发表于 2025-7-31 15:58
HC32F4A0的DMA在传输大数据量时可能存在性能瓶颈,特别是当数据量超过某个阈值时,DMA可能无法及时完成传输 ...

应该不是DMA的性能瓶颈的问题,因为如果是DMA的问题,双缓冲机制就无法解决了
hww22 发表于 2025-8-5 16:36 | 显示全部楼层
用的那几个IO 口 接SDR   另外DMA,用的那几个IO?
chenjun89 发表于 2025-8-6 07:58 来自手机 | 显示全部楼层
用MCU跑图传功能怕是有点难哦,图传的频率多少?
chenqianqian 发表于 2025-8-6 08:39 来自手机 | 显示全部楼层
楼主做的什么图传?数据从MCU转发?
 楼主| 可以么 发表于 2025-8-7 17:11 | 显示全部楼层
hww22 发表于 2025-8-5 16:36
用的那几个IO 口 接SDR   另外DMA,用的那几个IO?

就是华大手册上标明的接口
 楼主| 可以么 发表于 2025-8-7 17:12 | 显示全部楼层
chenjun89 发表于 2025-8-6 07:58
用MCU跑图传功能怕是有点难哦,图传的频率多少?

用双缓冲现在十来帧是可以做到的,分辨率低的话可以更多
 楼主| 可以么 发表于 2025-8-7 17:13 | 显示全部楼层
chenqianqian 发表于 2025-8-6 08:39
楼主做的什么图传?数据从MCU转发?

MCU从摄像头采集图像后进行图像转发
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

9

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

2

主题

9

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部