例程路径:\SDK_2.10.0_MIMXRT1170-EVK\boards\evkmimxrt1170\driver_examples\flexspi\nor\polling_transfer\cm7\iar
3.1 初始化
  先来看一下 FlexSPI 初始化函数 flexspi_nor_flash_init(),这个函数需要三个配置变量:分别是 flexspi_config_t 型面向 FlexSPI 外设层的配置 flexspiconfig,flexspi_device_config_t 型面向 Flash 器件端的配置 deviceconfig,以及很核心的 customLUT(这里只列出了跟 Flash 写操作相关的时序)。

#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE        2
#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD   4
#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG      12

#define CUSTOM_LUT_LENGTH        60
const uint32_t customLUT[CUSTOM_LUT_LENGTH] = {
    /* Write Enable */
    [4 * NOR_CMD_LUT_SEQ_IDX_WRITEENABLE] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x06, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

/* Page Program - quad mode */
    [4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x32, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
    [4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD + 1] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_4PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

/* Read status register */
    [4 * NOR_CMD_LUT_SEQ_IDX_READSTATUSREG] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x05, kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04),
};

flexspi_device_config_t deviceconfig = {
    .flexspiRootClk       = 12000000,
    .flashSize            = 0x4000, /* 16Mb/KByte */
    .CSIntervalUnit       = kFLEXSPI_CsIntervalUnit1SckCycle,
    .CSInterval           = 2,
    .CSHoldTime           = 3,
    .CSSetupTime          = 3,
    .dataValidTime        = 0,
    .columnspace          = 0,
    .enableWordAddress    = 0,
    .AWRSeqIndex          = 0,
    .AWRSeqNumber         = 0,
    .ARDSeqIndex          = NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD,
    .ARDSeqNumber         = 1,
    .AHBWriteWaitUnit     = kFLEXSPI_AhbWriteWaitUnit2AhbCycle,
    .AHBWriteWaitInterval = 0,
};

void flexspi_nor_flash_init(FLEXSPI_Type *base)
{
    CLOCK_SetRootClockDiv(kCLOCK_Root_Flexspi1, 2);
    CLOCK_SetRootClockMux(kCLOCK_Root_Flexspi1, 0);

/*Get FLEXSPI default settings and configure the flexspi. */
    flexspi_config_t flexspiconfig;
    FLEXSPI_GetDefaultConfig(&flexspiconfig);

/*Set AHB buffer size for reading data through AHB bus. */
    flexspiconfig.ahbConfig.enableAHBPrefetch    = true;
    flexspiconfig.ahbConfig.enableAHBBufferable  = true;
    flexspiconfig.ahbConfig.enableReadAddressOpt = true;
    flexspiconfig.ahbConfig.enableAHBCachable    = true;
    flexspiconfig.rxSampleClock                  = kFLEXSPI_ReadSampleClkLoopbackFromDqsPad;
    FLEXSPI_Init(base, &flexspiconfig);

/* Configure flash settings according to serial flash feature. */
    FLEXSPI_SetFlashConfig(base, &deviceconfig, kFLEXSPI_PortA1);

/* Update LUT table. */
    FLEXSPI_UpdateLUT(base, 0, customLUT, CUSTOM_LUT_LENGTH);

/* Do software reset. */
    FLEXSPI_SoftwareReset(base);
}

