硬汉嵌入式论坛

 找回密码
 立即注册
搜索
查看: 651|回复: 8
收起左侧

[FMC] 求助,有大神救救吗!SDRAM两次数据打印出来为啥不一样?

[复制链接]

4

主题

26

回帖

38

积分

新手上路

积分
38
发表于 2026-8-21 13:50:20 | 显示全部楼层 |阅读模式
求助,有大神救救吗!SDRAM两次数据打印出来为啥不一样?
405f53bd-7fd9-495a-8477-569510c67b53.png
回复

使用道具 举报

35

主题

348

回帖

453

积分

高级会员

积分
453
QQ
发表于 2026-8-21 15:20:40 | 显示全部楼层
对应区域的 MPU 配置有问题吧
    MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;
    MPU_InitStruct.IsCacheable      = MPU_ACCESS_NOT_CACHEABLE;
    MPU_InitStruct.IsShareable      = MPU_ACCESS_SHAREABLE;
这样就行

点评

按照你配置修改,还是不行,没变化  详情 回复 发表于 2026-8-21 15:43
回复

使用道具 举报

4

主题

26

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2026-8-21 15:43:24 | 显示全部楼层
yono 发表于 2026-8-21 15:20
对应区域的 MPU 配置有问题吧
    MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;
    M ...

按照你配置修改,还是不行,没变化
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
124232
QQ
发表于 2026-8-21 15:52:48 | 显示全部楼层
优先检测焊接,虚焊问题最多。然后原理图接线别错了。

这么有规律的错位,感觉是虚焊或者硬件接线问题,

点评

SDRAM应该是没问题,用它做缓冲区都可以点亮RGB屏幕,只是在搬运摄像头数据的时候发现这个问题,然后就写了个测试,发现确实不对  详情 回复 发表于 2026-8-21 16:21
回复

使用道具 举报

4

主题

26

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2026-8-21 16:20:36 | 显示全部楼层
SDRAM应该是没问题,用它做缓冲区都可以点亮RGB屏幕,只是在搬运摄像头数据的时候发现这个问题,然后就写了个测试,发现确实不对
回复

使用道具 举报

4

主题

26

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2026-8-21 16:21:07 | 显示全部楼层
eric2013 发表于 2026-8-21 15:52
优先检测焊接,虚焊问题最多。然后原理图接线别错了。

这么有规律的错位,感觉是虚焊或者硬件接线问题, ...


SDRAM应该是没问题,用它做缓冲区都可以点亮RGB屏幕,只是在搬运摄像头数据的时候发现这个问题,然后就写了个测试,发现确实不对
回复

使用道具 举报

20

主题

124

回帖

184

积分

初级会员

积分
184
发表于 2026-8-22 09:19:13 | 显示全部楼层
ALIGNED(32) volatile uint32_t *camera_sdram = (volatile uint32_t *)0xC0800000;

void test(void)
{
    uint32_t i;

    printf("\r\n==============\r\n");

    // 写入前,确保 SDRAM 区域缓存无效
    // SCB_InvalidateDCache_by_Addr((uint32_t*)camera_sdram, 32);

    for(i = 0; i < 8; i++)
    {
        camera_sdram[i] = i;               
        printf("%08x %08x\r\n", camera_sdram[i], i);
    }

    // 写入后,D-Cache 中这 32 字节的数据刷回 SDRAM
    SCB_CleanDCache_by_Addr((uint32_t*)camera_sdram, 32);

    printf("\r\n==============\r\n");

    // 读取前,使D-Cache对应缓存行失效,强制从 SDRAM 重新读取
    SCB_InvalidateDCache_by_Addr((uint32_t*)camera_sdram, 32);

    for(i = 0; i < 8; i++)
    {
        printf("%08x %08x\r\n", camera_sdram[i], i);
    }

    printf("\r\n==============\r\n");
}

回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
124232
QQ
发表于 2026-8-22 09:41:16 | 显示全部楼层
如果用SDRAM使用了DMA了,直接SCB DisableDCache看下
回复

使用道具 举报

741

主题

3931

回帖

6179

积分

论坛元老

自定义头衔

积分
6179
发表于 2026-8-24 17:25:59 | 显示全部楼层
降低 sdram 时钟频率试试看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-10-8 12:45 , Processed in 5.956084 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表