硬汉嵌入式论坛

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

[有问必答] STM32L4R9外扩PSRAM速度能达到多少?

[复制链接]

5

主题

8

回帖

23

积分

新手上路

积分
23
发表于 2019-12-27 11:24:37 | 显示全部楼层 |阅读模式
我用FMC外挂了一个PSRAM,但是DMA读写速度只有内部SRAM的十分之一,这个速度是正常的吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107118
QQ
发表于 2019-12-27 11:52:39 | 显示全部楼层
用的那个型号的PSRAM
回复

使用道具 举报

5

主题

8

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2019-12-27 14:09:48 | 显示全部楼层

APS12816G-DRB
回复

使用道具 举报

5

主题

8

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2019-12-27 14:10:08 | 显示全部楼层
eric2013 发表于 2019-12-27 11:52
用的那个型号的PSRAM


APS12816G-DRB
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107118
QQ
发表于 2019-12-27 14:28:25 | 显示全部楼层
看了下手册,这个貌似还是D0-D15的地址和数据线还是复用。
你可以设置DMA为8bit,16bit和32BIT测试下速度,另外就是软件测试下速度

QQ截图20191227142804.png
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2022-2-13 12:40:28 | 显示全部楼层
朋友 我想向你请教一下 STM32L4 + APS12816G-DRB 配置FMC是怎么配置的 第一次用FMC接口,抓出来的时序跟手册上的有点不一样
方便的话 加个QQ491002842交流一下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107118
QQ
发表于 2022-2-14 09:20:16 | 显示全部楼层
itstime 发表于 2022-2-13 12:40
朋友 我想向你请教一下 STM32L4 + APS12816G-DRB 配置FMC是怎么配置的 第一次用FMC接口,抓出来的时序跟手 ...

方便的话,发的配置和接线部分原理图。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2022-2-14 11:19:34 | 显示全部楼层
eric2013 发表于 2022-2-14 09:20
方便的话,发的配置和接线部分原理图。

代码部分:
hsram1.Instance = FMC_NORSRAM_DEVICE;
  hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
  /* hsram1.Init */
  hsram1.Init.NSBank = FMC_NORSRAM_BANK1;
  hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_ENABLE;
  hsram1.Init.MemoryType = FMC_MEMORY_TYPE_PSRAM;
  hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
  hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
  hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_HIGH;
  hsram1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
  hsram1.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
  hsram1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
  hsram1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
  hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_ENABLE;
  hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
  hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
  hsram1.Init.WriteFifo = FMC_WRITE_FIFO_DISABLE;
  hsram1.Init.NBLSetupTime = 0;
  hsram1.Init.PageSize = FMC_PAGE_SIZE_NONE;
  /* Timing */
  Timing.AddressSetupTime = 1;
  Timing.AddressHoldTime = 1;
  Timing.DataSetupTime = 3;
  Timing.DataHoldTime = 0;
  Timing.BusTurnAroundDuration = 7;
  Timing.CLKDivision = 16;
  Timing.DataLatency = 17;
  Timing.AccessMode = FMC_ACCESS_MODE_A;
  /* ExtTiming */

  if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
  {
    Error_Handler( );
  }

  /* USER CODE BEGIN FMC_Init 2 */
       
        LOG_I("HAL_SRAM_Init");
        uint16_t ASP_RCR = 0,ASP_DIDR = 0,ASP_BCR = 0;
//        HAL_SRAM_Read_16b(&hsram1, (uint32_t*)SRAM_ADDR, &ASP_RCR, 1);
//        HAL_SRAM_Read_16b(&hsram1, (uint32_t*)(SRAM_ADDR | APS_BCR_ADDR), &ASP_BCR, 1);
//        HAL_SRAM_Read_16b(&hsram1, (uint32_t*)(SRAM_ADDR | APS_DIDR_ADDR), &ASP_DIDR, 1);
        ASP_RCR = *(__IO uint16_t*)(SRAM_ADDR);
        ASP_DIDR = *(__IO uint16_t*)(SRAM_ADDR | APS_DIDR_ADDR);
        ASP_BCR = *(__IO uint16_t *)(SRAM_ADDR | APS_BCR_ADDR);
       
        LOG_I("ASP_RCR: %4X", ASP_RCR);
        LOG_I("ASP_DIDR: %4X", ASP_DIDR);
        LOG_I("ASP_BCR: %4X", ASP_BCR);
       
        *(__IO uint16_t*)(SRAM_ADDR | APS_DIDR_ADDR) = 0x9D1F;

MCU

MCU

PSRAM

PSRAM

CubeMX

CubeMX
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2022-2-14 11:59:42 | 显示全部楼层
itstime 发表于 2022-2-14 11:19
代码部分:
hsram1.Instance = FMC_NORSRAM_DEVICE;
  hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVI ...

地址:
#define APS_RCR_ADDR                        ((uint32_t)0x00000)
#define APS_BCR_ADDR             ((uint32_t)0x80000)
#define APS_DIDR_ADDR                        ((uint32_t)0x40000)