FlexSPI driver用法相关推荐

  1. 痞子衡嵌入式:其实i.MXRT1050,1020,1015系列ROM也提供了FlexSPI driver API

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1050/1020/1015系列ROM中的FlexSPI驱动API使用. 今天痞子衡去4S店给爱车做保养了,保养一次要等两小 ...

  2. 痞子衡嵌入式:利用i.MXRT1xxx系列ROM提供的FlexSPI driver API可轻松IAP

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT系列ROM中的FlexSPI驱动API实现IAP. 痞子衡的技术交流群里经常有群友提问: i.MXRT中的FlexSPI驱动 ...

  3. 小猫爪:i.MX RT1050学习笔记15-FlexSPI-FLASH使用3-KEIL FLASH算法中的使用

    小猫爪:i.MX RT1050学习笔记15-FlexSPI-FLASH使用3-KEIL FLASH算法中的使用 1 前言 2 FLASH算法解析 2.1 初始化Init 2.2 写操作 END 1 前 ...

  4. NXP RT1021应用笔记

    1. FlexSPI driver API 1.1 API产生背景 ​ i.MXRT系列都是Flashless(没有内置NVM)的芯片,所以BootROM必不可少.BootROM是个很特殊的东西,本质 ...

  5. 痞子衡嵌入式:简析i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道. ECC 是 "Error Correc ...

  6. 痞子衡嵌入式:轻松为i.MXRT设计更新Segger J-Link Flash下载算法文件

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是为i.MXRT设计更新Segger J-Link Flash下载算法文件. 想要在Flash中调试,基本是离不开Flash下载算法的,毕 ...

  7. Python+Selenium webdriver mange用法-告别手动下载driver

    1 使用selenium的webdriver问题 通常使用selenium时候我们需要自己单独去下载对应各浏览器版本的webdriver,并在后期针对不同操作系统(mac.windows.linux) ...

  8. python+selenium自动化driver.switch_to.frame用法

    1.为什么需要有frame? 因为一个页面如果只有一个html,所有内容都要用表格来分是很难而且很丑,所以引进了frame可以将左侧树.右侧内容,顶端导航轻松分开. 那么我们也有应对的方法就是要操作哪 ...

  9. selenium自动化driver.switch_to.frame用法

    iframe的操作switch_to_frame使用方法. 一.frame和iframe区别 Frame与Iframe两者可以实现的功能基本相同,不过Iframe比Frame具有更多的灵活性. fra ...

最新文章

  1. WordPress Editorial Calendar插件权限安全绕过漏洞
  2. 【论文阅读----DDI(1)】MUFFIN: multi-scale feature fusion for drug–drug interaction prediction
  3. 剖析数据库中重要而又常被曲解的概念
  4. 关于负载均衡的一切:总结与思考
  5. 余承东:华为腕上穿戴设备市场份额已达全球第一
  6. 习题2.7 弹球距离 (15 分)
  7. ajax中get请求url传参数
  8. 远程办公:如何招聘有自驱力的员工?
  9. python的哲学内容_python 哲学或者说文化
  10. ulimit和core文件的使用方法
  11. 新人必看第一帖,BT3和BT4傻瓜版使用!附:BT4中文版下载
  12. 百旺如何看是否清卡_百旺开票系统每月清卡怎么操作
  13. 什么是铠装光纤跳线及它的特点?
  14. gcc之 -ffunction-sections
  15. [创业之路-50] :动态股权机制 -5- 创业公司股权分配常见的坑
  16. Android零基础开发到项目实战
  17. 【LeetCode】328. Odd Even Linked List 解题报告(Python C++)
  18. 容器定义存储(CDS)—春江水暖Portworx先知
  19. 2020年10月linux内核,Windows 10 May 2020现已提供更新,内置Linux内核和Cortana
  20. 冷冲压工艺缺陷及处理办法,常见产品展开工艺技术归纳

热门文章

  1. leetcode-125 Valid Palindrome
  2. Building Apps for Windows Phone 8.1教程下载地址整理
  3. 在mingw编译环境下为dll添加版本信息
  4. 济南2021高考成绩查询,@全体济南人:2021夏季高考时间公布!
  5. php在类方法里面检测错误,是否有任何PHP静态分析器可以检测不存在的类方法调用?...
  6. mysql大事务commit快_MYSQL事务他快你慢,都是你自己惹的祸
  7. verilog coding style_韩嫕:坚持coding
  8. Django中@login_required用法简介
  9. body属性文本标记和排版标记
  10. linux下安装apache与php;Apache+PHP+MySQL配置攻略