硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3610|回复: 15
收起左侧

[SDRAM] 我用STMH7读写SDRAM,对比写入的数据和读出的数据怎么感觉掉位了

[复制链接]

27

主题

70

回帖

151

积分

初级会员

积分
151
发表于 2019-5-7 12:07:59 | 显示全部楼层 |阅读模式
这是我写入的数据00:0xC178A562 01:0xC178A563 02:0xC178A564 03:0xC178A565 04:0xC178A566 05:0xC178A567 06:0xC178A568 07:0xC178A569 08:0xC178A56A 09:0xC178A56B 0A:0xC178A56C 0B:0xC178A56D 0C:0xC178A56E 0D:0xC178A56F 0E:0xC178A570 0F:0xC178A571
这个是我读出的数据00:0xA563C178 01:0xA564C178 02:0xA565C178 03:0xA566C178 04:0xA567C178 05:0xA568C178 06:0xA569C178 07:0xA56AC178 08:0xA56BC178 09:0xA56CC178 0A:0xA56DC178 0B:0xA56EC178 0C:0xA56FC178 0D:0xA570C178 0E:0xA571C178 0F:0xA562C178


    那个大神知道原因帮忙看下,谢谢啦
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2019-5-7 12:21:16 | 显示全部楼层
你这个何止是调位了,数据都错了,先把你的硬件修理修理,绝逼有问题
0xC178  A562
0xA563  C178
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2019-5-7 12:23:05 | 显示全部楼层
你的错误就跟你的题目一样,

STMH7是什么鬼? 你的硬件设计估计存在同样的问题。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

27

主题

70

回帖

151

积分

初级会员

积分
151
 楼主| 发表于 2019-5-7 13:39:45 | 显示全部楼层
0F:0xA562C178 末尾有这样的数据,是STM32H7
回复

使用道具 举报

2

主题

72

回帖

83

积分

初级会员

积分
83
发表于 2019-5-7 13:55:13 | 显示全部楼层
本帖最后由 tsetse 于 2019-5-7 13:57 编辑

你是位置读错了还是写错了?
写入顺序 1.....--> 10
读出顺序 2....10 --> 1


16位SDRAM ?  高低位还错了
回复

使用道具 举报

27

主题

70

回帖

151

积分

初级会员

积分
151
 楼主| 发表于 2019-5-7 14:49:52 | 显示全部楼层
本帖最后由 ^张浩然 于 2019-5-7 14:54 编辑
tsetse 发表于 2019-5-7 13:55
你是位置读错了还是写错了?
写入顺序 1.....--> 10
读出顺序 2....10 --> 1

16位的SDRAM,不知道怎么回事,不知道是读错了,还是写错了,怎么验证下
回复

使用道具 举报

27

主题

70

回帖

151

积分

初级会员

积分
151
 楼主| 发表于 2019-5-7 15:37:48 | 显示全部楼层
本帖最后由 ^张浩然 于 2019-5-7 15:38 编辑

我改用16位的写不颠倒了,但是还是错一位
[15:36:00.596]收←◆
/* Write data to the SDRAM memory success*/

00:0x0000A562 01:0x0000A563 02:0x0000A564 03:0x0000A565 04:0x0000A566 05:0x0000A567 06:0x0000A568 07:0x0000A569

/* Read back data from the SDRAM memory success*/

00:0x0000A563 01:0x0000A564 02:0x0000A565 03:0x0000A566 04:0x0000A567 05:0x0000A568 06:0x0000A569 07:0x0000A166

回复

使用道具 举报

27

主题

70

回帖

151

积分

初级会员

积分
151
 楼主| 发表于 2019-5-7 16:04:41 | 显示全部楼层
我把写的地址提4位之后就可以对上了,但是位还是颠倒的


/* Write data to the SDRAM memory success*/

00:0xC178A562 01:0xC178A563 02:0xC178A564 03:0xC178A565 04:0xC178A566 05:0xC178A567 06:0xC178A568 07:0xC178A569 08:0xC178A56A 09:0xC178A56B 0A:0xC178A56C 0B:0xC178A56D 0C:0xC178A56E 0D:0xC178A56F 0E:0xC178A570 0F:0xC178A571

