hpdell 发表于 2016-10-24 11:25:54

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

两片 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_tdattt;
    uint16_tcc=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 ++;
    }   
}


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

asssdz-382474 发表于 2016-10-24 12:33:58

:):):):):):):)

发表于 2016-10-24 14:40:08

SDRAM_BASE_ADDR转换为十六位的地址是0x0000,这样SRAM是找不到他的实际地址的。

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

:lol:lol:lol:lol:lol

asssdz-382474 发表于 2016-10-25 13:00:54

:(:(:(:(:(:(:(:(:(:(:(:(

高二毛 发表于 2016-10-25 13:18:28

关注。。。。。

pamhood 发表于 2016-10-25 14:26:27

:L:L:L:L:L:L:L

xhzheng 发表于 2016-10-25 16:41:36

地址依然使用32位进行定义看看,
页: [1]
查看完整版本: 两片 MT48LC32M16的SDRAM 操作读写问题 ?