当前位置: 首页 > news >正文

flexspi 基础结构体分析

 /*! @brief FLEXSPI 初始化配置结构体 */typedef struct _flexspi_config {/*!< 选择读取 FLASH 使用的采样时钟源 */flexspi_read_sample_clock_t rxSampleClock;/*!< 是否使能 SCK 自由运行输出 */bool enableSckFreeRunning;/*!< 是否使能 PORT A 和 PORT B 的数据引脚组合 (SIOA[3:0] 和 SIOB[3:0]) 以支持FLASH 的 8 位模式 */bool enableCombination;/*!< 是否使能 doze 模式 */bool enableDoze;/*!< 是否使能 为半速率命令而对时钟 2 分频 的功能 */bool enableHalfSpeedAccess;/*!< 是否使能 SCKB 用作 SCKA 的差分时钟,当使能时, PORT B 的 FLASH 无法访问 */bool enableSckBDiffOpt;/*!< 是否使能对所有连接的设备使用同样的配置,当使能时,FLSHA1CRx 寄存器的配置会应用到所有设备 */bool enableSameConfigForAll;/*!< 命令序列执行的等待超时周期, ahbGrantTimeoutCyle*1024 个串行根时钟周期后超时 */uint16_t seqTimeoutCycle;/*!< IP 命令授予等待超时周期, ipGrantTimeoutCycle*1024 个 AHB 时钟周期后超时  */uint8_t ipGrantTimeoutCycle;/*!< FLEXSPI IP 发送水印值 */uint8_t txWatermark;/*!< FLEXSPI 接收水印值 */uint8_t rxWatermark;struct {/*!< 使能 AHB 总线对 IP TX FIFO 的写访问 */bool enableAHBWriteIpTxFifo;/*!< 使能 AHB 总线对 IP RX FIFO 的写访问 */bool enableAHBWriteIpRxFifo;/*!< AHB 命令授予等待超时周期,在 ahbGrantTimeoutCyle*1024 个 AHB 时钟周期后超时 */uint8_t ahbGrantTimeoutCycle;/*!< AHB 读写访问超时周期, ahbBusTimeoutCycle*1024 个 AHB 时钟后超时 */uint16_t ahbBusTimeoutCycle;/*!< 在暂停命令序列恢复之前空闲状态的等待周期, ahbBusTimeoutCycle 个 AHB时钟后超时 */uint8_t resumeWaitCycle;/*!< AHB 缓冲区信息 */flexspi_ahbBuffer_config_t buffer[FSL_FEATURE_FLEXSPI_AHB_BUFFER_COUNT];/*!< 是否使能当 FLEXSPI 返回停止模式响应时自动清除 AHB RX 和 TX 缓冲 */bool enableClearAHBBufferOpt;/*!< 是否使能 AHB 预读取特性,当使能时, FLEXSPI 会读取比当前 AHB 突发读取更多的数据 */bool enableAHBPrefetch;/*!< 是否使能 AHB 缓冲写访问的功能,当使能时, FLEXSPI 会在等待命令执行完成前就返回 */bool enableAHBBufferable;/*!< 是否使能 AHB 总线缓冲读访问的功能 */bool enableAHBCachable;} ahbConfig;} flexspi_config_t;

1. flexspi_read_sample_clock_t rxSampleClock​

  • 功能:指定 FLEXSPI 读取 FLASH 数据时的采样时钟源,直接影响数据接收的稳定性,是高速通讯的关键配置。​
  • 参数类型:枚举类型(flexspi_read_sample_clock_t),常见枚举值包括:​
  • kFLEXSPI_ReadSampleClk_LoopbackFromDqsPad:从 DQS 引脚回环采样(适用于带 DQS 引脚的高速 FLASH,如 Octal SPI FLASH);​
  • kFLEXSPI_ReadSampleClk_LoopbackFromSckPad:从 SCK 引脚回环采样(适用于普通 SPI FLASH,通过 SCK 时钟同步采样);​
  • kFLEXSPI_ReadSampleClk_ExternalInputFromDqsPad:外部输入采样时钟(从 DQS 引脚接入外部时钟,特殊场景使用)。​