/* Read back data from the SDRAM memory success*/

00:0xA562C178 01:0xA563C178 02:0xA564C178 03:0xA565C178 04:0xA566C178 05:0xA567C178 06:0xA568C178 07:0xA569C178 08:0xA56AC178 09:0xA56BC178 0A:0xA56CC178 0B:0xA56DC178 0C:0xA56EC178 0D:0xA56FC178 0E:0xA570C178 0F:0xA571C178
回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
发表于 2019-5-7 17:21:04 | 显示全部楼层
^张浩然 发表于 2019-5-7 16:04
我把写的地址提4位之后就可以对上了,但是位还是颠倒的

你先查找一下看看你的硬件有没有问题 ?

数据及地址线有没有错 ??
回复

使用道具 举报

2

主题

72

回帖

83

积分

初级会员

积分
83
发表于 2019-5-7 19:39:35 | 显示全部楼层
^张浩然 发表于 2019-5-7 16:04
我把写的地址提4位之后就可以对上了,但是位还是颠倒的

从数据上看,内容是对的,就是错位了,硬件上应该问题不大,应该是软件配置问题
把你的配置和读写部分操作检查一下
回复

使用道具 举报

27

主题

70

回帖

151

积分

初级会员

积分
151
 楼主| 发表于 2019-5-8 10:31:26 | 显示全部楼层
hpdell 发表于 2019-5-7 17:21
你先查找一下看看你的硬件有没有问题 ?

数据及地址线有没有错 ??

我感觉很可能是我电路的问题,用的2层板布的,用2层板能实现吗,还有我用16位的读就不在错位,但是读取数量超过30就会出错,有没有设计好的SDRAM案例参考下,谢谢啦
回复

使用道具 举报

27

主题

70

回帖

151

积分

初级会员

积分
151
 楼主| 发表于 2019-5-8 10:31:41 | 显示全部楼层
tsetse 发表于 2019-5-7 19:39
从数据上看,内容是对的,就是错位了,硬件上应该问题不大,应该是软件配置问题
把你的配置和读写部分操 ...

我感觉很可能是我电路的问题,用的2层板布的,用2层板能实现吗,还有我用16位的读就不在错位,但是读取数量超过30就会出错,有没有设计好的SDRAM案例参考下,谢谢啦
回复

使用道具 举报

2

主题

72

回帖

83

积分

初级会员

积分
83
发表于 2019-5-8 14:03:48 | 显示全部楼层
^张浩然 发表于 2019-5-8 10:31
我感觉很可能是我电路的问题,用的2层板布的,用2层板能实现吗,还有我用16位的读就不在错位,但是读取数 ...

16位就不再错位是什么意思?
你的代码到底是怎么写的?
硬件配置成16位接口,跟你软件读写16位还是32位没关系啊
回复

使用道具 举报

27

主题

70

回帖

151

积分

初级会员

积分
151
 楼主| 发表于 2019-5-8 14:18:44 | 显示全部楼层
本帖最后由 ^张浩然 于 2019-5-8 14:19 编辑
tsetse 发表于 2019-5-8 14:03
16位就不再错位是什么意思?
你的代码到底是怎么写的?
硬件配置成16位接口,跟你软件读写16位还是32位 ...

