当前位置:首页 > 技术分析 > 正文内容

嵌入式实操——基于RT1170 使能SEMC配置SDRAM功能(八)

ruisui883个月前 (01-14)技术分析30

本文主要是通过迁移的思维,记录本人初次使用NXP MCUXpresso SDK API进行BSP开发

MCUXpresso SDK SEMC API 接口链接
  在MCUXpresso SDK 框架下提供了对SEMC DDR进行操作的接口。
学习链接:https://community.nxp.com/t5/MCUXpresso-Community-Articles/i-MX-RT-memory-validation/ba-p/1130828

1. 首先阅读原理图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qTWOXGYP-1616410062182)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/6057feda1d181.png)]

DDR芯处使用IS42S32800J-6BLA1从手册上可以看得出来该芯片支持的最大工作时钟为166Mhz.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ySJKUJ2a-1616410062187)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/6057ffa173d6b.png)]

但是从MCU的手册上可以看出其支持的最大速率为200Mhz.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6CBTG5s3-1616410062191)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/60580129bcfb3.png)]

2. SDK api 应用

2.1 引脚配置

引脚复用配置

2.2 时钟配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-75JlQGrZ-1616410062196)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/6058272b304cd.png)]

从上图可以看到时钟源从SYM_PLL2_528Mhz至SYS_PLL2_PFD1(594Mhz)再通过4分频获取148.5MHz的时钟。
相关的配置代码如下所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f82yVIHQ-1616410062201)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/6058267a981aa.png)]

2.3 外设配置

对DDR的初始化,还是需要有前置知识的,了解DDR的工作时钟、时序相关知识,以及初始化的状态机。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rb44zg8B-1616410062204)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/60582a0331852.png)]

进入SEMC DDR的配置界面,如下所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lc7tfEvK-1616410062208)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/60582a2f3707f.png)]



在这里插入图片描述

第一,需要选择DDR的时钟源及其频率

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L13QIjQ7-1616410062210)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/60582b1a49ef6.png)]

第二,需要DDR的数据锁存模式,我们选择DQS模式。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(img-6PpdiigO-1616410062212)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/60582afe564ca.png)]

第三、需要配置片选信号,这个和硬件设计相关

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oBB5pDrd-1616410062214)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/60582b7bc8b18.png)]

第四、需要配置内存的物理起始位置,这个和MCU的地址分配相关。


第五、需要配置内存的容量,和所选的SDRAM芯片容量保持一致。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q5YFmIFn-1616410062218)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/60582c0e1cf83.png)]

第六、配置SDRAM数据线的宽度及突发长度,数据宽度从原理图上可以看出来。突发长度可以从SDRAM手册上找到。




第七、配置列地址线的个数及CAS。列地址线的个数可以从手册上找出来,CAS可以选择2或者3也是在手册上的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OQ2SnkBN-1616410062223)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/60582fb3e39ec.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PdpxZ9Ru-1616410062224)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/60582f1dd4655.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p4jbMJ2h-1616410062226)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/60583026eac64.png)]

第八、预充电(Precharge)至有效(active)的等待时间tRP,在166MHz,从手册上查得该数值>=18




第九、Active Command To Read / Write Command Delay Time (tRCD)



[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qUn0WMOr-1616410062234)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/60583551c0021.png)]

第十、刷新恢复时间 取tRFC/tXSR当中的最大值。





[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q5kHX6uD-1616410062239)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/6058488c43a50.png)]

第十一、写恢复(write recovery)时间 tWR

在这里插入图片描述



在这里插入图片描述

第十二、CKE off minimun time, 一般取tRAS




第十三、active to precharge, 取tRAS



在这里插入图片描述

第十四、self refresh reovery time 自刷新恢复时间,取tXSR




第十五、refresh to refresh wait time 刷新至刷新的等待时间,取tRC.




第十六、active to active wait time 有效至有效的等待时间, 取tRC = tRAS + tRP = tRCD + tWR + tRP


第十七、prescaler timer period, 取160个tCLK时钟周期

160 *  1000000000 / semc_clk = 160 * 1000000000 / 148500000


第十八、sdram idle time 必须小于 tRAS, 而tRAS的最大值为100000ns

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kfv4jMU3-1616410062262)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/605861ba9e04c.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SIgHIUB7-1616410062265)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/60585419c8d2c.png)]

且有一个限制条件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KsOMMcJT-1616410062267)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/605856c4cc5ee.png)]

周期为 tPrescalePeriod_Ns = 160*100000000/semc_clk
ITO* 160  * 1000000000 / 148500000  < 100000,
ITO  < 92.812

