你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

两片 MT48LC32M16的SDRAM 操作读写问题 ?

[复制链接]
hpdell 提问时间:2016-10-24 11:25 /
悬赏8ST金币未解决
两片 MT48LC32M16的SDRAM 操作读写问题 ??? 描述如下:

#define SDRAM_BASE_ADDR            ((uint32_t)0xC0000000)     // CS0

1、按照 32位的读写,完全正常,

  {   // sdram 读写,按照32位进行测试, 使用指针进行操作 ok
    uint32_t  *ptrSdramAddr;
    ptrSdramAddr = (uint32_t *)SDRAM_BASE_ADDR;   //   吧地址转换为指针

    printf("\r\nSDRAM 测试 开始 ...");
    for(ii=0;ii<0x2000000;ii++)  // 128MByte   1024*1024*32*4/1024/4
    {
      *ptrSdramAddr  = ( __IO uint32_t )(SDRAM_BASE_ADDR + (ii * 4));  

      ptrSdramAddr ++;        // 每加一次表示是4个字节的地址数目
    }

    ptrSdramAddr = (uint32_t *)SDRAM_BASE_ADDR;   //   吧地址转换为指针
    printf("\r\nSDRAM 测试 开始读出数据进行校对 ......");
    for(ii=0;ii<0x2000000;ii++)  // 128MByte   1024*1024*32*4/1024/4
    {
      jj  = *ptrSdramAddr++;   

      if(jj != (SDRAM_BASE_ADDR +  (ii * 4) ) )
        printf("\r\nSDRAM 测试 读循环 出错");
      else
      {
        if(ii >= (0x2000000 - 1))
        {
          printf("\r\nSDRAM 测试 读循环次数 = 0x%X", ii + 1);
          printf("\r\nSDRAM 测试 读 地址 = 0x%X", SDRAM_BASE_ADDR + (ii * 4) + 4);
        }
      }
    }   
  }

2、按照 16位的读写,不正常

  {   // sdram 读写,按照16位进行测试, 使用指针进行操作
    uint16_t  *ptrSdramAddr;
    uint32_t  dattt;
    uint16_t  cc=0;
    ptrSdramAddr = (uint16_t *)SDRAM_BASE_ADDR;   //   吧地址转换为指针

    for(ii=0;ii<0x4000000;ii++)  // 128MByte   1024*1024*32*4/1024/4
    {
      *ptrSdramAddr  = cc;  

      ptrSdramAddr ++;        // 每加一次表示是2个字节的地址数目
      cc ++;
    }

    printf("\r\nSDRAM 测试 开始读出数据进行校对 ......");
    ptrSdramAddr = (uint16_t *)SDRAM_BASE_ADDR;   //   吧地址转换为指针

    cc = 0;
    for(ii=0;ii<0x4000000;ii++)  // 128MByte   1024*1024*32*4/1024/4
    {
      dattt  = *ptrSdramAddr;
      ptrSdramAddr ++;
      if(dattt != cc )
        printf("\r\nSDRAM 测试 读循环 出错");
      else
      {
        if(ii >= (0x4000000 - 1))
        {
          printf("\r\nSDRAM 测试 读循环次数 = 0x%X", ii + 1);
          printf("\r\nSDRAM 测试 读 地址 = 0x%X", SDRAM_BASE_ADDR + (ii * 2) + 2);
        }
      }
      cc ++;
    }   
  }


有谁知道这是为何吗 ????

收藏 2 评论9 发布时间:2016-10-24 11:25

举报

9个回答
asssdz-382474 回答时间:2016-10-24 12:33:58
回答时间:2016-10-24 14:40:08
SDRAM_BASE_ADDR转换为十六位的地址是0x0000,这样SRAM是找不到他的实际地址的。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

hpdell 回答时间:2016-10-24 16:53:26
安 发表于 2016-10-24 14:40
SDRAM_BASE_ADDR转换为十六位的地址是0x0000,这样SRAM是找不到他的实际地址的。

你好,那有什么好方法可以解决一下啊 ??
或者是不能够按照 16位来进行操作 ?
回答时间:2016-10-24 17:01:52
可以考虑用一个十六位的指针加实际地址,SRAM我也用的比较少。
lgkgkfg 回答时间:2016-10-25 09:38:36
asssdz-382474 回答时间:2016-10-25 13:00:54
:(:(
高二毛 回答时间:2016-10-25 13:18:28
关注。。。。。
pamhood 回答时间:2016-10-25 14:26:27
xhzheng 回答时间:2016-10-25 16:41:36
地址依然使用32位进行定义看看,

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版