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

STM32MP13 操作 DDR 过慢的问题

[复制链接]
dosconio 提问时间:2024-12-3 23:55 / 未解决

处理器:STM32MP135D (单核CA7)

问题现象:操作 DDR 过慢。

一秒才能画(进行)大约 200000~300000 个点(次写操作,尺度为 uint16_t)。速度大约 ??kB/s,但正常情况应该是 ?? MB/s(吧?)。

应用背景:LTDC.LAYER + DDR

例程参考 :STM32Cube_FW_MP13_V1.1.0

映射地址:0xC000'0000

使用DDR:NT5CC256M16EP-EKI DDR3(L) 4Gb SDRAM CL-TRCD-TRP{13-13-13}

手册要求 933MHz Clock

但是STM32MP13x 最高给 DDRC 频率 533MHz

其他外设 LTDC频率 33MHz

CL-TRCD-TRP 为{7-7-7},这个参数不知道怎么配置。

以下为本人时钟树配置信息:

    using namespace RCCReg;
    RCC.canMode();
    PWR.setDBP(true);
    RCC[BDCR].maset(_IMM(_BDCR::LSEDRV), 2, 0b10);
    // OSC PART:  Order: HSE HSI CSI LSI LSE PLL
    uni::RCC.HSE.setMode(false);// no-bypass
    uni::RCC.HSI.setMode(0, 0);// DIV1 and Cali(0x0)
    uni::RCC.CSI.setMode(0x10);
    uni::RCC.LSI.setMode();
    uni::RCC.LSE.setMode(false);// no-bypass

    if (!RCC.PLL1.setModePLL12(PLLMode::Fractional, PLL1Source::HSE,
        .m=3, .n=81, .p=1, .q=2, .r=2, .frac=0x800)) erro();

    if (!RCC.PLL2.setModePLL12(PLLMode::Fractional, PLL2Source::HSE,
        .m=3, .n=66, .p=2, .q=2, .r=1, .frac=5120)) erro();// for 533M DDR

    bool if_range3 = true;
    if (!RCC.PLL3.setModePLL34(PLLMode::Fractional, PLL3Source::HSE, if_range3,
        .m=2, .n=34, .p=2, .q=17, .r=2, .frac=0x1a04)) erro();

    bool if_range4 = true;
    if (!RCC.PLL4.setModePLL34(PLLMode::Fractional, PLL4Source::HSE, if_range4,
        .m=2, .n=38, .p=12, .q=14, .r=6, .frac=4096)) erro();// 33M for LTDC

    bool state = true;

    // BUS PART:  Order: MPU ACLK HCLK PCLK4 PCLK5 PCLK1 PCLK2 PCLK3 PCLK6
    asserv(state) = RCC.Sysclock.setMode(SysclkSource::PLL1, 1);// PLL1 DIV2
    else erro();
    asserv(state) = RCC.AXIS.setMode(AxisSource::PLL2, 1);// PLL2 DIV1
    else erro();
    asserv(state) = RCC.MLAHB.setMode(MLAHBSource::PLL3, 0);// PLL3 DIV1
    else erro();
    // APBs
    RCC.APB4.setMode(1);// PCLK4 RCC_APB4_DIV2
    RCC.APB5.setMode(2);// PCLK5 RCC_APB5_DIV4
    RCC.APB1.setMode(1);// PCLK1 RCC_APB1_DIV2
    RCC.APB2.setMode(1);// PCLK2 RCC_APB2_DIV2
    RCC.APB3.setMode(1);// PCLK3 RCC_APB3_DIV2
    RCC.APB6.setMode(1);// PCLK6 RCC_APB6_DIV2

初始化代码

    __HAL_RCC_CSI_ENABLE() ;
    __HAL_RCC_SYSCFG_CLK_ENABLE() ;
    #if (USE_STPMIC1x) && !defined(USE_DDR)
      BSP_PMIC_Init();
      BSP_PMIC_InitRegulators();
    #endif
      /*##-1- Enable MCE ####################*/
      __HAL_RCC_MCE_CLK_ENABLE();
      /*##-2- TZC configuration ####################*/
      __HAL_RCC_TZC_CLK_ENABLE();
      /* Configure TZC to allow  DDR Region0 R/W  non secure for all IDs */
      TZC->GATE_KEEPER =0;
      TZC->REG_ID_ACCESSO=0xFFFFFFFF;  //Allow DDR Region0 R/W  non secure for all IDs
      TZC->REG_ATTRIBUTESO = 0xC0000001;
      TZC->GATE_KEEPER |=1;  //Enable the access in secure Mode  // filter 0 request close
      /*##-3- Enable ETZPC & BACKUP SRAM for security ####################*/
      __HAL_RCC_ETZPC_CLK_ENABLE();
      __HAL_RCC_BKPSRAM_CLK_ENABLE();
      /*##-4- Unlock debugger ####################*/
      BSEC->BSEC_DENABLE = 0x47f;
      /*##-5- Init DDR ####################*/
      hddr.wakeup_from_standby = false;
      hddr.self_refresh = false;
      hddr.zdata = 0;
      hddr.clear_bkp = false;
      if (HAL_DDR_Init(&hddr) != HAL_OK)
      {
        while(1);
      }

对应配置文件亦有修改:

#ifndef STM32MP13XX_DDR3_4GBIT_H
#define STM32MP13XX_DDR3_4GBIT_H

#define DDR_MEM_NAME "DDR3-1066 bin F 1x4Gb 533MHz v1.53"
#define DDR_MEM_SPEED 533000U
#define DDR_MEM_SIZE (256*1024*1024)//0x20000000U
...
#define DDR_DFITMG0 0x02050105U// 不知道这个需不需要change
...
#define DDR_ADDRMAP6 0x0F0F0707//0x0F070707U
...
#define DDR_MR0 0x00000830U

求助家人们怎么解决这个问题。

❤️

收藏 评论1 发布时间:2024-12-3 23:55

举报

1个回答
dosconio 回答时间:2024-12-4 18:34:01

目前待定原因是,测试读写时SYSRAM的读写速度受限导致的

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版