ITO取值意义如下,所以我们取[1,92]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Qzfhzhx-1616410062269)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/60585a5b0f6c3.png)]

第十九:refresh timer period /refresh upgent period, 从手册上可以看到刷新4096次,总用耗时64ms,每次的刷新时间为 64*1000000/4096,两者相同值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TYL1SxUl-1616410062270)(http://139.224.41.215:4999/server/../Public/Uploads/2021-03-22/6058610be8c32.png)]

2.4 验证测试

SDRAM 时钟配置成148.5Mhz:

Index: D:/svn/SDK_2.8.0_MIMXRT1170-EAR3/boards/easyarm-rt1170-revb/driver_examples/semc/sdram/cm7/clock_config.c
===================================================================
--- D:/svn/SDK_2.8.0_MIMXRT1170-EAR3/boards/easyarm-rt1170-revb/driver_examples/semc/sdram/cm7/clock_config.c    (revision 7)
+++ D:/svn/SDK_2.8.0_MIMXRT1170-EAR3/boards/easyarm-rt1170-revb/driver_examples/semc/sdram/cm7/clock_config.c    (working copy)
@@ -136,7 +136,7 @@
     CLOCK_InitPfd(kCLOCK_PllSys2, kCLOCK_Pfd1, 16);
     /* Configure Semc using SysPll2Pfd1 divided by 3 */
     rootCfg.mux = kCLOCK_SEMC_ClockRoot_MuxSysPll2Pfd1;
-    rootCfg.div = 3;
+    rootCfg.div = 4;
     CLOCK_SetRootClock(kCLOCK_Root_Semc, &rootCfg);
 #endif

最终针对148.5Mhz时钟的SDRAM配置代码如下所示:

status_t BOARD_InitSEMC(void)
{
    semc_config_t config;
    semc_sdram_config_t sdramconfig;
    uint32_t clockFrq = EXAMPLE_SEMC_CLK_FREQ;

    /* Initializes the MAC configure structure to zero. */
    memset(&config, 0, sizeof(semc_config_t));
    memset(&sdramconfig, 0, sizeof(semc_sdram_config_t));

    /* Initialize SEMC. */
    SEMC_GetDefaultConfig(&config);
    config.dqsMode = kSEMC_Loopbackdqspad; /* For more accurate timing. */
    SEMC_Init(SEMC, &config);

    /* Configure SDRAM. */
    sdramconfig.csxPinMux           = kSEMC_MUXCSX0;
    sdramconfig.address             = 0x80000000;
    sdramconfig.memsize_kbytes      = 32 * 1024; /* 32MB = 32*1024*1KBytes*/
    sdramconfig.portSize            = kSEMC_PortSize32Bit;
    sdramconfig.burstLen            = kSEMC_Sdram_BurstLen8;
    sdramconfig.columnAddrBitNum    = kSEMC_SdramColunm_9bit;
    sdramconfig.casLatency          = kSEMC_LatencyThree;
    sdramconfig.tPrecharge2Act_Ns   = 18; /* Trp 18ns */
    sdramconfig.tAct2ReadWrite_Ns   = 18; /* Trcd 18ns */
    sdramconfig.tRefreshRecovery_Ns = 70; /* Use the maximum of the (Trfc , Txsr). */
    sdramconfig.tWriteRecovery_Ns   = 12; /* 12ns */
    sdramconfig.tCkeOff_Ns =
        42; /* The minimum cycle of SDRAM CLK off state. CKE is off in self refresh at a minimum period tRAS.*/
    sdramconfig.tAct2Prechage_Ns       = 42; /* Tras 42ns */
    sdramconfig.tSelfRefRecovery_Ns    = 70;
    sdramconfig.tRefresh2Refresh_Ns    = 60;
    sdramconfig.tAct2Act_Ns            = 60;
    sdramconfig.tPrescalePeriod_Ns     = 160 * (1000000000 / clockFrq);
    sdramconfig.refreshPeriod_nsPerRow = 64 * 1000000 / 4096; /* 64ms/8192 */
    sdramconfig.refreshUrgThreshold    = sdramconfig.refreshPeriod_nsPerRow;
    sdramconfig.refreshBurstLen        = 1;
    sdramconfig.delayChain             = 2;
   sdramconfig.tIdleTimeout_Ns        = 92;

    return SEMC_ConfigureSDRAM(SEMC, kSEMC_SDRAM_CS0, &sdramconfig, clockFrq);
}

测试结果如下所示:

 SEMC SDRAM Example Start!

 EXAMPLE_SEMC_CLK_FREQ:  148500000 

 SEMC SDRAM Write 32 bit Start, Start Address 0x80000000, Data Length 8388607 !

 SEMC SDRAM Read 32 bit Data Start, Start Address 0x80000000, Data Length 8388607 !

 SEMC SDRAM Write 32 bit Start, Start Address 0x80000001, Data Length 8388607 !

 SEMC SDRAM Read 32 bit Data Start, Start Address 0x80000001, Data Length 8388607 !

 SEMC SDRAM Write 32 bit Start, Start Address 0x80000002, Data Length 8388607 !

 SEMC SDRAM Read 32 bit Data Start, Start Address 0x80000002, Data Length 8388607 !

 SEMC SDRAM Write 32 bit Start, Start Address 0x80000003, Data Length 8388607 !

 SEMC SDRAM Read 32 bit Data Start, Start Address 0x80000003, Data Length 8388607 !

 SEMC SDRAM 32 bit Data Write and Read Compare Succeed!

 SEMC SDRAM Write 16 bit Start, Start Address 0x80000000, Data Length 16777215 !

 SEMC SDRAM Read 16 bit Data Start, Start Address 0x80000000, Data Length 16777215 !

 SEMC SDRAM Write 16 bit Start, Start Address 0x80000001, Data Length 16777215 !

 SEMC SDRAM Read 16 bit Data Start, Start Address 0x80000001, Data Length 16777215 !

 SEMC SDRAM 16 bit Data Write and Read Compare Succeed!

 SEMC SDRAM Memory 8 bit Write Start, Start Address 0x80000000, Data Length 33554432 !

 SEMC SDRAM Read 8 bit Data Start, Start Address 0x80000000, Data Length 33554432 !

 SEMC SDRAM 8 bit Data Write and Read Compare Succeed!

 SEMC SDRAM Example End.

4. 总结

默认DDR工作时钟为198Mhz,本文将其修改为148.5Mz.主要是针对SDRAM各参数如何从芯片中获取,取值的约束条件做了详细说明,至于各参数的具体含义可以从DDR的协议规范当中找到,或者芯片手册当中学到。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/260.html

标签: threebsp
分享给朋友:

“嵌入式实操——基于RT1170 使能SEMC配置SDRAM功能(八)” 的相关文章

Slackware 15.0?发布:历史最久且在维护的Linux发行版本

Slackware 14.0 于 2012 年发布,在经过了数年的等待之后 Slackware 15.0 发行版本于今天正式发布。Slackware 于 1993 年发布,是目前历史最悠久、且仍在维护的 Linux 发行版本。Slackware 15.0 在去年进入测试阶段,在发布几个候选版本之后终...

Linux发行版需要杀软吗?卡巴斯基推出免费KVRT病毒扫描清理工具

IT之家 6 月 4 日消息,你认为使用 Linux 发行版,需要杀毒软件吗?或许很多用户认为 Linux 发行版偏小众,因此受到黑客攻击的风险也相对较小,不过卡巴斯基并不这么认为,近期推出了适用于 Linux 平台的杀毒软件。最新上线的 Linux 版本 Kaspersky Virus Remov...

GitLab-合并请求

描述合并请求可用于在您对项目进行的其他人员之间交换代码,并轻松与他们讨论更改。合并请求的步骤步骤1-在创建新的合并请求之前,GitLab中应该有一个创建的分支。您可以参考本章来创建分支-步骤2-登录到您的GitLab帐户,然后转到“ 项目”部分下的项目 -步骤3-单击“ 合并请求”选项卡,然后单击“...

美国民众负债累累 但今年假期消费者支出仍将创下新高

智通财经APP获悉,在迎接假期之际,许多美国人已经背负了创纪录的信用卡债务。然而,今年假期消费者支出仍将创下新高。根据美国零售联合会(NRF)上周发布的报告,预计今年11月1日至12月31日期间的消费总额将达到创纪录的9795亿至9890亿美元之间。NRF首席经济学家Jack Kleinhenz表示...

HTML5最新版本介绍

HTML5是HTML4.01和XHTML1.0之后超文本标记语言的最新版本,由一群自由思想者设计,最终实现了多媒体支持、交互性、更智能的表单和更好的语义标注。 HTML 5不只是 HTML规范的最新版本,它是用于生成现代 Web内容的一系列相关技术的总称,其中最重要的三个技术是:HTML5核心规范...

2024最新版:前端性能优化方案汇总

前端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~Hello,大家好,我是 Sunday。前端性能优化一直是很多同学非常关注的问题,在日常的面试中也是经常会被问到的点。所以今天咱们就花一点时间来了解一下2024最新的...