查看: 4543|回复: 0

[原创] 【野火i.MX RT1052】5.i.Maxrt1052之外部SDRAM(1)

[复制链接]
  • TA的每日心情
    擦汗
    2019-6-26 20:59
  • 签到天数: 235 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2018-6-7 17:34:30 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 小马哥-1650185 于 2018-6-7 18:29 编辑

    本帖测试下rt1052的外部sdram读写功能。
    i.MX RT1052 Mini核心板板载了32MB的NorFlash存储芯片W9825G6KH-6 ,最高频率166M。

    如图所示:

    QQ截图20180607173717.jpg
    sdram初始化分为两种方法,一种是在fire_imxrt1052_sdram_ini_dcd文件中已初始化SDRAM,在系统运行启动文件前SDRAM就已正常初始化,这种初始化方式特别适合于系统启动后就需要SDRAM的应用;另外一种是在main函数中使用SDRAM_Init初始化SDRAM,这种初始化方式 不适合 于系统启动后就需要SDRAM的应用。
    先来看下第一种方法:
    通过 设备配置数据(DCD Data), 初始化SDRAM,系统启动后可以直接使用。

    根据内存映射表可以看到sdram的地址为(0x80000000U)

    QQ截图20180607175708.jpg


    1. #define SDRAM_START_ADDRESS       (0x80000000U)
    2. #define SEMC_CLK_FREQ             CLOCK_GetFreq(kCLOCK_SemcClk)

    3. #define SEMC_EXAMPLE_DATALEN      (0x1000U)
    4. #define SEMC_EXAMPLE_WRITETIMES   (1000U)

    5. #define SDRAM_MEM_LENGTH        32*1024*1024
    复制代码

    首先测试32位数据的读写操作,bool SEMC_SDRAMReadWrite32Bit(void);
    定义一个32位的指针指向sdrm的首地址
    uint32_t *sdram = (uint32_t *)SDRAM_START_ADDRESS; /* SDRAM start address. */
    QQ截图20180607180853.jpg

    然后写入数据
    1. <div>    for (index = 0; index < datalen; index++)</div><div>    {</div><div>        sdram_writeBuffer[index] = index;</div><div>        sdram[index] = sdram_writeBuffer[index];</div><div>    }</div>
    复制代码
    打印写入的数据

    QQ截图20180607181339.jpg

    读取数据:
    1.     for (index = 0; index < datalen; index++)
    2.     {
    3.         sdram_readBuffer[index] = sdram[index];
    4.     }
    复制代码


    打印读取的数据:

    QQ截图20180607181458.jpg

    可以看出写入的数据和读出的数据是一样的,通过程序比较
    1.     while (datalen--)
    2.     {
    3.         if (sdram_writeBuffer[datalen] != sdram_readBuffer[datalen])
    4.         {
    5.             result = false;
    6.             break;
    7.         }
    8.     }
    复制代码
    以及打印结果

    QQ截图20180607181623.jpg

    可是32位数据读写ok!!!
    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
    16位数据读写测试:
    1. static bool SEMC_SDRAMReadWrite16Bit(void);
    复制代码


    定义16位指针指向sdram地址
    1. uint16_t *sdram = (uint16_t *)SDRAM_START_ADDRESS; /* SDRAM start address. */
    复制代码

    写入数据
    1.    /* Prepare data and write to SDRAM. */
    复制代码

    QQ截图20180607182146.jpg

    读出数据
    1.     /* Read data from the SDRAM. */
    2.     for (index = 0; index < datalen; index++)
    3.     {
    4.         sdram_readBuffer[index] = sdram[index];
    5.     }
    复制代码
    QQ截图20180607182231.jpg

    比较结果 QQ截图20180607182258.jpg

    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    8位数据读写测试:
    1. static bool SEMC_SDRAMReadWrite8Bit(void);
    复制代码

    定义8位指针指向sdram地址
    uint8_t *sdram = (uint8_t *)SDRAM_START_ADDRESS; /* SDRAM start address. */

    写入数据
    1.     /* Prepare data and write to SDRAM. */
    2.     for (index = 0; index < datalen; index++)
    3.     {
    4.         sdram_writeBuffer[index] = index % 0x100;
    5.         sdram[index] = sdram_writeBuffer[index];
    6.     }
    复制代码
    QQ截图20180607182650.jpg
    读出数据

    1.     /* Read data from the SDRAM. */
    2.     for (index = 0; index < datalen; index++)
    3.     {
    4.         sdram_readBuffer[index] = sdram[index];
    5.     }
    复制代码

    QQ截图20180607182715.jpg

    比较结果
    QQ截图20180607182739.jpg


    测试ok!~!~!~!

    关于第二种sdram初始化讲解放到下个帖子吧!~!~!~!~!









    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-4-19 18:12 , Processed in 0.110696 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.