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

两片 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个回答
assssdz 回答时间: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
assssdz 回答时间:2016-10-25 13:00:54
:(:(
高二毛 回答时间:2016-10-25 13:18:28
关注。。。。。
hooke 回答时间:2016-10-25 14:26:27
xhzheng 回答时间:2016-10-25 16:41:36
地址依然使用32位进行定义看看,

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版