FlexSPI driver用法
例程路径:\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用法相关推荐
- 痞子衡嵌入式:其实i.MXRT1050,1020,1015系列ROM也提供了FlexSPI driver API
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1050/1020/1015系列ROM中的FlexSPI驱动API使用. 今天痞子衡去4S店给爱车做保养了,保养一次要等两小 ...
- 痞子衡嵌入式:利用i.MXRT1xxx系列ROM提供的FlexSPI driver API可轻松IAP
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT系列ROM中的FlexSPI驱动API实现IAP. 痞子衡的技术交流群里经常有群友提问: i.MXRT中的FlexSPI驱动 ...
- 小猫爪: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 前 ...
- NXP RT1021应用笔记
1. FlexSPI driver API 1.1 API产生背景 i.MXRT系列都是Flashless(没有内置NVM)的芯片,所以BootROM必不可少.BootROM是个很特殊的东西,本质 ...
- 痞子衡嵌入式:简析i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道. ECC 是 "Error Correc ...
- 痞子衡嵌入式:轻松为i.MXRT设计更新Segger J-Link Flash下载算法文件
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是为i.MXRT设计更新Segger J-Link Flash下载算法文件. 想要在Flash中调试,基本是离不开Flash下载算法的,毕 ...
- Python+Selenium webdriver mange用法-告别手动下载driver
1 使用selenium的webdriver问题 通常使用selenium时候我们需要自己单独去下载对应各浏览器版本的webdriver,并在后期针对不同操作系统(mac.windows.linux) ...
- python+selenium自动化driver.switch_to.frame用法
1.为什么需要有frame? 因为一个页面如果只有一个html,所有内容都要用表格来分是很难而且很丑,所以引进了frame可以将左侧树.右侧内容,顶端导航轻松分开. 那么我们也有应对的方法就是要操作哪 ...
- selenium自动化driver.switch_to.frame用法
iframe的操作switch_to_frame使用方法. 一.frame和iframe区别 Frame与Iframe两者可以实现的功能基本相同,不过Iframe比Frame具有更多的灵活性. fra ...
最新文章
- WordPress Editorial Calendar插件权限安全绕过漏洞
- 【论文阅读----DDI(1)】MUFFIN: multi-scale feature fusion for drug–drug interaction prediction
- 剖析数据库中重要而又常被曲解的概念
- 关于负载均衡的一切:总结与思考
- 余承东:华为腕上穿戴设备市场份额已达全球第一
- 习题2.7 弹球距离 (15 分)
- ajax中get请求url传参数
- 远程办公:如何招聘有自驱力的员工?
- python的哲学内容_python 哲学或者说文化
- ulimit和core文件的使用方法
- 新人必看第一帖,BT3和BT4傻瓜版使用!附:BT4中文版下载
- 百旺如何看是否清卡_百旺开票系统每月清卡怎么操作
- 什么是铠装光纤跳线及它的特点?
- gcc之 -ffunction-sections
- [创业之路-50] :动态股权机制 -5- 创业公司股权分配常见的坑
- Android零基础开发到项目实战
- 【LeetCode】328. Odd Even Linked List 解题报告(Python C++)
- 容器定义存储(CDS)—春江水暖Portworx先知
- 2020年10月linux内核,Windows 10 May 2020现已提供更新,内置Linux内核和Cortana
- 冷冲压工艺缺陷及处理办法,常见产品展开工艺技术归纳
热门文章
- leetcode-125 Valid Palindrome
- Building Apps for Windows Phone 8.1教程下载地址整理
- 在mingw编译环境下为dll添加版本信息
- 济南2021高考成绩查询,@全体济南人:2021夏季高考时间公布!
- php在类方法里面检测错误,是否有任何PHP静态分析器可以检测不存在的类方法调用?...
- mysql大事务commit快_MYSQL事务他快你慢,都是你自己惹的祸
- verilog coding style_韩嫕:坚持coding
- Django中@login_required用法简介
- body属性文本标记和排版标记
- linux下安装apache与php;Apache+PHP+MySQL配置攻略