查看: 6413|回复: 8

[i.MX RT经验分享] 自制RT1176板卡-硬件验证:2.试试SDRAM

[复制链接]
  • TA的每日心情
    慵懒
    2025-5-7 08:45
  • 签到天数: 279 天

    连续签到: 1 天

    [LV.8]以坛为家I

    114

    主题

    1314

    帖子

    29

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    11046

    热心会员

    最后登录
    2025-8-15
    发表于 2021-8-15 23:47:43 | 显示全部楼层 |阅读模式
    本帖最后由 az158 于 2021-8-23 18:41 编辑

    今天试试SDRAM部分好不好使。官方原设计是使用两颗16位TSOP的SDRAM组成32位共计64MB主频可以跑到200MHz这里我因为想要设计的更加小巧就换成了单颗32位BGA封装的SDRAM容量32MB主频可以跑到166MHz,这里硬件改动是比较大的,需要修改例程代码先看一下原理图。
    QQ截图20210815231909.png QQ截图20210815231921.png


    然后对官方提供的SDRAM例程进行修改,使用MCUXpresso Config Tools配合生成部分代码(不知道为什么,MCUXpresso Config Tools无法设置SDRAM为32位,也没有细研究为啥,有知道的大佬可以交流一下)。
    下面贴出主要代码,注意SDRAM外设主频已被降到166以内(下文代码未体现)。
    1. semc_config_t SEMC_config = {
    2.   .dqsMode = kSEMC_Loopbackdqspad,
    3.   .cmdTimeoutCycles = 0U,
    4.   .busTimeoutCycles = 0U,
    5.   .queueWeight = {
    6.     .queueaEnable = true,
    7.     .queueaWeight = {
    8.       .queueaConfig = {
    9.         .qos = 0UL,
    10.         .aging = 0UL,
    11.         .slaveHitSwith = 0UL,
    12.         .slaveHitNoswitch = 0UL
    13.       },
    14.     },
    15.     .queuebEnable = true,
    16.     .queuebWeight = {
    17.       .queuebConfig = {
    18.         .qos = 0UL,
    19.         .aging = 0UL,
    20.         .slaveHitSwith = 0UL,
    21.         .weightPagehit = 0UL,
    22.         .bankRotation = 0UL
    23.       },
    24.     }
    25.   }
    26. };
    27. semc_sdram_config_t SEMC_sdram_struct = {
    28.   .csxPinMux = kSEMC_MUXCSX0,
    29.   .address = 0x80000000UL,
    30.   .memsize_kbytes = 32768,
    31.   .portSize = kSEMC_PortSize16Bit,
    32.   .burstLen = kSEMC_Sdram_BurstLen8,
    33.   .columnAddrBitNum = kSEMC_SdramColunm_9bit,
    34.   .casLatency = kSEMC_LatencyThree,
    35.   .tPrecharge2Act_Ns = 18U,
    36.   .tAct2ReadWrite_Ns = 18U,
    37.   .tRefreshRecovery_Ns = 127U,
    38.   .tWriteRecovery_Ns = 12U,
    39.   .tCkeOff_Ns = 42U,
    40.   .tAct2Prechage_Ns = 42U,
    41.   .tSelfRefRecovery_Ns = 67U,
    42.   .tRefresh2Refresh_Ns = 60U,
    43.   .tAct2Act_Ns = 60U,
    44.   .tPrescalePeriod_Ns = 160UL,
    45.   .tIdleTimeout_Ns = 91UL,
    46.   .refreshPeriod_nsPerRow = 64UL,
    47.   .refreshUrgThreshold = 64UL,
    48.   .refreshBurstLen = 1U,
    49.   .delayChain = 0U
    50. };
    51. status_t BOARD_InitSEMC(void)
    52. {
    53.     semc_config_t config;
    54.     semc_sdram_config_t sdramconfig;
    55.     uint32_t clockFrq = EXAMPLE_SEMC_CLK_FREQ;

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

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

    63.     /* Configure SDRAM. */
    64.     sdramconfig.csxPinMux           = kSEMC_MUXCSX0;
    65.     sdramconfig.address             = 0x80000000;
    66.     sdramconfig.memsize_kbytes      = 32 * 1024; /* 32MB = 32*1024*1KBytes*/
    67.     sdramconfig.portSize            = kSEMC_PortSize32Bit;
    68.     sdramconfig.burstLen            = kSEMC_Sdram_BurstLen8;
    69.     sdramconfig.columnAddrBitNum    = kSEMC_SdramColunm_9bit;
    70.     sdramconfig.casLatency          = kSEMC_LatencyThree;
    71.     sdramconfig.tPrecharge2Act_Ns   = 18; /* Trp 18ns */
    72.     sdramconfig.tAct2ReadWrite_Ns   = 18; /* Trcd 18ns */
    73.     sdramconfig.tRefreshRecovery_Ns = 70; /* Use the maximum of the (Trfc , Txsr). */
    74.     sdramconfig.tWriteRecovery_Ns   = 12; /* 12ns */
    75.     sdramconfig.tCkeOff_Ns =
    76.         42; /* The minimum cycle of SDRAM CLK off state. CKE is off in self refresh at a minimum period tRAS.*/
    77.     sdramconfig.tAct2Prechage_Ns       = 42; /* Tras 42ns */
    78.     sdramconfig.tSelfRefRecovery_Ns    = 70;
    79.     sdramconfig.tRefresh2Refresh_Ns    = 60;
    80.     sdramconfig.tAct2Act_Ns            = 60;
    81.     sdramconfig.tPrescalePeriod_Ns     = 160 * (1000000000 / clockFrq);
    82.     sdramconfig.refreshPeriod_nsPerRow = 64 * 1000000 / 4096; /* 64ms/8192 */
    83.     sdramconfig.refreshUrgThreshold    = sdramconfig.refreshPeriod_nsPerRow;
    84.     sdramconfig.refreshBurstLen        = 1;
    85.     sdramconfig.delayChain             = 2;
    86.    sdramconfig.tIdleTimeout_Ns        = 92;

    87.     return SEMC_ConfigureSDRAM(SEMC, kSEMC_SDRAM_CS0, &sdramconfig, clockFrq);
    88. }</font>
    复制代码

    运行效果,看到这一排Succeed太舒服了。没翻车,nice。
    QQ截图20210815232537.png

    最后补充一下,因为SDRAM部分占用引脚实在过多,而且SDRAM高16位数据线引脚的电源域(EMC2)是独立的(这点设计要给NXP工程师点赞,太贴心了)。有需求更多引脚的情况,可以使用单颗16位的SDRAM,这样可以空出更多的io用作他用。






    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3916

    主题

    7534

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    39870
    最后登录
    2025-8-15
    发表于 2021-8-16 08:59:38 | 显示全部楼层
    这么晚还在搞
    qiandao qiandao
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-5-7 08:45
  • 签到天数: 279 天

    连续签到: 1 天

    [LV.8]以坛为家I

    114

    主题

    1314

    帖子

    29

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    11046

    热心会员

    最后登录
    2025-8-15
     楼主| 发表于 2021-8-16 09:00:19 | 显示全部楼层

    周六,周天白天都在睡觉
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3916

    主题

    7534

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    39870
    最后登录
    2025-8-15
    发表于 2021-8-16 09:12:34 | 显示全部楼层
    az158 发表于 2021-8-16 09:00
    周六,周天白天都在睡觉

    乖乖类,针不戳!
    qiandao qiandao
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 22:36
  • 签到天数: 1866 天

    连续签到: 9 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112688
    最后登录
    2025-8-14
    发表于 2021-8-16 09:14:26 | 显示全部楼层
    厉害,真不错~~·
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-5-23 06:13
  • 签到天数: 1082 天

    连续签到: 1 天

    [LV.10]以坛为家III

    18

    主题

    1974

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    6193
    最后登录
    2025-8-14
    发表于 2021-9-2 11:26:10 | 显示全部楼层
    6666666666
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2022-7-6 16:50
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    2

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    33
    最后登录
    2022-9-14
    发表于 2022-7-11 18:37:27 | 显示全部楼层
    请教一下,有两块SDRAM是32bit的,怎么配置成16bit,只使用一块呀
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-5-7 08:45
  • 签到天数: 279 天

    连续签到: 1 天

    [LV.8]以坛为家I

    114

    主题

    1314

    帖子

    29

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    11046

    热心会员

    最后登录
    2025-8-15
     楼主| 发表于 2022-7-12 15:41:34 | 显示全部楼层
    eefocus_3859411 发表于 2022-7-11 18:37
    请教一下,有两块SDRAM是32bit的,怎么配置成16bit,只使用一块呀

    就初始化16bit模式就行了啊
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    新手上路

    Rank: 1

    积分
    7
    最后登录
    2022-10-27
    发表于 2022-10-27 15:36:52 | 显示全部楼层
    大神有没有兴趣接外单?18670375625 RT1176开发
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-16 03:01 , Processed in 0.103403 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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