2. bool enableSckFreeRunning​

  • 功能:控制 SCK 时钟是否 “自由运行”(即 CS 信号无效时,SCK 是否持续输出时钟)。​
  • true:CS 无效时 SCK 仍持续运行,可减少时钟启停的延迟,提升连续数据传输效率(适用于高频次、连续的 FLASH 操作,如固件升级);​
  • false:CS 无效时 SCK 立即停止,降低功耗(适用于低功耗场景,如电池供电设备)。​

3. bool enableCombination​

  • 功能:使能 PORT A 与 PORT B 的数据引脚组合,以支持 FLASH 的 8 位模式(如 “4+4” 引脚组合的 8 位 SPI 模式)。​
  • true:启用 SIOA [3:0](PORT A)与 SIOB [3:0](PORT B)引脚组合,数据总线宽度扩展至 8 位,传输速率翻倍;​
  • false:仅使用单 PORT 引脚(如仅 SIOA [3:0]),支持 1/2/4 位模式。​
  • 注意事项:需 FLASH 硬件支持 8 位模式,且 MCU 引脚需正确配置为 FLEXSPI 功能;启用后 PORT B 无法再用于其他外设。​

4. bool enableDoze​

  • 功能:控制 FLEXSPI 在 MCU 进入 “Doze 模式”(休眠的一种,核心时钟降低但外设可运行)时是否继续工作。​
  • true:Doze 模式下 FLEXSPI 保持运行,可继续处理 FLASH 数据(适用于需后台刷新数据的场景);​
  • false:Doze 模式下 FLEXSPI 暂停,降低整体功耗。​

5. bool enableHalfSpeedAccess​

  • 功能:使能 “半速率命令” 功能,即对特定命令的时钟进行 2 分频。​
  • true:执行指定命令(如 FLASH 的擦除、写命令)时,SCK 时钟自动减半,提升低速命令的稳定性(部分 FLASH 的擦写命令对时钟频率敏感);​
  • false:所有命令使用相同的 SCK 时钟频率。​

6. bool enableSckBDiffOpt​

  • 功能:将 SCKB 引脚配置为 SCKA 的差分时钟,用于高速差分通讯。​
  • true:SCKA 为差分时钟正端,SCKB 为负端,抗干扰能力增强(适用于长距离、高速传输场景);​
  • false:SCKA、SCKB 独立作为普通 SCK 时钟,分别驱动不同 PORT 的 FLASH。​
  • 限制:启用后 PORT B 的 FLASH 无法访问,因为 SCKB 被占用为差分时钟。​

7. bool enableSameConfigForAll​

  • 功能:控制是否对所有连接的 FLEXSPI 设备使用相同的配置。​
  • true:仅需配置FLSHA1CRx寄存器,配置自动应用到所有 FLEXSPI 设备(适用于多设备型号、参数完全一致的场景);​
  • false:需为每个设备单独配置对应的FLSHAxCRx寄存器(适用于多设备型号不同的场景)。​

8. uint16_t seqTimeoutCycle​

  • 功能:设置命令序列执行的超时周期,防止因 FLASH 异常导致 FLEXSPI 卡死。​
  • 计算方式:超时时间 = seqTimeoutCycle * 1024 个串行根时钟周期。​
  • 例:串行根时钟为 100MHz(周期 10ns),seqTimeoutCycle=10时,超时时间 = 10102410ns=102.4μs。​

9. uint8_t ipGrantTimeoutCycle​

  • 功能:设置 FLEXSPI IP 核申请总线权限的超时周期,防止总线仲裁死锁。​
  • 计算方式:超时时间 = ipGrantTimeoutCycle * 1024 个AHB 时钟周期。​
  • 作用:当 FLEXSPI 向 AHB 总线申请访问权限时,若超过该时间未获得权限,将触发超时中断,避免无限等待。​