有这两个函数HAL_SDRAM_Read_16b与HAL_SDRAM_Read_32b,我用HAL_SDRAM_Read_16b读写,写地址上提2位就能对上,但是只能读写32个,超了出错
代码
        for(i=0; i<BUFFER_SIZE; i++)
        {
                aTxBuffer=0xC178A562+i;         /* TxBuffer init */
        }
       

        /* Write data to the SDRAM memory */
        CR=HAL_SDRAM_Write_16b(&sdramHandle1,(uint32_t *)(SDRAM_DEVICE_ADDR+WRITE_ADDR),aTxBuffer, BUFFER_SIZE);
        if(CR==0)
        printf("\r\n/* Write data to the SDRAM memory success*/\r\n\r\n");
        else
        printf("\r\n/* Write data to the SDRAM memory  fail*/\r\n\r\n");
        for(i=0;i< BUFFER_SIZE;i++)
        {
                printf("%02X:0x%08X ",i,aTxBuffer);
        }
        printf("\r\n");
       
        /* Read back data from the SDRAM memory */
        DR=HAL_SDRAM_Read_16b(&sdramHandle1,(uint32_t *)(SDRAM_DEVICE_ADDR+READ_ADDR), aRxBuffer, BUFFER_SIZE);
        if(DR==0)
        printf("\r\n/* Read back data from the SDRAM memory success*/\r\n\r\n");
        else
        printf("\r\n/* Read back data from the SDRAM memory  fail*/\r\n\r\n");
        for(i=0;i< BUFFER_SIZE;i++)
        {
                printf("%02X:0x%08X ",i,aRxBuffer);
        }
        printf("\r\n");

       
        /*##-3- Checking data integrity ############################################*/   
        for (i = 0; (i < BUFFER_SIZE); i++)
        {
                if (aRxBuffer != aTxBuffer)
                        uwWriteReadStatus++;
        }       
        if(uwWriteReadStatus == 0 ) /* check date */
                printf("\r\n SDRAM Test OK\r\n");
        else
                printf("\r\n SDRAM Test False\r\n");

回复

使用道具 举报

2

主题

72

回帖

83

积分

初级会员

积分
83
发表于 2019-5-8 14:32:20 | 显示全部楼层
本帖最后由 tsetse 于 2019-5-8 14:37 编辑
^张浩然 发表于 2019-5-8 14:18
有这两个函数HAL_SDRAM_Read_16b与HAL_SDRAM_Read_32b,我用HAL_SDRAM_Read_16b读写,写地址上提2位就能 ...

你实际的代码就是这样???
aTxBuffer 和 aRxBuffer  到底是数组还是指针?

没有下标,没有++ ?

  1. static void Fill_Buffer(uint32_t *pBuffer, uint32_t uwBufferLenght, uint32_t uwOffset)
  2. {
  3.         uint32_t tmpIndex = 0;

  4.         /* Put in global buffer different values */
  5.         for (tmpIndex = 0; tmpIndex < uwBufferLenght; tmpIndex++ )
  6.         {
  7.                 pBuffer[tmpIndex] = tmpIndex + uwOffset;
  8.         }
  9. }

  10. main()
  11. {
  12.         /* Fill the buffer to write */
  13.         Fill_Buffer(aTxBuffer, BUFFER_SIZE, 0xA244250F);

  14.         /* Fill the Read buffer */
  15.         Fill_Buffer(aRxBuffer, BUFFER_SIZE, 0xBBBBBBBB);

  16.         /* Write data to the SDRAM memory */
  17.         for (uwIndex = 0; uwIndex < BUFFER_SIZE; uwIndex++)
  18.         {
  19.                 *(__IO uint32_t*) (SDRAM_BANK_ADDR + WRITE_READ_ADDR + 4*uwIndex) = aTxBuffer[uwIndex];
  20.         }

  21.         /* Read back data from the SDRAM memory */
  22.         for (uwIndex = 0; uwIndex < BUFFER_SIZE; uwIndex++)
  23.         {
  24.                 aRxBuffer[uwIndex] = *(__IO uint32_t*) (SDRAM_BANK_ADDR + WRITE_READ_ADDR + 4*uwIndex);
  25.         }

  26.         /*##-3- Checking data integrity ############################################*/

  27.         for (uwIndex = 0; (uwIndex < BUFFER_SIZE) && (uwWriteReadStatus == 0); uwIndex++)
  28.         {
  29.                 if (aRxBuffer[uwIndex] != aTxBuffer[uwIndex])
  30.                 {
  31.                         uwWriteReadStatus++;
  32.                        
  33.                         /* Error */
  34.                 }
  35.         }
  36. }
复制代码


回复

使用道具 举报

27

主题

70

回帖

151

积分

初级会员

积分
151
 楼主| 发表于 2019-5-8 14:36:48 | 显示全部楼层
tsetse 发表于 2019-5-8 14:32
你实际的代码就是这样???

对呀,就是几行测试代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 07:36 , Processed in 0.203651 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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