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

2019-07-20 14:17发布

两片 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(" SDRAM 测试 开始 ...");
    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(" SDRAM 测试 开始读出数据进行校对 ......");
    for(ii=0;ii<0x2000000;ii++)  // 128MByte   1024*1024*32*4/1024/4
    {
      jj  = *ptrSdramAddr++;   

      if(jj != (SDRAM_BASE_ADDR +  (ii * 4) ) )
        printf(" SDRAM 测试 读循环 出错");
      else
      {
        if(ii >= (0x2000000 - 1))
        {
          printf(" SDRAM 测试 读循环次数 = 0x%X", ii + 1);
          printf(" SDRAM 测试 读 地址 = 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(" SDRAM 测试 开始读出数据进行校对 ......");
    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(" SDRAM 测试 读循环 出错");
      else
      {
        if(ii >= (0x4000000 - 1))
        {
          printf(" SDRAM 测试 读循环次数 = 0x%X", ii + 1);
          printf(" SDRAM 测试 读 地址 = 0x%X", SDRAM_BASE_ADDR + (ii * 2) + 2);
        }
      }
      cc ++;
    }   
  }


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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
hpdell
1楼-- · 2019-07-20 15:59
他奶奶的,终于搞定了啊
正点原子
2楼-- · 2019-07-20 17:38
 精彩回答 2  元偷偷看……
lvlzh
3楼-- · 2019-07-20 17:50
 精彩回答 2  元偷偷看……
hpdell
4楼-- · 2019-07-20 22:55
lvlzh 发表于 2017-5-26 14:31
想问下楼主是怎么搞定的,我最近也遇到过这个问题

你的是什么型号的单片机,具体遇到什么问题 ??
lvlzh
5楼-- · 2019-07-21 03:07
hpdell 发表于 2017-5-27 11:26
你的是什么型号的单片机,具体遇到什么问题 ??

STM32F4,我在读写的时候按照你上面给出来的
for(ii=0;ii<0x2000000;ii++)  // 128MByte   1024*1024*32*4/1024/4
    {
      *ptrSdramAddr  = ( __IO uint32_t )(SDRAM_BASE_ADDR + (ii * 4));  

      ptrSdramAddr ++;        // 每加一次表示是4个字节的地址数目
    }
不能实现读写。
我试了好久发现       
for(uwIndex = 0; uwIndex < BUFFER_SIZE; uwIndex++)
        {
                                *(u32*)((Bank6_SDRAM_ADDR>>2)+ uwIndex) = aTxBuffer[uwIndex];
        }
                               
       
                for(uwIndex = 0; uwIndex < BUFFER_SIZE; uwIndex++)
        {
                                //printf("uwIndex = %d ",uwIndex);
                                aRxBuffer[uwIndex]=*(u32*)((Bank6_SDRAM_ADDR>>2) + uwIndex);
        }
倒是可以,但是就具体不知道什么原因,能向您请教下吗?
lvlzh
6楼-- · 2019-07-21 08:18
 精彩回答 2  元偷偷看……

一周热门 更多>