10. uint8_t txWatermark/uint8_t rxWatermark​

  • 功能:设置 FLEXSPI 发送 / 接收 FIFO 的 “水印阈值”,用于触发 FIFO 中断。​
  • txWatermark:当发送 FIFO 中的数据量≤该阈值时,触发发送 FIFO 空中断(提示需补充数据);​
  • rxWatermark:当接收 FIFO 中的数据量≥该阈值时,触发接收 FIFO 满中断(提示需读取数据)。​

二、嵌套结构体ahbConfig(AHB 总线接口配置)​

ahbConfig子结构体专门配置 FLEXSPI 与 AHB 总线的交互参数,AHB 是 MCU 内部高速总线,FLEXSPI 通过 AHB 接口与 CPU、DMA 等核心单元通讯。​

1. bool enableAHBWriteIpTxFifo/bool enableAHBWriteIpRxFifo​

  • 功能:允许 AHB 总线直接读写 FLEXSPI 的发送 / 接收 FIFO(默认仅 FLEXSPI IP 核可访问 FIFO)。​
  • true:AHB 总线(如 CPU、DMA)可直接向发送 FIFO 写数据,或从接收 FIFO 读数据,提升数据传输效率(适用于 DMA 驱动的高速数据传输);​
  • false:仅 FLEXSPI IP 核可访问 FIFO,安全性更高但灵活性降低。​

2. uint8_t ahbGrantTimeoutCycle​

  • 功能:设置 AHB 总线申请 FLEXSPI 访问权限的超时周期,与ipGrantTimeoutCycle对应,解决总线双向仲裁的超时问题。​
  • 计算方式:超时时间 = ahbGrantTimeoutCycle * 1024 个AHB 时钟周期。​

3. uint16_t ahbBusTimeoutCycle​

  • 功能:设置 AHB 总线与 FLEXSPI 交互的超时周期,防止 FLEXSPI 响应异常导致 AHB 总线阻塞。​
  • 计算方式:超时时间 = ahbBusTimeoutCycle * 1024 个AHB 时钟周期。​
  • 应用场景:当 FLEXSPI 因 FLASH 故障无法响应 AHB 请求时,超过该时间将触发总线超时,保护 CPU 不被卡死。​

4. uint8_t resumeWaitCycle​

  • 功能:设置 FLEXSPI 从 “命令暂停状态” 恢复时的等待周期,用于稳定总线时序。​
  • 作用:当 FLEXSPI 暂停命令执行(如响应 AHB 中断)后,恢复执行前需等待指定 AHB 时钟周期,确保 FLASH 与总线时序同步。​
  • 配置建议:高频 AHB 总线(如 200MHz 以上)建议设为 2~4 个周期,低频总线可设为 1 个周期。​

5. flexspi_ahbBuffer_config_t buffer[FSL_FEATURE_FLEXSPI_AHB_BUFFER_COUNT]​

  • 功能:AHB 缓冲区配置数组,FSL_FEATURE_FLEXSPI_AHB_BUFFER_COUNT为 MCU 支持的 AHB 缓冲区数量(通常为 2~4 个),每个缓冲区通过flexspi_ahbBuffer_config_t结构体配置。​
  • 配套结构体flexspi_ahbBuffer_config_t核心成员(通常包含):​
  • bufferSize:缓冲区大小(单位:字节);​
  • bufferAddr:缓冲区在 AHB 总线上的地址;​
  • enableBuffer:是否启用该缓冲区。​
  • 作用:通过多缓冲区并行处理 AHB 读写请求,减少总线等待时间,提升高速数据传输效率(如 Octal SPI FLASH 的固件加载)。​

6. bool enableClearAHBBufferOpt​

  • 功能:当 FLEXSPI 返回 “停止模式响应”(如 FLASH 进入低功耗停止模式)时,自动清除 AHB 接收 / 发送缓冲区。​
  • true:自动清除缓冲区,避免残留数据导致后续操作错误;​
  • false:需手动清除缓冲区,适用于需保留中间数据的场景。​