#define SRAM_ADDR                                        ((uint32_t)0x60000000)
这部分按手册来说应该是 Timing.AccessMode = FMC_ACCESS_MODE_D
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107118
QQ
发表于 2022-2-15 09:59:53 | 显示全部楼层
itstime 发表于 2022-2-14 11:19
代码部分:
hsram1.Instance = FMC_NORSRAM_DEVICE;
  hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVI ...

看着好像没什么问题,你的电压是1.8V控制的?
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2022-2-15 14:22:11 | 显示全部楼层
eric2013 发表于 2022-2-15 09:59
看着好像没什么问题,你的电压是1.8V控制的?

是的,系统是1.8V系统。时序:

之前逻辑分析仪接成3.3 所以看到时序是错的,现在改成1.8V,能够正常读写PSRAM的内存部分
但是读寄存器部分的值有点问题,手册上读BCR = 9D1F

因为最后的PSRAM 想要配置成同步模式来提高读写速率,
在异步模式读写有点慢。
有点没搞懂这个PSRAM的寄存器怎么读写?希望硬汉指点一下
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2022-2-15 16:00:13 | 显示全部楼层
eric2013 发表于 2022-2-15 09:59
看着好像没什么问题,你的电压是1.8V控制的?

代码:
                /*RCR:        0000h
                        BCR:        0001h
                        DIDR:        0002h*/
                /* Read - Read - Write - Read */
                ASP_RCR = *(__IO uint16_t*)(SRAM_ADDR | 0x7FFFFF);
                ASP_RCR = *(__IO uint16_t*)(SRAM_ADDR | 0x7FFFFF);
                *(__IO uint16_t*)(SRAM_ADDR | 0x7FFFFF) = 0x0000;
                ASP_RCR = *(__IO uint16_t*)(SRAM_ADDR | 0x7FFFFF);
                LOG_I("ASP_RCR: %4X", ASP_RCR);
当读写地址MAX时候时序会出现重复一次
就和上面的时序不太一样

配置寄存器这时候选的软件方式(Software Access)

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107118
QQ
发表于 2022-2-15 16:23:28 | 显示全部楼层
itstime 发表于 2022-2-15 14:22
是的,系统是1.8V系统。时序:

之前逻辑分析仪接成3.3 所以看到时序是错的,现在改成1.8V,能够正常读 ...

如果是1.8V的话,你这个怎么保证和你个MCU电平兼容的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107118
QQ
发表于 2022-2-15 16:24:24 | 显示全部楼层
itstime 发表于 2022-2-15 16:00
代码:
                /*RCR:        0000h
                        BCR:        0001h

没有看到你的GPIO配置,可以考虑降低下GPIO的速度等级试试。这个PSRAM是同步时钟控制的读写的。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2022-2-15 16:35:30 | 显示全部楼层
itstime 发表于 2022-2-15 16:00
代码:
                /*RCR:        0000h
                        BCR:        0001h

当只有SRAM_ADDR(0x60000000)时,时序看着正常,但是手册要求访问地址0x7FFFFF(地址映射 SRAM_ADDR | 0x7FFFFF)才能使用软件方式.上面所有情况都能够正常读写内存,只是不能访问寄存器

时序重复一次的情况

时序重复一次的情况

时序不重复,但只有在访问地址0x60000000时

时序不重复,但只有在访问地址0x60000000时

手册软件方式描述

手册软件方式描述
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2022-2-15 16:50:07 | 显示全部楼层
eric2013 发表于 2022-2-15 16:23
如果是1.8V的话,你这个怎么保证和你个MCU电平兼容的。

MCU也是1.8V供电
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2022-2-15 16:56:53 | 显示全部楼层
eric2013 发表于 2022-2-14 09:20
方便的话,发的配置和接线部分原理图。

速度试过了 可以改到GPIO_SPEED_FREQ_HIGH, 但是效果好像是一样的

GPIO的配置

GPIO的配置
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107118
QQ
发表于 2022-2-16 11:24:37 | 显示全部楼层
itstime 发表于 2022-2-15 16:56
速度试过了 可以改到GPIO_SPEED_FREQ_HIGH, 但是效果好像是一样的

所有的速度等级都测试了没,别的问题有必要查查硬件了,确定下焊接什么的。
回复

使用道具 举报

335

主题

2040

回帖

3050

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3050
发表于 2022-2-16 11:33:16 | 显示全部楼层
FMC的速度是差很多的。 因为外部连线的时钟高不起来。。。内部SRAM的时钟等同主频,都是上百兆。 外部的并行线路,一般20兆就差不多到头了。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2022-2-17 09:20:35 | 显示全部楼层
问题已经解决,通过抓取数据线和地址线,发现地址映射出现了问题,感谢硬汉和版主的帮助
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107118
QQ
发表于 2022-2-18 01:07:19 | 显示全部楼层
itstime 发表于 2022-2-17 09:20
问题已经解决,通过抓取数据线和地址线,发现地址映射出现了问题,感谢硬汉和版主的帮助

谢谢告知最终原因。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 14:05 , Processed in 0.352133 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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