7. bool enableAHBPrefetch​

  • 功能:使能 AHB 预读取特性,提升连续读取效率。​
  • true:FLEXSPI 会自动读取比当前 AHB 突发读取更多的数据(如 CPU 请求读取 4 字节,FLEXSPI 预读取 8 字节),并缓存到 AHB 缓冲区,后续 CPU 读取时可直接从缓冲区获取,减少 FLASH 访问次数;​
  • false:仅读取 CPU 明确请求的数据,适用于随机读取场景。​

8. bool enableAHBBufferable/bool enableAHBCachable​

  • 功能:配置 AHB 总线的 “缓冲” 与 “缓存” 属性,是 AHB 总线协议的标准配置:​
  • enableAHBBufferable:true时,AHB 写操作可通过总线缓冲器批量执行(而非立即写入 FLEXSPI),提升 CPU 效率;​
  • enableAHBCachable:true时,AHB 读操作的数据可缓存到 CPU 缓存中,后续相同地址读取无需访问 FLEXSPI,降低延迟。​

文章转载自:

http://4tOeRVmB.dhqzc.cn
http://M9SEAVoO.dhqzc.cn
http://PfcCvT3X.dhqzc.cn
http://XoC5x2Ej.dhqzc.cn
http://6Lx7QzQ2.dhqzc.cn
http://kJmlSpVW.dhqzc.cn
http://wzFQQQ3i.dhqzc.cn
http://OX21AKdQ.dhqzc.cn
http://iLp2gfuU.dhqzc.cn
http://Bfhhhenm.dhqzc.cn
http://MKT3585s.dhqzc.cn
http://IrVW7aIE.dhqzc.cn
http://XS6pJZ2D.dhqzc.cn
http://XErCKU6v.dhqzc.cn
http://70ipXvMt.dhqzc.cn
http://ZeU9NikD.dhqzc.cn
http://KKBCI8om.dhqzc.cn
http://Dec83ofY.dhqzc.cn
http://rZ7WHJsa.dhqzc.cn
http://5u0jimdg.dhqzc.cn
http://RZKI13u4.dhqzc.cn
http://9vSXbGPE.dhqzc.cn
http://Nh76iWpC.dhqzc.cn
http://lMo4IGIL.dhqzc.cn
http://Rs89SGAm.dhqzc.cn
http://bR3Ka0QG.dhqzc.cn
http://ZFOvTAHe.dhqzc.cn
http://ej94XWRb.dhqzc.cn
http://aoFNezUb.dhqzc.cn
http://4W9jQ4VD.dhqzc.cn
http://www.dtcms.com/a/372565.html

相关文章:

  • A - 2x2 Erasing
  • 栈欺骗技术的作用是什么?
  • 细说分布式ID
  • nginx自动剔除与恢复
  • tmi8150B控制ir_cut
  • 【期末复习】嵌入式——S5PV210开发板
  • 基于brpc的轻量级服务注册中心设计与实现
  • 作用域報錯
  • 代码随想录学习摘抄day7(二叉树11-21)
  • 固态硬盘——M.2接口技术
  • 数字化浪潮下,传统加工厂如何智能化转型?
  • Miniflux – RSS 订阅
  • Nginx主配置文件
  • 架构进阶——解读121页IT规划咨询项目规划报告【附全文阅读】
  • 大模型显存占用量换算
  • Compose笔记(五十)--stickyHeader
  • WebGIS三维可视化 + 数据驱动:智慧煤仓监控系统如何破解煤炭仓储行业痛点
  • 刷题集(1)
  • 别墅装修的价钱如何估算?
  • Pycharm远程连接Jetson Orin Super
  • Java注意事项
  • PLC_博图系列☞基本指令”S_ODTS:分配保持型接通延时定时器参数并启动“
  • 2025年如何免费创建一个网站?
  • Linux驱动开发(1)概念、环境与代码框架
  • 3种XSS攻击简单案例
  • Windows存储IOPS的预测性扩容
  • 模式组合应用-装饰器模式
  • 【数据结构与算法Trip第1站】基本介绍
  • Dockerfile解析器指令(Parser Directive)指定语法版本,如:# syntax=docker/dockerfile:1
  • Docker命令(全)