.. _ip_ls_intf_gmc: GMC ==== 1. 简介 >>>>>>> 通用存储器控制器 (GMC) 包含两类存储器控制器: * NOR/PSRAM 存储器控制器 * 同步 DRAM (SDRAM/移动 LPSDR SDRAM) 控制器 2. 主要特性 >>>>>>>>>>> GMC 功能块与以下设备接口:同步和异步静态存储器、SDRAM 存储器。其主要目的是: * 将总线事务转换为适当的外部设备协议 * 满足外部存储器设备的访问时间要求 所有外部存储器与控制器共享地址、数据和控制信号。每个外部设备通过唯一的片选信号进行访问。GMC 一次仅对一个外部设备执行访问。 GMC 控制器的主要特性如下: * 与静态存储器映射设备接口,包括: - 静态随机存取存储器 (SRAM) - NOR Flash 存储器 / OneNAND Flash 存储器 - PSRAM (4 个存储体) * 与同步 DRAM (SDRAM/移动 LPSDR SDRAM) 存储器接口 * 支持突发模式,以更快地访问同步设备,如 NOR Flash 存储器、PSRAM 和 SDRAM * 可编程的连续时钟输出,用于异步和同步访问 * 8位、16位或32位宽数据总线 * 每个存储体独立的片选控制 3. 功能描述 >>>>>>>>>>> GMC 由以下主要模块组成: * NOR Flash/PSRAM/SRAM 控制器。 * SDRAM 控制器。 * ICB 接口。 模块框图如图所示: .. _GMC 模块框图如图: .. figure:: /assets/images/gmc_block.png :alt: GMC 模块框图如图 :align: center **图 3.1: GMC 模块框图** ICB 接口 ----------- ICB 从接口允许内部 CPU 和其他总线主设备外设访问外部存储器。 ICB 事务被转换为外部设备协议。由于 ICB 数据总线为 32 位宽,ICB 事务可能会根据数据访问大小拆分为几个连续的 16 位或 8 位访问。GMC 片选信号 (GMC_NEx) 在连续访问之间不会切换。 当满足以下条件之一时,GMC 会产生 ICB 从设备错误: * 读取或写入未启用的 GMC 存储体(Bank 1 到 4)。 * 在 GMC_BCRx 寄存器中的 FACCEN 位被复位时,读取或写入 NOR Flash 存储体。 * 写入写保护的 SDRAM 存储体(SDRAM_SDCRx 寄存器中设置了 WE 位)。 * 违反 SDRAM 地址范围(访问保留地址范围)。 * 在 SDRAM 存储体尚未初始化时尝试进行读/写访问。 支持的存储器与事务 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 请求的 ICB 事务数据大小可以是 8 位、16 位或 32 位宽,而访问的外部设备具有固定的数据宽度。ICB 事务大小取决于存储器区域的 MPU 属性。这可能导致不一致的传输。 因此,可以根据 ICB 事务大小与存储器数据大小的关系遵循一些简单的事务规则: * ICB 事务大小和存储器数据大小相等,以防止问题发生。 * ICB 事务大小大于存储器数据大小:在这种情况下,GMC 将 ICB 事务拆分为更小的连续存储器访问,以满足外部数据宽度。 * ICB 事务大小小于存储器数据大小。 传输是否一致取决于外部设备的类型: * 访问具有字节选择功能的设备(SRAM、ROM、PSRAM、SDRAM):在这种情况下,GMC 允许读/写事务,并通过其 NBL[3:0] 字节通道访问正确的数据。要写入的字节由 NBL[3:0] 寻址。所有存储器字节都被读取(读事务期间 NBL[3:0] 被驱动为低电平),无用的字节被丢弃。 * 访问没有字节选择功能的设备(NOR Flash 存储器):当向 16 位宽的 Flash 存储器请求字节访问时会发生这种情况。由于设备无法以字节模式访问(只能从 Flash 存储器读/写 16 位字),因此不允许写事务,而允许读事务(控制器读取整个 16 位存储器字,仅使用所需的字节)。 外部设备地址映射 ------------------- 从 GMC 的角度来看,外部存储器被划分为固定大小的存储体,每个存储体为 256 M字节(参见图3.2 GMC 存储体(默认映射): .. _GMC 存储体(默认映射): .. figure:: /assets/images/gmc_memory_bank.png :alt: GMC 存储体 :align: center **图 3.2: GMC 存储体(默认映射)** ADDR[29:28] 位用于选择 SDRAM 和 NOR/PSRAM 之一,如表3.1 SDRAM 和 NOR/PSRAM 选择所示 .. list-table:: 表3.1 SDRAM 和 NOR/PSRAM 选择 :widths: 20 20 :header-rows: 1 * - ADDR[29:28] - 选中的存储体 * - 00 - SDRAM Bank 0 * - 01 - SDRAM Bank 1 * - 10 - NOR/PSRAM * - 11 - 非法,将响应错误 NOR/PSRAM 地址映射 ~~~~~~~~~~~~~~~~~~~~ ADDR[27:26] 位用于选择四个存储体之一,如表3.2 NOR/PSRAM 存储体选择所示 .. list-table:: 表3.2 NOR/PSRAM 存储体选择 :widths: 20 20 :header-rows: 1 * - ADDR[27:26] - 选中的存储体 * - 00 - NOR/PSRAM Bank 0 * - 01 - NOR/PSRAM Bank 1 * - 10 - NOR/PSRAM Bank 2 * - 11 - NOR/PSRAM Bank 3 ADDR 是内部地址线,会被转换为外部存储器地址。 ADDR[25:0] 位包含外部存储器地址。由于 ADDR 为字节地址,而存储器以字为单位进行寻址,实际输出到存储器的地址会根据存储器的数据宽度而变化,如表3.3 NOR/PSRAM 外部存储器地址所示。 .. list-table:: 表3.3 NOR/PSRAM 外部存储器地址 :widths: 20 15 20 :header-rows: 1 * - 存储器位宽 - 发给存储器的数据地址 - 最大存储器容量(比特) * - 8-bit - ADDR[25:0] - 64Mbytesx8 = 512Mbit * - 16-bit - ADDR[25:0] >> 1 - 64Mbytes/2x16 = 512Mbit * - 32-bit - ADDR[25:0] >> 2 - 64Mbytes/4x32 = 512Mbit 在外部存储器宽度为16位的情况下,GMC将在内部使用ADDR[25:1]来生成地址。对于外部存储器,输出地址为GMC_ADDR[24:0]。在外部存储器宽度为32位的情况下,GMC将在内部使用ADDR[25:2]来生成外部地址。不论外部存储器宽度如何,GMC_ADDR[0]都应连接到外部存储器地址ADDR[0]。 SDRAM 地址映射 ~~~~~~~~~~~~~~~~~~~~ 表3.4 SDRAM 地址映射采用13位行地址和11位列地址配置的SDRAM地址映射。 .. list-table:: 表3.4 SDRAM 地址映射 :widths: 20 20 20 20 20 :header-rows: 1 * - 存储器位宽 - 内部bank - 行地址 - 列地址 - 最大存储器容量 * - 8-bit - ADDR[25:24] - ADDR[23:11] - ADDR[10:0] - 64MB * - 16-bit - ADDR[26:25] - ADDR[24:12] - ADDR[11:1] - 128MB * - 32-bit - ADDR[27:26] - ADDR[25:13] - ADDR[12:2] - 256MB NOR Flash/PSRAM 控制器 ------------------------ GMC 生成适当的信号时序以驱动以下类型的存储器: * 异步 SRAM 和 ROM - 8 位 - 16 位 - 32位 * PSRAM (Cellular RAM) - 异步模式 - 用于同步访问的突发模式,具有可配置选项,可在跨 CRAM 1.5 的边界页时拆分突发访问 - 复用或非复用 * NOR Flash 存储器 - 异步模式 - 用于同步访问的突发模式 - 复用或非复用 GMC 每个存储体输出一个唯一的片选信号 NE[3:0]。所有其他信号(地址、数据和控制)是共享的。 GMC 通过可编程时序支持多种设备,包括: * 可编程等待状态(最多 15 个) * 可编程总线周转周期(最多 15 个) * 可编程输出使能和写使能延迟(最多 15 个) * 独立的读写时序和协议,以支持最广泛的存储器和时序 * 可编程连续时钟 (gmc_npc_clk) 输出。 GMC 输出时钟 (gmc_npc_clk) 是总线时钟 (bus_clk) 的分频。根据 GMC_BCR0 寄存器中 CCLKEN 位的配置,它可以在仅同步访问期间或在异步和同步访问期间提供给选定的外部设备: * 如果 CCLKEN 位复位,GMC 仅在同步访问(读/写事务)期间生成时钟 (gmc_npc_clk)。 * 如果 CCLKEN 位置位,GMC 在异步和同步访问期间生成连续时钟。要生成 gmc_npc_clk 连续时钟,Bank 1 必须配置为同步模式。由于所有同步存储器使用同一时钟,当生成连续输出时钟并执行同步访问时,总线数据大小必须与存储器数据宽度 (MWID) 相同,否则 gmc_npc_clk 频率将根据总线数据事务而变化。 每个存储体的大小固定为 64 M字节。每个存储体通过专用寄存器配置。 可编程存储器参数包括访问时间(参见表 3.5)和对等待管理的支持(对于以突发模式访问的 PSRAM 和 NOR Flash 存储器)。 .. list-table:: 表3.5 可编程 NOR/PSRAM 访问参数 :widths: 20 20 20 20 20 20 :header-rows: 1 * - 参数 - 功能 - 访问模式 - 单位 - 最小值 - 最大值 * - 地址建立 - 地址建立阶段的持续时间 - 异步 - GMC 时钟周期 (bus_clk) - 1 - 15 * - 地址保持 - 地址保持阶段的持续时间 - 异步, 复用 I/O - GMC 时钟周期 (bus_clk) - 1 - 15 * - 数据建立预置 - 数据预建立阶段的持续时间 - 异步 - GMC 时钟周期 (bus_clk) - 2 - 255 * - 数据建立 - 数据建立阶段的持续时间 - 异步 - GMC 时钟周期 (bus_clk) - 2 - 255 * - 总线周转 - 总线周转阶段的持续时间 - 异步和同步读 - GMC 时钟周期 (bus_clk) - 1 - 15 * - 时钟分频比 - 构建一个存储器时钟周期 (gmc_npc_clk) 所需的 GMC 时钟周期 (bus_clk) 数 - 同步 - GMC 时钟周期 (bus_clk) - 1 - 15 * - 数据延迟 - 在突发第一个数据之前发送给存储器的时钟周期数 - 同步 - gmc_npc_clk 时钟周期 - 2 - 15 * - NWE 之后时间 - NWE 拉高后,NE 有效的持续时间 - 异步 - GMC 时钟周期 (bus_clk) - 1 - 3 外部存储器接口信号 ~~~~~~~~~~~~~~~~~~~~ 表 3.6、3.7、3.8 和 3.9 列出了通常用于与 NOR Flash 存储器、SRAM 和 PSRAM 接口的信号。 注意: 前缀 “N” 标识低电平有效的信号。 .. list-table:: 表3.6 非复用 I/O NOR Flash 存储器 :widths: 20 20 20 20 :header-rows: 1 * - GMC 信号 - 方向 - 宽度 - 描述 * - GMC_NPC_CLK - 输出 - 1 - 时钟(用于同步访问) * - GMC_NPC_ADDR[25:0] - 输出 - 26 - 地址总线 * - GMC_NPC_DATA[31:0] - 输入/输出 - 32 - 双向数据总线 * - GMC_NPC_NE - 输出 - 4 - 片选 * - GMC_NPC_NOE - 输出 - 1 - 读使能 * - GMC_NPC_NWE - 输出 - 1 - 写使能 * - GMC_NPC_NADV - 输出 - 1 - 地址有效 * - GMC_NPC_NWAIT - 输入 - 1 - NOR Flash 等待输入信号到 GMC 最大容量为 512 Mbits(26 条地址线)。 .. list-table:: 表3.7 16 位复用 I/O NOR Flash 存储器 :widths: 20 20 20 20 :header-rows: 1 * - GMC 信号 - 方向 - 宽度 - 描述 * - GMC_NPC_CLK - 输出 - 1 - 时钟(用于同步访问) * - GMC_NPC_ADDR[9:0] - 输出 - 10 - 地址总线 bit0-bit9 是地址 MSB * - GMC_NPC_DATA[15:0] - 输入/输出 - 16 - 16 位复用双向地址/数据总线(16 位地址[15:0] 和数据 Data[15:0] 在数据总线上复用) * - GMC_NPC_NE - 输出 - 4 - 片选 * - GMC_NPC_NOE - 输出 - 1 - 读使能 * - GMC_NPC_NWE - 输出 - 1 - 写使能 * - GMC_NPC_NADV - 输出 - 1 - 地址有效 * - GMC_NPC_NWAIT - 输入 - 1 - NOR Flash 等待输入信号到 GMC 最大容量为 512 Mbits(26 条地址线)。 .. list-table:: 表3.8 非复用 I/O PSRAM/SRAM :widths: 20 20 20 20 :header-rows: 1 * - GMC 信号 - 方向 - 宽度 - 描述 * - GMC_NPC_CLK - 输出 - 1 - 时钟(用于同步访问) * - GMC_NPC_ADDR[25:0] - 输出 - 26 - 地址总线 * - GMC_NPC_DATA[31:0] - 输入/输出 - 32 - 双向数据总线 * - GMC_NPC_NE - 输出 - 4 - 片选 * - GMC_NPC_NOE - 输出 - 1 - 读使能 * - GMC_NPC_NWE - 输出 - 1 - 写使能 * - GMC_NPC_NADV - 输出 - 1 - 地址有效 * - GMC_NPC_NWAIT - 输入 - 1 - PSRAM 等待输入信号到 GMC * - GMC_NPC_NBL - 输出 - 4 - 字节通道输出。Byte 0 到 Byte 3 控制(高位和低位字节使能) 最大容量为 512 Mbits(26 条地址线)。 .. list-table:: 表3.9 非复用 I/O PSRAM :widths: 20 20 20 20 :header-rows: 1 * - GMC 信号 - 方向 - 宽度 - 描述 * - GMC_NPC_CLK - 输出 - 1 - 时钟(用于同步访问) * - GMC_NPC_ADDR[9:0] - 输出 - 10 - 地址总线 * - GMC_NPC_DATA[15:0] - 输入/输出 - 16 - 16 位复用双向地址/数据总线 * - GMC_NPC_NE - 输出 - 4 - 片选 * - GMC_NPC_NOE - 输出 - 1 - 读使能 * - GMC_NPC_NWE - 输出 - 1 - 写使能 * - GMC_NPC_NADV - 输出 - 1 - 地址有效 * - GMC_NPC_NWAIT - 输入 - 1 - PSRAM 等待输入信号到 GMC * - GMC_NPC_NBL - 输出 - 2 - 字节通道输出。Byte 0 到 Byte 1 控制(高位和低位字节使能) 最大容量为 512 Mbits(26 条地址线)。 NOR Flash/PSRAM 控制器异步事务 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 对静态存储器(NOR Flash 存储器、PSRAM、SRAM)的异步事务执行如下: * 信号由内部时钟同步。此时钟不发送到存储器。 * GMC 总是在取消断言片选信号之前采样数据。这保证了满足存储器数据保持时序约束(片选使能高电平到数据转换的最小时间通常为 0 ns) 模式 1 - SRAM/PSRAM (CRAM) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 图3.3 和图3.4 分别显示了受支持模式的读写事务波形,表3.10、3.11、3.12和3.13 列出了 GMC_BCRx、GMC_BTRx、GMC_BTRPREx 和 GMC_BTO 寄存器所需的配置。 .. _GMC 图3.3: .. figure:: /assets/images/gmc_sram_mode_1_read.png :alt: GMC 图3.3 :align: center **图 3.3: 模式 1 读访问波形** .. _GMC 图3.4: .. figure:: /assets/images/gmc_sram_mode_1_write.png :alt: GMC 图3.4 :align: center **图 3.4: 模式 1 写访问波形** 写事务结束时的总线时钟周期有助于保证 NWE 上升沿后的地址和数据保持时间。由于存在此总线时钟周期,DATAST 值必须大于零 (DATAST > 0)。 .. list-table:: 表3.10 GMC_BCRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31 - GMCEN - 0x1 * - 30 - Reserved - 0x0 * - 23:22 - BMAP - 根据需要 * - 21 - Reserved - 0x0 * - 20 - CCLKEN - 0x0 * - 19 - CBURSTRW - 0x0(在异步模式下无效) * - 18:16 - CPSIZE - 0x0(在异步模式下无效) * - 15 - ASYNCWAIT - 如果存储器支持此功能则置 1。否则保持为 0 * - 14 - EXTMOD - 0x0 * - 13 - WAITEN - 0x0(在异步模式下无效) * - 12 - WREN - 根据需要 * - 11 - WAITCFG - 无关 * - 9 - WAITPOL - 仅在位 15 ASYNCWAIT 为 1 时有意义 * - 8 - BURSTEN - 0x0 * - 7 - MODEEXMC - 0x0 * - 6 - FACCEN - 无关 * - 5:4 - MWID - 根据需要 * - 3:2 - MTYP - 根据需要,排除 0x2 (NOR Flash 存储器) * - 1 - MUXEN - 0x0 * - 0 - MBKEN - 0x1 .. list-table:: 表3.11 GMC_BTRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:30 - EARLYTIME - 根据需要 * - 29:28 - ACCMOD - 无关 * - 27:24 - DATLAT - 无关 * - 23:20 - CLKDIV - 无关 * - 19:16 - BUSTURN - NEx 高电平到 NEx 低电平之间的时间 (BUSTURN 总线时钟周期) * - 15:8 - DATAST - 第二访问阶段的持续时间(写访问为 DATAST+1 总线时钟周期,读访问为 DATAST 总线时钟周期) * - 7:4 - ADDHLD - 无关 * - 3:0 - ADDSET - 第一访问阶段的持续时间(ADDSET 总线时钟周期)。ADDSET 的最小值为 0 .. list-table:: 表3.12 GMC_BTRPREx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:8 - Reserved - 0x0 * - 7:0 - DATASPRE - 无关 .. list-table:: 表3.13 GMC_BTO 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:0 - TIME - 根据需要 模式 A - SRAM/PSRAM (CRAM) OE 切换 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 图3.5 和图3.6 分别显示了受支持模式的读写事务波形,表3.14、3.15、3.16、3.17和3.18 列出了 GMC_BCRx、GMC_BTRx、GMC_BTRPREx、GMC_BTO 和 GMC_BWTRx 寄存器所需的配置。 .. _GMC 图3.5: .. figure:: /assets/images/gmc_sram_mode_a_read.png :alt: GMC 图3.5 :align: center **图 3.5: 模式 A 读访问波形** .. _GMC 图3.6: .. figure:: /assets/images/gmc_sram_mode_a_write.png :alt: GMC 图3.6 :align: center **图 3.6: 模式 A 写访问波形** 读访问期间 NBL[3:0] 被驱动为低电平。与模式 1 相比,差异在于 NOE 的切换以及独立的读写时序。 .. list-table:: 表3.14 GMC_BCRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31 - GMCEN - 0x1 * - 30 - Reserved - 0x0 * - 23:22 - BMAP - 根据需要 * - 21 - Reserved - 0x0 * - 20 - CCLKEN - 0x0 * - 19 - CBURSTRW - 0x0(在异步模式下无效) * - 18:16 - CPSIZE - 0x0(在异步模式下无效) * - 15 - ASYNCWAIT - 如果存储器支持此功能则置 1。否则保持为 0 * - 14 - EXTMOD - 0x1 * - 13 - WAITEN - 0x0(在异步模式下无效) * - 12 - WREN - 根据需要 * - 11 - WAITCFG - 无关 * - 9 - WAITPOL - 仅在位 15 ASYNCWAIT 为 1 时有意义 * - 8 - BURSTEN - 0x0 * - 7 - MODEEXMC - 0x0 * - 6 - FACCEN - 无关 * - 5:4 - MWID - 根据需要 * - 3:2 - MTYP - 根据需要,排除 0x2 (NOR Flash 存储器) * - 1 - MUXEN - 0x0 * - 0 - MBKEN - 0x1 .. list-table:: 表3.15 GMC_BTRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:30 - EARLYTIME - 根据需要 * - 29:28 - ACCMOD - 0x0 * - 27:24 - DATLAT - 无关 * - 23:20 - CLKDIV - 无关 * - 19:16 - BUSTURN - NEx 高电平到 NEx 低电平之间的时间 (BUSTURN 总线时钟周期) * - 15:8 - DATAST - 第二访问阶段的持续时间(写访问为 DATAST+1 总线时钟周期,读访问为 DATAST 总线时钟周期) * - 7:4 - ADDHLD - 无关 * - 3:0 - ADDSET - 第一访问阶段的持续时间(读访问为 ADDSET 总线时钟周期)。ADDSET 的最小值为 0 .. list-table:: 表3.16 GMC_BTRPREx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:8 - Reserved - 0x0 * - 7:0 - DATASPRE - 无关 .. list-table:: 表3.17 GMC_BTO 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:0 - TIME - 根据需要 .. list-table:: 表3.18 GMC_BWTRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:30 - Reserved - 0x0 * - 29:28 - ACCMOD - 0x0 * - 27:24 - DATLAT - 无关 * - 23:20 - CLKDIV - 无关 * - 19:16 - BUSTURN - NEx 高电平到 NEx 低电平之间的时间 (BUSTURN 总线时钟周期) * - 15:8 - DATAST - 第二访问阶段的持续时间(写访问为 DATAST 总线时钟周期) * - 7:4 - ADDHLD - 无关 * - 3:0 - ADDSET - 第一访问阶段的持续时间(写访问为 ADDSET 总线时钟周期)。ADDSET 的最小值为 0 模式 2/B - NOR Flash ^^^^^^^^^^^^^^^^^^^^^^^^ 图3.7、图3.8 和 图3.9 分别显示了受支持模式的读写事务波形,表3.19、3.20、3.21和3.22 列出了 GMC_BCRx、GMC_BTRx、GMC_BTRPREx、GMC_BTO 寄存器所需的配置。 .. _GMC 图3.7: .. figure:: /assets/images/gmc_sram_mode_2_b_read.png :alt: GMC 图3.7 :align: center **图 3.7: 模式 2 和模式 B 读访问波形** .. _GMC 图3.8: .. figure:: /assets/images/gmc_sram_mode_2_write.png :alt: GMC 图3.8 :align: center **图 3.8: 模式 2 写访问波形** .. _GMC 图3.9: .. figure:: /assets/images/gmc_sram_mode_b_write.png :alt: GMC 图3.9 :align: center **图 3.9: 模式 B 写访问波形** .. list-table:: 表3.19 GMC_BCRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31 - GMCEN - 0x1 * - 30 - Reserved - 0x0 * - 23:22 - BMAP - 根据需要 * - 21 - Reserved - 0x0 * - 20 - CCLKEN - 0x0 * - 19 - CBURSTRW - 0x0(在异步模式下无效) * - 18:16 - CPSIZE - 0x0(在异步模式下无效) * - 15 - ASYNCWAIT - 如果存储器支持此功能则置 1。否则保持为 0 * - 14 - EXTMOD - 模式 B 为 0x1,模式 2 为 0x0 * - 13 - WAITEN - 0x0(在异步模式下无效) * - 12 - WREN - 根据需要 * - 11 - WAITCFG - 无关 * - 9 - WAITPOL - 仅在位 15 ASYNCWAIT 为 1 时有意义 * - 8 - BURSTEN - 0x0 * - 7 - MODEEXMC - 0x0 * - 6 - FACCEN - 0x1 * - 5:4 - MWID - 根据需要 * - 3:2 - MTYP - 0x2 (NOR Flash 存储器) * - 1 - MUXEN - 0x0 * - 0 - MBKEN - 0x1 .. list-table:: 表3.20 GMC_BTRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:30 - EARLYTIME - 根据需要 * - 29:28 - ACCMOD - 0x0 * - 27:24 - DATLAT - 无关 * - 23:20 - CLKDIV - 无关 * - 19:16 - BUSTURN - NEx 高电平到 NEx 低电平之间的时间 (BUSTURN 总线时钟周期) * - 15:8 - DATAST - 第二访问阶段的持续时间(读访问为 DATAST 总线时钟周期) * - 7:4 - ADDHLD - 无关 * - 3:0 - ADDSET - 第一访问阶段的持续时间(读访问为 ADDSET 总线时钟周期)。ADDSET 的最小值为 0 .. list-table:: 表3.21 GMC_BTRPREx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:8 - Reserved - 0x0 * - 7:0 - DATASPRE - 无关 .. list-table:: 表3.22 GMC_BTO 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:0 - TIME - 根据需要 模式 C - NOR Flash OE 切换 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 图3.10 和 图3.11 分别显示了受支持模式的读写事务波形,表3.23、3.24、3.25、3.26 和3.27 列出了 GMC_BCRx、GMC_BTRPREx、GMC_BTO、GMC_BTRx 和 GMC_BWTRx 寄存器所需的配置。 .. _GMC 图3.10: .. figure:: /assets/images/gmc_sram_mode_c_read.png :alt: GMC 图3.10 :align: center **图 3.10: 模式 C 读访问波形** .. _GMC 图3.11: .. figure:: /assets/images/gmc_sram_mode_c_write.png :alt: GMC 图3.11 :align: center **图 3.11: 模式 C 写访问波形** 与模式 1 相比,差异在于 NOE 的切换以及独立的读写时序。 .. list-table:: 表3.23 GMC_BCRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31 - GMCEN - 0x1 * - 30 - Reserved - 0x0 * - 23:22 - BMAP - 根据需要 * - 21 - Reserved - 0x0 * - 20 - CCLKEN - 0x0 * - 19 - CBURSTRW - 0x0(在异步模式下无效) * - 18:16 - CPSIZE - 0x0(在异步模式下无效) * - 15 - ASYNCWAIT - 如果存储器支持此功能则置 1。否则保持为 0 * - 14 - EXTMOD - 0x1 * - 13 - WAITEN - 0x0(在异步模式下无效) * - 12 - WREN - 根据需要 * - 11 - WAITCFG - 无关 * - 9 - WAITPOL - 仅在位 15 ASYNCWAIT 为 1 时有意义 * - 8 - BURSTEN - 0x0 * - 7 - MODEEXMC - 0x0 * - 6 - FACCEN - 0x1 * - 5:4 - MWID - 根据需要 * - 3:2 - MTYP - 0x2 (NOR Flash 存储器) * - 1 - MUXEN - 0x0 * - 0 - MBKEN - 0x1 .. list-table:: 表3.24 GMC_BTRPREx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:8 - Reserved - 0x0 * - 7:0 - DATASPRE - 无关 .. list-table:: 表3.25 GMC_BTO 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:0 - TIME - 根据需要 .. list-table:: 表3.26 GMC_BTRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:30 - EARLYTIME - 根据需要 * - 29:28 - ACCMOD - 0x2 * - 27:24 - DATLAT - 0x0 * - 23:20 - CLKDIV - 0x0 * - 19:16 - BUSTURN - NEx 高电平到 NEx 低电平之间的时间 (BUSTURN 总线时钟周期) * - 15:8 - DATAST - 第二访问阶段的持续时间(读访问为 DATAST 总线时钟周期) * - 7:4 - ADDHLD - 无关 * - 3:0 - ADDSET - 第一访问阶段的持续时间(读访问为 ADDSET 总线时钟周期)。ADDSET 的最小值为 0 .. list-table:: 表3.27 GMC_BWTRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:30 - Reserved - 0x0 * - 29:28 - ACCMOD - 0x2 * - 27:24 - DATLAT - 无关 * - 23:20 - CLKDIV - 无关 * - 19:16 - BUSTURN - NEx 高电平到 NEx 低电平之间的时间 (BUSTURN 总线时钟周期) * - 15:8 - DATAST - 第二访问阶段的持续时间(写访问为 DATAST 总线时钟周期) * - 7:4 - ADDHLD - 无关 * - 3:0 - ADDSET - 第一访问阶段的持续时间(写访问为 ADDSET 总线时钟周期)。ADDSET 的最小值为 0 模式 D - 带扩展地址的异步访问 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 图3.12 和图3.13 分别显示了受支持模式的读写事务波形,表3.28、3.29、3.30、3.31和3.32 列出了 GMC_BCRx、GMC_BTRx、GMC_BTRPREx、GMC_BTO 和 GMC_BWTRx 寄存器所需的配置。 .. _GMC 图3.12: .. figure:: /assets/images/gmc_sram_mode_d_read.png :alt: GMC 图3.12 :align: center **图 3.12: 模式 D 读访问波形** .. _GMC 图3.13: .. figure:: /assets/images/gmc_sram_mode_d_write.png :alt: GMC 图3.13 :align: center **图 3.13: 模式 D 写访问波形** 与模式 1 相比,差异在于 NOE 在 NADV 改变后继续切换以及独立的读写时序。 .. list-table:: 表3.28 GMC_BCRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31 - GMCEN - 0x1 * - 30 - Reserved - 0x0 * - 23:22 - BMAP - 根据需要 * - 21 - Reserved - 0x0 * - 20 - CCLKEN - 0x0 * - 19 - CBURSTRW - 0x0(在异步模式下无效) * - 18:16 - CPSIZE - 0x0(在异步模式下无效) * - 15 - ASYNCWAIT - 如果存储器支持此功能则置 1。否则保持为 0 * - 14 - EXTMOD - 0x1 * - 13 - WAITEN - 0x0(在异步模式下无效) * - 12 - WREN - 根据需要 * - 11 - WAITCFG - 无关 * - 9 - WAITPOL - 仅在位 15 ASYNCWAIT 为 1 时有意义 * - 8 - BURSTEN - 0x0 * - 7 - MODEEXMC - 0x0 * - 6 - FACCEN - 根据存储器支持设置 * - 5:4 - MWID - 根据需要 * - 3:2 - MTYP - 根据需要 * - 1 - MUXEN - 0x0 * - 0 - MBKEN - 0x1 .. list-table:: 表3.29 GMC_BTRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:30 - EARLYTIME - 根据需要 * - 29:28 - ACCMOD - 0x3 * - 27:24 - DATLAT - 无关 * - 23:20 - CLKDIV - 无关 * - 19:16 - BUSTURN - NEx 高电平到 NEx 低电平之间的时间 (BUSTURN 总线时钟周期) * - 15:8 - DATAST - 第二访问阶段的持续时间(读访问为 DATAST 总线时钟周期) * - 7:4 - ADDHLD - 读访问中间阶段的持续时间(ADDHLD 总线时钟周期) * - 3:0 - ADDSET - 第一访问阶段的持续时间(读访问为 ADDSET 总线时钟周期)。ADDSET 的最小值为 1 .. list-table:: 表3.30 GMC_BTRPREx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:8 - Reserved - 0x0 * - 7:0 - DATASPRE - 无关 .. list-table:: 表3.31 GMC_BTO 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:0 - TIME - 根据需要 .. list-table:: 表3.32 GMC_BWTRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:30 - Reserved - 0x0 * - 29:28 - ACCMOD - 0x3 * - 27:24 - DATLAT - 无关 * - 23:20 - CLKDIV - 无关 * - 19:16 - BUSTURN - NEx 高电平到 NEx 低电平之间的时间 (BUSTURN 总线时钟周期) * - 15:8 - DATAST - 第二访问阶段的持续时间(写访问为 DATAST + 1 总线时钟周期) * - 7:4 - ADDHLD - 写访问中间阶段的持续时间(ADDHLD 总线时钟周期) * - 3:0 - ADDSET - 第一访问阶段的持续时间(写访问为 ADDSET 总线时钟周期)。ADDSET 的最小值为 1 复用模式 - 对 NOR Flash 存储器的复用异步访问 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 图3.14 和图3.15 分别显示了受支持模式的读写事务波形,表3.33、3.34、3.35、3.36 列出了 GMC_BCRx、GMC_BTRx、GMC_BTRPREx、GMC_BTO 寄存器所需的配置。 .. _GMC 图3.14: .. figure:: /assets/images/gmc_sram_mode_muxed_read.png :alt: GMC 图3.14 :align: center **图 3.14: 复用模式读访问波形** .. _GMC 图3.15: .. figure:: /assets/images/gmc_sram_mode_muxed_write.png :alt: GMC 图3.15 :align: center **图 3.15: 复用模式写访问波形** 与模式 D 的差异在于低位地址字节在数据总线上驱动。 .. list-table:: 表3.33 GMC_BCRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31 - GMCEN - 0x1 * - 30 - Reserved - 0x0 * - 23:22 - BMAP - 根据需要 * - 21 - Reserved - 0x0 * - 20 - CCLKEN - 0x0 * - 19 - CBURSTRW - 0x0(在异步模式下无效) * - 18:16 - CPSIZE - 0x0(在异步模式下无效) * - 15 - ASYNCWAIT - 如果存储器支持此功能则置 1。否则保持为 0 * - 14 - EXTMOD - 0x0 * - 13 - WAITEN - 0x0(在异步模式下无效) * - 12 - WREN - 根据需要 * - 11 - WAITCFG - 无关 * - 9 - WAITPOL - 仅在位 15 ASYNCWAIT 为 1 时有意义 * - 8 - BURSTEN - 0x0 * - 7 - MODEEXMC - 0x0 * - 6 - FACCEN - 0x1 * - 5:4 - MWID - 根据需要 * - 3:2 - MTYP - 0x2 (NOR Flash 存储器) * - 1 - MUXEN - 0x1 * - 0 - MBKEN - 0x1 .. list-table:: 表3.34 GMC_BTRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:30 - EARLYTIME - 根据需要 * - 29:28 - ACCMOD - 0x0 * - 27:24 - DATLAT - 无关 * - 23:20 - CLKDIV - 无关 * - 19:16 - BUSTURN - NEx 高电平到 NEx 低电平之间的时间 (BUSTURN 总线时钟周期) * - 15:8 - DATAST - 第二访问阶段的持续时间(读访问为 DATAST 总线时钟周期,写访问为 DATAST+1 总线时钟周期) * - 7:4 - ADDHLD - 读访问中间阶段的持续时间(ADDHLD 总线时钟周期) * - 3:0 - ADDSET - 第一访问阶段的持续时间(读访问为 ADDSET 总线时钟周期)。ADDSET 的最小值为 1 .. list-table:: 表3.35 GMC_BTRPREx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:8 - Reserved - 0x0 * - 7:0 - DATASPRE - 无关 .. list-table:: 表3.36 GMC_BTO 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:0 - TIME - 根据需要 异步 exmc 模式 ^^^^^^^^^^^^^^^^^^ exmc 模式与其他异步模式的区别在于,在 NWE 下降沿之前有数据预建立时间。对于读事务,建立时间由寄存器 DATASPRE 配置。 图3.16、3.17 和图3.18、3.19 分别显示了受支持模式的读写事务波形,表3.37、3.38、3.39、3.40 列出了 GMC_BCRx、GMC_BTRx、GMC_BTRPREx、GMC_BTO 寄存器所需的配置。 .. _GMC 图3.16: .. figure:: /assets/images/gmc_sram_mode_exmc_read.png :alt: GMC 图3.16 :align: center **图 3.16: 异步 Exmc 模式读访问波形** .. _GMC 图3.17: .. figure:: /assets/images/gmc_sram_mode_exmc_write.png :alt: GMC 图3.17 :align: center **图 3.17: 异步 Exmc 模式写访问波形** .. _GMC 图3.18: .. figure:: /assets/images/gmc_sram_mode_exmc_muxed_read.png :alt: GMC 图3.18 :align: center **图 3.18: 异步复用 Exmc 模式读访问波形** .. _GMC 图3.19: .. figure:: /assets/images/gmc_sram_mode_exmc_muxed_write.png :alt: GMC 图3.19 :align: center **图 3.19: 异步复用 Exmc 模式写访问波形** .. list-table:: 表3.37 GMC_BCRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31 - GMCEN - 0x1 * - 30 - Reserved - 0x0 * - 23:22 - BMAP - 根据需要 * - 21 - Reserved - 0x0 * - 20 - CCLKEN - 0x0 * - 19 - CBURSTRW - 0x0(在异步模式下无效) * - 18:16 - CPSIZE - 0x0(在异步模式下无效) * - 15 - ASYNCWAIT - 如果存储器支持此功能则置 1。否则保持为 0 * - 14 - EXTMOD - 0x0 * - 13 - WAITEN - 0x0(在异步模式下无效) * - 12 - WREN - 根据需要 * - 11 - WAITCFG - 无关 * - 9 - WAITPOL - 仅在位 15 ASYNCWAIT 为 1 时有意义 * - 8 - BURSTEN - 0x0 * - 7 - MODEEXMC - 0x1 * - 6 - FACCEN - 无关 * - 5:4 - MWID - 根据需要 * - 3:2 - MTYP - 根据需要,排除 0x2 (NOR Flash 存储器) * - 1 - MUXEN - 0x0 * - 0 - MBKEN - 0x1 .. list-table:: 表3.38 GMC_BTRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:30 - EARLYTIME - 根据需要 * - 29:28 - ACCMOD - 无关 * - 27:24 - DATLAT - 无关 * - 23:20 - CLKDIV - 无关 * - 19:16 - BUSTURN - NEx 高电平到 NEx 低电平之间的时间 (BUSTURN 总线时钟周期) * - 15:8 - DATAST - 第二访问阶段的持续时间(写访问为 DATAST+1 总线时钟周期,读访问为 DATAST 总线时钟周期) * - 7:4 - ADDHLD - 无关 * - 3:0 - ADDSET - 第一访问阶段的持续时间(读访问为 ADDSET 总线时钟周期)。ADDSET 的最小值为 0 .. list-table:: 表3.39 GMC_BTRPREx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:8 - Reserved - 0x0 * - 7:0 - DATASPRE - 根据需要 .. list-table:: 表3.40 GMC_BTO 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:0 - TIME - 根据需要 异步访问中的 WAIT 管理 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 如果异步存储器断言 WAIT 信号以指示其尚未准备好接收或提供数据,则必须在 GMC_BCRx 寄存器中设置 ASYNCWAIT 位。 如果 WAIT 信号有效(根据 WAITPOL 位为高电平或低电平),则由 DATAST 位编程的第二访问阶段(数据建立阶段)将延长,直到 WAIT 变为无效。与数据建立阶段不同,由 ADDSET 和 ADDHLD 位编程的第一访问阶段(地址建立和地址保持阶段)对 WAIT 不敏感,因此不会延长。 数据建立阶段必须编程为 WAIT 可以在存储器事务结束前 4 个 bus_clk 周期被检测到。必须考虑以下情况: 1. 存储器断言 WAIT 信号与切换的 NOE/NWE 对齐 - DATAST >= (4 x GMC_CLK) + max_wait_assertion_time 2. 存储器断言 WAIT 信号与 NEx 对齐(或 NOE/NWE 不切换) - DATAST >= (4 x HCLK) + (max_wait_assertion_time - address_phase - hold_phase)(如果大于0) - DATAST >= (4 x HCLK) 其中 max_wait_assertion_time 是存储器在 NEx/NOE/NWE 变低后断言 WAIT 信号所需的最长时间。 NWAIT 极性取决于 GMC_BCRx 寄存器中 WAITPOL 位的设置。 同步事务 ~~~~~~~~~~~~~~~~~ 存储器时钟 GMC_CLK 是 bus_clk 的分频。它取决于 CLKDIV 的值,遵循以下公式: - GMC_NPC_CLK = bus_clk / (2 x CLKDIV) NOR Flash 存储器指定了从 NADV 断言到 GMC_CLK 高电平的最小时间。为了满足此约束,GMC 在同步访问的第一个内部时钟周期(NADV 断言之前)不向存储器发送时钟。这保证了存储器时钟的上升沿出现在 NADV 低电平脉冲的中间 数据延迟与 NOR 存储器延迟 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 数据延迟是在采样数据之前等待的周期数。DATLAT 值必须与 NOR Flash 配置寄存器中指定的延迟值一致。GMC 在数据延迟计数中不包括 NADV 为低的时钟周期。 注意: 一些 NOR Flash 存储器在数据延迟计数中包括 NADV 低电平周期,因此 NOR Flash 延迟与 GMC DATLAT 参数之间的确切关系可以是: - NOR Flash 延迟 = (DATLAT + 2) 个 GMC_CLK 时钟周期 - 或 NOR Flash 延迟 = (DATLAT + 3) 个 GMC_CLK 时钟周期 一些较新的存储器在延迟阶段断言 NWAIT。在这种情况下,DATLAT 可以设置为其最小值。因此,GMC 采样数据并等待足够长的时间来评估数据是否有效。这样 GMC 可以检测存储器何时退出延迟并处理真实数据。 其他存储器在延迟期间不断言 NWAIT。在这种情况下,GMC 和存储器的延迟都必须正确设置,否则无效数据会被误认为是好数据,或者有效数据在存储器访问的初始阶段丢失。 等待管理 ^^^^^^^^^^^^ 对于同步 NOR Flash 存储器,NWAIT 在编程的延迟期之后被评估,该延迟期对应于 (DATLAT+2) 个 GMC_CLK 时钟周期。 如果 NWAIT 有效(WAITPOL = 0 时为低电平,WAITPOL = 1 时为高电平),则插入等待状态,直到 NWAIT 无效(WAITPOL = 0 时为高电平,WAITPOL = 1 时为低电平)。 当 NWAIT 无效时,数据被视为立即有效(位 WAITCFG = 1)或在下一个时钟沿有效(位 WAITCFG = 0)。 在通过 NWAIT 信号插入等待状态期间,控制器继续向存储器发送时钟脉冲,保持片选和输出使能信号有效。它不认为数据有效。 在突发模式下,NOR Flash NWAIT 信号有两种时序配置: - Flash 存储器在等待状态前一个数据周期断言 NWAIT 信号(复位后默认)。 - Flash 存储器在等待状态期间断言 NWAIT 信号 GMC 通过 GMC_BCRx 寄存器(x = 0..3)中的 WAITCFG 位,支持每个片选的两种 NOR Flash 等待状态配置。 字节通道输出(NBL 未显示;对于 NOR 访问,它们保持高电平;对于 PSRAM (CRAM) 访问,它们保持低电平。 存储器必须提前一个周期发出 NWAIT 信号,因此 WAITCFG 必须编程为 0。 字节通道 (NBL) 输出未显示,它们在 NEx 有效时保持低电平。 .. _GMC 图3.20: .. figure:: /assets/images/gmc_sram_mode_sync_muxed_read.png :alt: GMC 图3.20 :align: center **图 3.20: 同步复用模式读访问波形** .. _GMC 图3.21: .. figure:: /assets/images/gmc_sram_mode_sync_muxed_write.png :alt: GMC 图3.21 :align: center **图 3.21: 同步复用模式写访问波形** .. list-table:: 表3.41 GMC_BCRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31 - GMCEN - 0x1 * - 30 - Reserved - 0x0 * - 23:22 - BMAP - 根据需要 * - 21 - Reserved - 0x0 * - 20 - CCLKEN - 0x0 * - 19 - CBURSTRW - 0x1 * - 18:16 - CPSIZE - 根据需要 * - 15 - ASYNCWAIT - 0x0 * - 14 - EXTMOD - 0x0 * - 13 - WAITEN - 如果存储器支持此功能则设置为 1,否则保持为 0 * - 12 - WREN - 对同步读无影响 * - 11 - WAITCFG - 根据存储器设置 * - 9 - WAITPOL - 根据存储器设置 * - 8 - BURSTEN - 0x1 * - 7 - MODEEXMC - 0x0 * - 6 - FACCEN - 根据存储器支持设置(NOR Flash 存储器) * - 5:4 - MWID - 根据需要 * - 3:2 - MTYP - 0x1 * - 1 - MUXEN - 根据需要 * - 0 - MBKEN - 0x1 .. list-table:: 表3.42 GMC_BTRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:30 - EARLYTIME - 无关 * - 29:28 - ACCMOD - 0x0 * - 27:24 - DATLAT - 数据延迟 * - 23:20 - CLKDIV - 根据需要 * - 19:16 - BUSTURN - NEx 高电平到 NEx 低电平之间的时间 (BUSTURN 总线时钟周期) * - 15:8 - DATAST - 无关 * - 7:4 - ADDHLD - 无关 * - 3:0 - ADDSET - 无关 .. list-table:: 表3.43 GMC_BCRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31 - GMCEN - 0x1 * - 30 - Reserved - 0x0 * - 23:22 - BMAP - 根据需要 * - 21 - Reserved - 0x0 * - 20 - CCLKEN - 0x1 * - 19 - CBURSTRW - 0x1 * - 18:16 - CPSIZE - 根据需要 * - 15 - ASYNCWAIT - 0x0 * - 14 - EXTMOD - 0x0 * - 13 - WAITEN - 如果存储器支持此功能则设置为 1,否则保持为 0 * - 12 - WREN - 对同步读无影响 * - 11 - WAITCFG - 根据存储器设置 * - 9 - WAITPOL - 根据存储器设置 * - 8 - BURSTEN - 0x1 * - 7 - MODEEXMC - 0x0 * - 6 - FACCEN - 根据存储器支持设置(NOR Flash 存储器) * - 5:4 - MWID - 根据需要 * - 3:2 - MTYP - 0x1 * - 1 - MUXEN - 根据需要 * - 0 - MBKEN - 0x1 .. list-table:: 表3.44 GMC_BTRx 位域 :widths: 20 15 20 :header-rows: 1 * - 位编号 - 位名称 - 要设置的值 * - 31:30 - EARLYTIME - 无关 * - 29:28 - ACCMOD - 0x0 * - 27:24 - DATLAT - 数据延迟 * - 23:20 - CLKDIV - 根据需要 * - 19:16 - BUSTURN - NEx 高电平到 NEx 低电平之间的时间 (BUSTURN 总线时钟周期) * - 15:8 - DATAST - 无关 * - 7:4 - ADDHLD - 无关 * - 3:0 - ADDSET - 无关 SDRAM 控制器 ---------------- SDRAM 控制器的主要特性如下: * 8位、16位、32位数据总线宽度 * 2 或 4 个内部存储体 * 11位、12位、13位行地址 * 8位、9位、10位、11位列地址 * SDRAM 时钟可分频为 1/2、1/4、1/6、1/8 * 自动行和存储体边界管理 * 可编程时序参数 * 具有可编程刷新率的自动刷新操作 * 自刷新模式 * 掉电模式 * 由软件触发的 SDRAM 上电初始化 SDRAM 框图 ~~~~~~~~~~~~~~~~~~~~~ SDRAM 控制器如图3.22 中的主要模块组成 .. _GMC 图3.22: .. figure:: /assets/images/gmc_sdram_block.png :alt: GMC 图3.22 :align: center **图 3.22: SDRAM 控制器框图** SDRAM 初始化 ~~~~~~~~~~~~~~~~~~~~~ 1. 向 SDRAM 控制器和设备供电 2. 配置 CSR sden_init_en 为 0x1 以启动 SDRAM 初始化 FSM,SDRAM 控制器将按照下图3.23 所示的序列初始化 SDRAM 设备 .. _GMC 图3.23: .. figure:: /assets/images/gmc_sdram_init_seq.png :alt: GMC 图3.23 :align: center **图 3.23: SDRAM 初始化序列** 3. CSR sdsr_init_stat 用于反馈 SDRAM 初始化的状态,当此 CSR 置位时,可以通过 ICB 总线发送写和读操作 SDRAM 写操作 ~~~~~~~~~~~~~~~~~~~~~ SDRAM 控制器接受单次和突发写请求,并将它们转换为单次存储器访问。在这两种情况下,SDRAM 控制器跟踪每个存储体的活动行,以便能够对不同的存储体执行连续的写访问。 SDRAM 控制器总是检查下一次访问: * 如果下一次访问在同一行或另一个活动行中,则执行写操作。 * 如果下一次访问目标为另一行(非活动),SDRAM 控制器生成预充电命令,激活新行并启动写命令。 .. _GMC 图3.24: .. figure:: /assets/images/gmc_sdram_next_write_same_row.png :alt: GMC 图3.24 :align: center **图 3.24: SDRAM 下一次写操作访问同一行** .. _GMC 图3.25: .. figure:: /assets/images/gmc_sdram_next_write_diff_row.png :alt: GMC 图3.25 :align: center **图 3.25: SDRAM 下一次写操作访问不同行** SDRAM 读操作 ~~~~~~~~~~~~~~~~~~~~~ SDRAM 控制器接受单次和突发读请求,并将它们转换为单次存储器访问。在这两种情况下,SDRAM 控制器跟踪每个存储体的活动行,以便能够对不同存储体执行连续的读访问。 .. _GMC 图3.26: .. figure:: /assets/images/gmc_sdram_next_read_same_row.png :alt: GMC 图3.26 :align: center **图 3.26: SDRAM 下一次读操作访问同一行** .. _GMC 图3.27: .. figure:: /assets/images/gmc_sdram_next_read_diff_row.png :alt: GMC 图3.27 :align: center **图 3.27: SDRAM 下一次读操作访问不同行** SDRAM 边界管理 ~~~~~~~~~~~~~~~~~~~~~ 当读或写访问跨越行边界时,如果下一次读或写访问是顺序的,并且当前访问是对行边界执行的,SDRAM 控制器执行以下操作: 1. 预充电活动行 2. 激活新行 3. 启动读/写命令 在行边界处,支持所有列和数据总线宽度配置的下一个行的自动激活。 SDRAM 自动刷新 ~~~~~~~~~~~~~~~~~~~~~ 自动刷新命令用于刷新 SDRAM 设备内容。SDRAM 控制器定期发出自动刷新命令。内部计数器加载了寄存器 sdrtr_tref 中的 COUNT 值。此值定义了刷新周期之间的存储器时钟周期数(刷新率)。当此计数器达到零时,生成内部请求。 如果正在进行的存储器访问,自动刷新请求被延迟。但是,如果存储器访问和自动刷新请求同时生成,则自动刷新请求优先。 如果存储器访问发生在自动刷新操作期间,则访问被缓冲并在自动刷新完成后处理。 SDRAM 低功耗模式 ~~~~~~~~~~~~~~~~~~~~~ 有两种低功耗模式可用: - 自刷新模式 - 掉电模式 自刷新模式通过将 MODE 位设置为 "0001" 来选择。SDRAM 设备必须在自刷新模式下保持至少 TRAS 时间,并且可以在此之后无限期保持自刷新模式。 要退出自刷新模式,必须将 MODE 位设置为 "0000"(正常模式)。 .. _GMC 图3.28: .. figure:: /assets/images/gmc_sdram_auto_refresh_seq.png :alt: GMC 图3.28 :align: center **图 3.28: SDRAM 自刷新进入和退出序列** 掉电模式通过将 MODE 位设置为 "0010" 来选择。在掉电模式期间,所有 SDRAM 设备输入和输出缓冲区都被停用,除了保持低电平的 sdr_cke。SDRAM 设备不能保持掉电模式超过刷新周期,并且不能自行执行自动刷新周期。 要退出掉电模式,必须将 MODE 位设置为 "0000"(正常模式)。 .. _GMC 图3.29: .. figure:: /assets/images/gmc_sdram_power_down_seq.png :alt: GMC 图3.29 :align: center **图 3.29: SDRAM 掉电进入和退出序列** 4. GMC 寄存器 >>>>>>>>>>>>>> 表 4.1 显示了 GMC 中的寄存器及其对应的偏移地址。 .. list-table:: 表 4.1:GMC 中寄存器的偏移地址 :widths: 10 25 46 :header-rows: 1 * - 偏移量 - 寄存器名称 - 功能描述 * - 0x0 - BCR0 - Bank 0 的 SRAM/NOR-Flash 片选控制寄存器 * - 0x8 - BCR1 - Bank 1 的 SRAM/NOR-Flash 片选控制寄存器 * - 0x10 - BCR2 - Bank 2 的 SRAM/NOR-Flash 片选控制寄存器 * - 0x18 - BCR3 - Bank 3 的 SRAM/NOR-Flash 片选控制寄存器 * - 0x4 - BTR0 - Bank 0 的 SRAM/NOR-Flash 片选时序寄存器 * - 0x20 - BTRPRE0 - Bank 0 的 SRAM/NOR-Flash 数据建立时间预置寄存器 * - 0xC - BTR1 - Bank 1 的 SRAM/NOR-Flash 片选时序寄存器 * - 0x28 - BTRPRE1 - Bank 1 的 SRAM/NOR-Flash 数据建立时间预置寄存器 * - 0x14 - BTR2 - Bank 2 的 SRAM/NOR-Flash 片选时序寄存器 * - 0x30 - BTRPRE2 - Bank 2 的 SRAM/NOR-Flash 数据建立时间预置寄存器 * - 0x1C - BTR3 - Bank 3 的 SRAM/NOR-Flash 片选时序寄存器 * - 0x38 - BTRPRE3 - Bank 3 的 SRAM/NOR-Flash 数据建立时间预置寄存器 * - 0x24 - BWTR0 - Bank 0 的 SRAM/NOR-Flash 写时序寄存器 * - 0x2C - BWTR1 - Bank 1 的 SRAM/NOR-Flash 写时序寄存器 * - 0x34 - BWTR2 - Bank 2 的 SRAM/NOR-Flash 写时序寄存器 * - 0x3C - BWTR3 - Bank 3 的 SRAM/NOR-Flash 写时序寄存器 * - 0x50 - BTO - Bank0~3 的 SRAM/NOR-Flash 超时寄存器 * - 0x60 - SDCR0 - SDRAM 控制寄存器 * - 0x68 - SDTR0 - SDRAM 时序寄存器 * - 0x70 - SDCMR - SDRAM 命令模式寄存器 * - 0x74 - SDEN - SDRAM 使能寄存器 * - 0x78 - SDRTR - SDRAM 刷新定时器控制寄存器 * - 0x7C - SDSR - SDRAM 状态寄存器 * - 0x80 - MISC - SDRAM 杂项寄存器 * - 0x84 - GMCVER - GMC 版本寄存器 SRAM/NOR-FLASH 片选控制寄存器 (GMC_BCR0) ------------------------------------------------- 地址偏移:``0x0`` .. list-table:: 表 4.2:GMC_BCR0 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - MBKEN - 0 - RW - 0x1 - - 存储体使能位 - 1'b0: 存储体禁用 - 1'b1: 对应存储体使能 * - MUXEN - 1 - RW - 0x0 - - 地址/数据复用使能位 - 1'b0: 地址/数据非复用 - 1'b1: 地址/数据复用 * - MTYP - 3:2 - RW - 0x2 - - 存储器类型 - 2'b00: SRAM - 2'b01: PSRAM (CRAM) - 2'b10: NOR(oneNAND) Flash * - MWID - 5:4 - RW - 0x2 - - 存储器数据总线宽度 - 2'b00: 8位 - 2'b01: 16位 - 2'b10: 32位 * - FACCEN - 6 - RW - 0x1 - - Flash 访问使能 - 1'b0: 对应 NOR Flash 存储器访问禁用 - 1'b1: 对应 NOR Flash 存储器访问使能 * - MODEEXMC - 7 - RW - 0x0 - - EXMC 模式使能 - 1'b0: EXMC 模式禁用 - 1'b1: EXMC 模式使能 * - BURSTEN - 8 - RW - 0x0 - - 突发使能位 - 1'b0: 突发模式禁用 - 1'b1: 突发模式使能 * - WAITPOL - 9 - RW - 0x0 - - 等待信号极性位 - 1'b0: NWAIT 低电平有效 - 1'b1: NWAIT 高电平有效 * - Reserved - 10 - / - 0x0 - / * - WAITCFG - 11 - RW - 0x0 - - 等待时序配置 - 1'b0: NWAIT 信号在等待状态前一个数据周期有效 - 1'b1: NWAIT 信号在等待状态期间有效 * - WREN - 12 - RW - 0x1 - - 写使能位 - 1'b0: GMC 在存储体中禁用写操作 - 1'b1: GMC 在存储体中使能写操作 * - WAITEN - 13 - RW - 0x1 - - 等待使能位 - 1'b0: NWAIT 信号禁用 - 1'b1: NWAIT 信号使能 * - EXTMOD - 14 - RW - 0x0 - - 扩展模式使能 - 1'b0: 不考虑 GMC_BWTR 寄存器内的值 - 1'b1: 考虑 GMC_BWTR 寄存器内的值 * - ASYNCWAIT - 15 - RW - 0x0 - - 异步传输期间的等待信号 - 1'b0: 运行异步协议时不考虑 NWAIT 信号 - 1'b1: 运行异步协议时考虑 NWAIT 信号 * - CPSIZE - 18:16 - RW - 0x0 - - 页面大小:这些用于 Cellular RAM 1.5,它不允许突发访问跨越页面之间的地址边界。配置这些位后,当达到存储器页面大小时,GMC 控制器会自动拆分突发访问(页面大小请参阅存储器数据手册) - 3'b000: 跨页面边界时不拆分突发(复位后默认) - 3'b001: 128 字节 - 3'b010: 256 字节 - 3'b100: 1024 字节 * - CBURSTRW - 19 - RW - 0x0 - - 写突发使能 - 1'b0: 写操作始终以异步模式执行 - 1'b1: 写操作以同步模式执行 * - CCLKEN - 20 - RW - 0x0 - - 连续时钟使能 - 1'b0: GMC_CLK 仅在同步存储器访问期间生成 - 1'b1: GMC_CLK 在异步和同步访问期间连续生成 * - Reserved - 21 - / - 0x0 - / * - BMAP - 23:22 - RW - 0x2 - - GMC 存储体映射 - 2'b00: 默认映射 - 2'b01: NOR/PSRAM 存储体和 SDRAM Bank 1/Bank 2 交换 - 2'b10: SDRAM Bank2 重映射到 GMC Bank2 并且仍然可以通过默认映射访问 * - Reserved - 30:24 - / - 0x0 - / * - GMC_EN - 31 - RW - 0x1 - - GMC 控制器使能 - 1'b0: 禁用 GMC 控制器 - 1'b1: 使能 GMC 控制器 注意: - GMC_BCR1 ~ 3 寄存器的 GMCEN 位无关紧要。它仅通过 GMC_BCR0 寄存器使能。 - GMC_BCR1 ~ 3 寄存器的 BMAP 位无关紧要。它仅通过 GMC_BCR0 寄存器使能。 - GMC_BCR1 ~ 3 寄存器的 CCLKEN 位无关紧要。它仅通过 GMC_BCR0 寄存器使能。Bank 1 必须配置为同步模式以生成 GMC_CLK 连续时钟。 SRAM/NOR-FLASH 片选控制寄存器 (GMC_BCR1) ---------------------------------------- 地址偏移:``0x8`` .. list-table:: 表 4.3:GMC_BCR1 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - MBKEN - 0 - RW - 0x0 - - 存储体使能位 - 1'b0: 存储体禁用 - 1'b1: 对应存储体使能 * - MUXEN - 1 - RW - 0x1 - - 地址/数据复用使能位 - 1'b0: 地址/数据非复用 - 1'b1: 地址/数据在数据总线上复用 * - MTYP - 3:2 - RW - 0x0 - - 存储器类型 - 2'b00: SRAM - 2'b01: PSRAM (CRAM) - 2'b10: NOR(oneNAND) Flash * - MWID - 5:4 - RW - 0x1 - - 存储器数据总线宽度 - 2'b00: 8位 - 2'b01: 16位 - 2'b10: 32位 * - FACCEN - 6 - RW - 0x1 - - Flash 访问使能 - 1'b0: 对应 NOR Flash 存储器访问禁用 - 1'b1: 对应 NOR Flash 存储器访问使能 * - MODEEXMC - 7 - RW - 0x0 - - EXMC 模式使能 - 1'b0: EXMC 模式禁用 - 1'b1: EXMC 模式使能 * - BURSTEN - 8 - RW - 0x0 - - 突发使能位 - 1'b0: 突发模式禁用 - 1'b1: 突发模式使能 * - WAITPOL - 9 - RW - 0x0 - - 等待信号极性位 - 1'b0: NWAIT 低电平有效 - 1'b1: NWAIT 高电平有效 * - Reserved - 10 - / - 0x0 - / * - WAITCFG - 11 - RW - 0x0 - - 等待时序配置 - 1'b0: NWAIT 信号在等待状态前一个数据周期有效 - 1'b1: NWAIT 信号在等待状态期间有效 * - WREN - 12 - RW - 0x1 - - 写使能位 - 1'b0: GMC 在存储体中禁用写操作 - 1'b1: GMC 在存储体中使能写操作 * - WAITEN - 13 - RW - 0x1 - - 等待使能位 - 1'b0: NWAIT 信号禁用 - 1'b1: NWAIT 信号使能 * - EXTMOD - 14 - RW - 0x0 - - 扩展模式使能 - 1'b0: 不考虑 GMC_BWTR 寄存器内的值 - 1'b1: 考虑 GMC_BWTR 寄存器内的值 * - ASYNCWAIT - 15 - RW - 0x0 - - 异步传输期间的等待信号 - 1'b0: 运行异步协议时不考虑 NWAIT 信号 - 1'b1: 运行异步协议时考虑 NWAIT 信号 * - CPSIZE - 18:16 - RW - 0x0 - - 页面大小:这些用于 Cellular RAM 1.5,它不允许突发访问跨越页面之间的地址边界。配置这些位后,当达到存储器页面大小时,GMC 控制器会自动拆分突发访问(页面大小请参阅存储器数据手册) - 3'b000: 跨页面边界时不拆分突发(复位后默认) - 3'b001: 128 字节 - 3'b010: 256 字节 - 3'b100: 1024 字节 * - CBURSTRW - 19 - RW - 0x0 - - 写突发使能 - 1'b0: 写操作始终以异步模式执行 - 1'b1: 写操作以同步模式执行 * - CCLKEN - 20 - RW - 0x0 - - 连续时钟使能 - 1'b0: GMC_CLK 仅在同步存储器访问期间生成 - 1'b1: GMC_CLK 在异步和同步访问期间连续生成 * - Reserved - 31:21 - / - 0x0 - / SRAM/NOR-FLASH 片选控制寄存器(用于 BANK 2)(GMC_BCR2) ------------------------------------------------------------ 地址偏移:``0x10`` .. list-table:: 表 4.4:GMC_BCR2 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - MBKEN - 0 - RW - 0x0 - - 存储体使能位 - 1'b0: 存储体禁用 - 1'b1: 对应存储体使能 * - MUXEN - 1 - RW - 0x1 - - 地址/数据复用使能位 - 1'b0: 地址/数据非复用 - 1'b1: 地址/数据在数据总线上复用 * - MTYP - 3:2 - RW - 0x0 - - 存储器类型 - 2'b00: SRAM - 2'b01: PSRAM (CRAM) - 2'b10: NOR(oneNAND) Flash * - MWID - 5:4 - RW - 0x1 - - 存储器数据总线宽度 - 2'b00: 8位 - 2'b01: 16位 - 2'b10: 32位 * - FACCEN - 6 - RW - 0x1 - - Flash 访问使能 - 1'b0: 对应 NOR Flash 存储器访问禁用 - 1'b1: 对应 NOR Flash 存储器访问使能 * - MODEEXMC - 7 - RW - 0x0 - - EXMC 模式使能 - 1'b0: EXMC 模式禁用 - 1'b1: EXMC 模式使能 * - BURSTEN - 8 - RW - 0x0 - - 突发使能位 - 1'b0: 突发模式禁用 - 1'b1: 突发模式使能 * - WAITPOL - 9 - RW - 0x0 - - 等待信号极性位 - 1'b0: NWAIT 低电平有效 - 1'b1: NWAIT 高电平有效 * - Reserved - 10 - / - 0x0 - / * - WAITCFG - 11 - RW - 0x0 - - 等待时序配置 - 1'b0: NWAIT 信号在等待状态前一个数据周期有效 - 1'b1: NWAIT 信号在等待状态期间有效 * - WREN - 12 - RW - 0x1 - - 写使能位 - 1'b0: GMC 在存储体中禁用写操作 - 1'b1: GMC 在存储体中使能写操作 * - WAITEN - 13 - RW - 0x1 - - 等待使能位 - 1'b0: NWAIT 信号禁用 - 1'b1: NWAIT 信号使能 * - EXTMOD - 14 - RW - 0x0 - - 扩展模式使能 - 1'b0: 不考虑 GMC_BWTR 寄存器内的值 - 1'b1: 考虑 GMC_BWTR 寄存器内的值 * - ASYNCWAIT - 15 - RW - 0x0 - - 异步传输期间的等待信号 - 1'b0: 运行异步协议时不考虑 NWAIT 信号 - 1'b1: 运行异步协议时考虑 NWAIT 信号 * - CPSIZE - 18:16 - RW - 0x0 - - 页面大小:这些用于 Cellular RAM 1.5,它不允许突发访问跨越页面之间的地址边界。配置这些位后,当达到存储器页面大小时,GMC 控制器会自动拆分突发访问(页面大小请参阅存储器数据手册) - 3'b000: 跨页面边界时不拆分突发(复位后默认) - 3'b001: 128 字节 - 3'b010: 256 字节 - 3'b100: 1024 字节 * - CBURSTRW - 19 - RW - 0x0 - - 写突发使能 - 1'b0: 写操作始终以异步模式执行 - 1'b1: 写操作以同步模式执行 * - CCLKEN - 20 - RW - 0x0 - - 连续时钟使能 - 1'b0: GMC_CLK 仅在同步存储器访问期间生成 - 1'b1: GMC_CLK 在异步和同步访问期间连续生成 * - Reserved - 31:21 - / - 0x0 - / SRAM/NOR-FLASH 片选控制寄存器(用于 BANK 3)(GMC_BCR3) ------------------------------------------------------------ 地址偏移:``0x18`` .. list-table:: 表 4.5:GMC_BCR3 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - MBKEN - 0 - RW - 0x0 - - 存储体使能位 - 1'b0: 存储体禁用 - 1'b1: 对应存储体使能 * - MUXEN - 1 - RW - 0x1 - - 地址/数据复用使能位 - 1'b0: 地址/数据非复用 - 1'b1: 地址/数据在数据总线上复用 * - MTYP - 3:2 - RW - 0x0 - - 存储器类型 - 2'b00: SRAM - 2'b01: PSRAM (CRAM) - 2'b10: NOR(oneNAND) Flash * - MWID - 5:4 - RW - 0x1 - - 存储器数据总线宽度 - 2'b00: 8位 - 2'b01: 16位 - 2'b10: 32位 * - FACCEN - 6 - RW - 0x1 - - Flash 访问使能 - 1'b0: 对应 NOR Flash 存储器访问禁用 - 1'b1: 对应 NOR Flash 存储器访问使能 * - MODEEXMC - 7 - RW - 0x0 - - EXMC 模式使能 - 1'b0: EXMC 模式禁用 - 1'b1: EXMC 模式使能 * - BURSTEN - 8 - RW - 0x0 - - 突发使能位 - 1'b0: 突发模式禁用 - 1'b1: 突发模式使能 * - WAITPOL - 9 - RW - 0x0 - - 等待信号极性位 - 1'b0: NWAIT 低电平有效 - 1'b1: NWAIT 高电平有效 * - Reserved - 10 - / - 0x0 - / * - WAITCFG - 11 - RW - 0x0 - - 等待时序配置 - 1'b0: NWAIT 信号在等待状态前一个数据周期有效 - 1'b1: NWAIT 信号在等待状态期间有效 * - WREN - 12 - RW - 0x1 - - 写使能位 - 1'b0: GMC 在存储体中禁用写操作 - 1'b1: GMC 在存储体中使能写操作 * - WAITEN - 13 - RW - 0x1 - - 等待使能位 - 1'b0: NWAIT 信号禁用 - 1'b1: NWAIT 信号使能 * - EXTMOD - 14 - RW - 0x0 - - 扩展模式使能 - 1'b0: 不考虑 GMC_BWTR 寄存器内的值 - 1'b1: 考虑 GMC_BWTR 寄存器内的值 * - ASYNCWAIT - 15 - RW - 0x0 - - 异步传输期间的等待信号 - 1'b0: 运行异步协议时不考虑 NWAIT 信号 - 1'b1: 运行异步协议时考虑 NWAIT 信号 * - CPSIZE - 18:16 - RW - 0x0 - - 页面大小:这些用于 Cellular RAM 1.5,它不允许突发访问跨越页面之间的地址边界。配置这些位后,当达到存储器页面大小时,GMC 控制器会自动拆分突发访问(页面大小请参阅存储器数据手册) - 3'b000: 跨页面边界时不拆分突发(复位后默认) - 3'b001: 128 字节 - 3'b010: 256 字节 - 3'b100: 1024 字节 * - CBURSTRW - 19 - RW - 0x0 - - 写突发使能 - 1'b0: 写操作始终以异步模式执行 - 1'b1: 写操作以同步模式执行 * - CCLKEN - 20 - RW - 0x0 - - 连续时钟使能 - 1'b0: GMC_CLK 仅在同步存储器访问期间生成 - 1'b1: GMC_CLK 在异步和同步访问期间连续生成 * - Reserved - 31:21 - / - 0x0 - / SRAM/NOR-FLASH 片选时序寄存器(用于 BANK 0)(GMC_BTR0) ------------------------------------------------------------ 该寄存器包含每个存储器组的控制信息,用于 SRAM、PSRAM 和 NOR Flash 存储器。如果 GMC_BCR0 寄存器中的 EXTMOD 位被置位,则该寄存器分为写访问和读访问两部分,即有两个寄存器可用:一个用于配置读访问(本寄存器),一个用于配置写访问(GMC_BWTR0 寄存器)。 地址偏移:``0x4`` .. list-table:: 表 4.6:GMC_BTR0 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - ADDSET - 3:0 - RW - 0x4 - 地址建立阶段持续时间:ADDSET 阶段持续时间 = ADDSET × 总线时钟周期 * - ADDHLD - 7:4 - RW - 0xF - 地址保持阶段持续时间:ADDHLD 阶段持续时间 = ADDHLD × 总线时钟周期(ADDHLD 不能设为 0 * - DATAST - 15:8 - RW - 0x4 - 数据阶段持续时间:DATAST 阶段持续时间 = DATAST × 总线时钟周期(DATAST 不能设为 0) * - BUSTURN - 19:16 - RW - 0xF - 总线周转阶段持续时间:BUSTURN 阶段持续时间 = BUSTURN × 总线时钟周期(BUSTURN 不能设为 0) * - CLKDIV - 23:20 - RW - 0xF - 时钟分频比(用于 GMC_CLK 信号):GMC_CLK 周期 = (CLKDIV + 1) × bus_clk 周期(CLKDIV 不能设为 0) * - DATLAT - 27:24 - RW - 0xF - 同步存储器的数据延迟:首次突发访问的数据延迟为 (DATLAT + 2) 个 GMC_CLK 时钟周期 * - ACCMOD - 29:28 - RW - 0x0 - - 访问模式 - 2'b00:访问模式 A - 2'b01:访问模式 B - 2'b10:访问模式 C - 2'b11:访问模式 D * - EARLYTIME - 31:30 - RW - 0x1 - 在异步模式下,NWE 的上升沿与 NE 的上升沿之间的总线时钟周期数。仅适用于写事务。 注意: - 在同步访问中,DATAST 为无关项。 - 在同步访问中,ADDHLD 不使用,地址保持阶段始终为 1 个存储器时钟周期。 - 在同步访问中,ADDSET 为无关项。 - 在复用模式或模式 D 中,ADDSET 的最小值为 1。 - 在模式 1 和 PSRAM 存储器中,ADDSET 的最小值为 1。 PSRAM(CRAM)由于内部刷新而具有可变延迟。因此,这些存储器在整个延迟阶段发出 NWAIT 信号以根据需要延长延迟。 对于 PSRAM(CRAM),填充的 DATLAT 必须设置为 0,以便 GMC 尽快退出其延迟阶段并开始采样来自存储器的 NWAIT,然后在存储器准备就绪时开始读取或写入。 此方法也可用于支持发出 NWAIT 信号的最新同步 Flash 存储器,这与不发出 NWAIT 信号的旧式 Flash 存储器不同(请检查所使用的具体 Flash 存储器的数据手册)。 SRAM/NOR-FLASH 数据建立时间预置寄存器(用于 BANK 0)(GMC_BTRPRE0) -------------------------------------------------------------------- 该寄存器包含异步模式下每个存储器组的控制信息,用于 SRAM、PSRAM 和 NOR Flash 存储器。如果启用 EXMC 模式,则 datastpre 个 bus_clk 是数据在 NWE 下降沿之前的建立时间,而 datastpre+2 个 bus_clk 是数据在 NOE 上升沿之前的建立时间。如果禁用 EXMC 模式,则这些位无效。 地址偏移:``0x20`` .. list-table:: 表 4.7:GMC_BTRPRE0 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - DATASTPRE - 7:0 - RW - 0xF - 数据在 NWE 下降沿之前的建立时间: datastpre × 总线时钟周期 * - 保留 - 31:8 - / - 0x0 - / SRAM/NOR-FLASH 片选时序寄存器(用于 BANK 1)(GMC_BTR1) ------------------------------------------------------------ 该寄存器包含每个存储器组的控制信息,用于 SRAM、PSRAM 和 NOR Flash 存储器。如果 GMC_BCR1 寄存器中的 EXTMOD 位被置位,则该寄存器分为写访问和读访问两部分,即有两个寄存器可用:一个用于配置读访问(本寄存器),一个用于配置写访问(GMC_BWTR1 寄存器)。 地址偏移:``0xC`` .. list-table:: 表 4.8:GMC_BTR1 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - ADDSET - 3:0 - RW - 0x4 - 地址建立阶段持续时间:ADDSET 阶段持续时间 = ADDSET × 总线时钟周期 * - ADDHLD - 7:4 - RW - 0xF - 地址保持阶段持续时间:ADDHLD 阶段持续时间 = ADDHLD × 总线时钟周期(ADDHLD 不能设为 0 * - DATAST - 15:8 - RW - 0x4 - 数据阶段持续时间:DATAST 阶段持续时间 = DATAST × 总线时钟周期(DATAST 不能设为 0) * - BUSTURN - 19:16 - RW - 0xF - 总线周转阶段持续时间:BUSTURN 阶段持续时间 = BUSTURN × 总线时钟周期(BUSTURN 不能设为 0) * - CLKDIV - 23:20 - RW - 0xF - 时钟分频比(用于 GMC_CLK 信号):GMC_CLK 周期 = (CLKDIV + 1) × bus_clk 周期(CLKDIV 不能设为 0) * - DATLAT - 27:24 - RW - 0xF - 同步存储器的数据延迟:首次突发访问的数据延迟为 (DATLAT + 2) 个 GMC_CLK 时钟周期 * - ACCMOD - 29:28 - RW - 0x0 - - 访问模式 - 2'b00:访问模式 A - 2'b01:访问模式 B - 2'b10:访问模式 C - 2'b11:访问模式 D * - EARLYTIME - 31:30 - RW - 0x1 - 在异步模式下,NWE 的上升沿与 NE 的上升沿之间的总线时钟周期数。仅适用于写事务。 注意: - 在同步访问中,DATAST 为无关项。 - 在同步访问中,ADDHLD 不使用,地址保持阶段始终为 1 个存储器时钟周期。 - 在同步访问中,ADDSET 为无关项。 - 在复用模式或模式 D 中,ADDSET 的最小值为 1。 - 在模式 1 和 PSRAM 存储器中,ADDSET 的最小值为 1。 PSRAM(CRAM)由于内部刷新而具有可变延迟。因此,这些存储器在整个延迟阶段发出 NWAIT 信号以根据需要延长延迟。 对于 PSRAM(CRAM),填充的 DATLAT 必须设置为 0,以便 GMC 尽快退出其延迟阶段并开始采样来自存储器的 NWAIT,然后在存储器准备就绪时开始读取或写入。 此方法也可用于支持发出 NWAIT 信号的最新同步 Flash 存储器,这与不发出 NWAIT 信号的旧式 Flash 存储器不同(请检查所使用的具体 Flash 存储器的数据手册)。 SRAM/NOR-FLASH 数据建立时间预置寄存器(用于 BANK 1)(GMC_BTRPRE1) -------------------------------------------------------------------- 该寄存器包含异步模式下每个存储器组的控制信息,用于 SRAM、PSRAM 和 NOR Flash 存储器。如果启用 EXMC 模式,则 datastpre 个 bus_clk 是数据在 NWE 下降沿之前的建立时间,而 datastpre+2 个 bus_clk 是数据在 NOE 上升沿之前的建立时间。如果禁用 EXMC 模式,则这些位无效。 地址偏移:``0x28`` .. list-table:: 表 4.9:GMC_BTRPRE1 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - DATASTPRE - 7:0 - RW - 0xF - 数据在 NWE 下降沿之前的建立时间: datastpre × 总线时钟周期 * - 保留 - 31:8 - / - 0x0 - / SRAM/NOR-FLASH 片选时序寄存器(用于 BANK 2)(GMC_BTR2) ------------------------------------------------------------ 该寄存器包含每个存储器组的控制信息,用于 SRAM、PSRAM 和 NOR Flash 存储器。如果 GMC_BCR2 寄存器中的 EXTMOD 位被置位,则该寄存器分为写访问和读访问两部分,即有两个寄存器可用:一个用于配置读访问(本寄存器),一个用于配置写访问(GMC_BWTR2 寄存器)。 地址偏移:``0x14`` .. list-table:: 表 4.10:GMC_BTR2 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - ADDSET - 3:0 - RW - 0x4 - 地址建立阶段持续时间:ADDSET 阶段持续时间 = ADDSET × 总线时钟周期 * - ADDHLD - 7:4 - RW - 0xF - 地址保持阶段持续时间:ADDHLD 阶段持续时间 = ADDHLD × 总线时钟周期(ADDHLD 不能设为 0 * - DATAST - 15:8 - RW - 0x4 - 数据阶段持续时间:DATAST 阶段持续时间 = DATAST × 总线时钟周期(DATAST 不能设为 0) * - BUSTURN - 19:16 - RW - 0xF - 总线周转阶段持续时间:BUSTURN 阶段持续时间 = BUSTURN × 总线时钟周期(BUSTURN 不能设为 0) * - CLKDIV - 23:20 - RW - 0xF - 时钟分频比(用于 GMC_CLK 信号):GMC_CLK 周期 = (CLKDIV + 1) × bus_clk 周期(CLKDIV 不能设为 0) * - DATLAT - 27:24 - RW - 0xF - 同步存储器的数据延迟:首次突发访问的数据延迟为 (DATLAT + 2) 个 GMC_CLK 时钟周期 * - ACCMOD - 29:28 - RW - 0x0 - - 访问模式 - 2'b00:访问模式 A - 2'b01:访问模式 B - 2'b10:访问模式 C - 2'b11:访问模式 D * - EARLYTIME - 31:30 - RW - 0x1 - 在异步模式下,NWE 的上升沿与 NE 的上升沿之间的总线时钟周期数。仅适用于写事务。 注意: - 在同步访问中,DATAST 为无关项。 - 在同步访问中,ADDHLD 不使用,地址保持阶段始终为 1 个存储器时钟周期。 - 在同步访问中,ADDSET 为无关项。 - 在复用模式或模式 D 中,ADDSET 的最小值为 1。 - 在模式 1 和 PSRAM 存储器中,ADDSET 的最小值为 1。 PSRAM(CRAM)由于内部刷新而具有可变延迟。因此,这些存储器在整个延迟阶段发出 NWAIT 信号以根据需要延长延迟。 对于 PSRAM(CRAM),填充的 DATLAT 必须设置为 0,以便 GMC 尽快退出其延迟阶段并开始采样来自存储器的 NWAIT,然后在存储器准备就绪时开始读取或写入。 此方法也可用于支持发出 NWAIT 信号的最新同步 Flash 存储器,这与不发出 NWAIT 信号的旧式 Flash 存储器不同(请检查所使用的具体 Flash 存储器的数据手册)。 SRAM/NOR-FLASH 数据建立时间预置寄存器(用于 BANK 2)(GMC_BTRPRE2) -------------------------------------------------------------------- 该寄存器包含异步模式下每个存储器组的控制信息,用于 SRAM、PSRAM 和 NOR Flash 存储器。如果启用 EXMC 模式,则 datastpre 个 bus_clk 是数据在 NWE 下降沿之前的建立时间,而 datastpre+2 个 bus_clk 是数据在 NOE 上升沿之前的建立时间。如果禁用 EXMC 模式,则这些位无效。 地址偏移:``0x30`` .. list-table:: 表 4.11:GMC_BTRPRE2 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - DATASTPRE - 7:0 - RW - 0xF - 数据在 NWE 下降沿之前的建立时间: datastpre × 总线时钟周期 * - 保留 - 31:8 - / - 0x0 - / SRAM/NOR-FLASH 片选时序寄存器(用于 BANK 3)(GMC_BTR3) ------------------------------------------------------------ 该寄存器包含每个存储器组的控制信息,用于 SRAM、PSRAM 和 NOR Flash 存储器。如果 GMC_BCR3 寄存器中的 EXTMOD 位被置位,则该寄存器分为写访问和读访问两部分,即有两个寄存器可用:一个用于配置读访问(本寄存器),一个用于配置写访问(GMC_BWTR3 寄存器)。 地址偏移:``0x1C`` .. list-table:: 表 4.12:GMC_BTR3 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - ADDSET - 3:0 - RW - 0x4 - 地址建立阶段持续时间:ADDSET 阶段持续时间 = ADDSET × 总线时钟周期 * - ADDHLD - 7:4 - RW - 0xF - 地址保持阶段持续时间:ADDHLD 阶段持续时间 = ADDHLD × 总线时钟周期(ADDHLD 不能设为 0 * - DATAST - 15:8 - RW - 0x4 - 数据阶段持续时间:DATAST 阶段持续时间 = DATAST × 总线时钟周期(DATAST 不能设为 0) * - BUSTURN - 19:16 - RW - 0xF - 总线周转阶段持续时间:BUSTURN 阶段持续时间 = BUSTURN × 总线时钟周期(BUSTURN 不能设为 0) * - CLKDIV - 23:20 - RW - 0xF - 时钟分频比(用于 GMC_CLK 信号):GMC_CLK 周期 = (CLKDIV + 1) × bus_clk 周期(CLKDIV 不能设为 0) * - DATLAT - 27:24 - RW - 0xF - 同步存储器的数据延迟:首次突发访问的数据延迟为 (DATLAT + 2) 个 GMC_CLK 时钟周期 * - ACCMOD - 29:28 - RW - 0x0 - - 访问模式 - 2'b00:访问模式 A - 2'b01:访问模式 B - 2'b10:访问模式 C - 2'b11:访问模式 D * - EARLYTIME - 31:30 - RW - 0x1 - 在异步模式下,NWE 的上升沿与 NE 的上升沿之间的总线时钟周期数。仅适用于写事务。 注意: - 在同步访问中,DATAST 为无关项。 - 在同步访问中,ADDHLD 不使用,地址保持阶段始终为 1 个存储器时钟周期。 - 在同步访问中,ADDSET 为无关项。 - 在复用模式或模式 D 中,ADDSET 的最小值为 1。 - 在模式 1 和 PSRAM 存储器中,ADDSET 的最小值为 1。 PSRAM(CRAM)由于内部刷新而具有可变延迟。因此,这些存储器在整个延迟阶段发出 NWAIT 信号以根据需要延长延迟。 对于 PSRAM(CRAM),填充的 DATLAT 必须设置为 0,以便 GMC 尽快退出其延迟阶段并开始采样来自存储器的 NWAIT,然后在存储器准备就绪时开始读取或写入。 此方法也可用于支持发出 NWAIT 信号的最新同步 Flash 存储器,这与不发出 NWAIT 信号的旧式 Flash 存储器不同(请检查所使用的具体 Flash 存储器的数据手册)。 SRAM/NOR-FLASH 数据建立时间预置寄存器(用于 BANK 3)(GMC_BTRPRE3) -------------------------------------------------------------------- 该寄存器包含异步模式下每个存储器组的控制信息,用于 SRAM、PSRAM 和 NOR Flash 存储器。如果启用 EXMC 模式,则 datastpre 个 bus_clk 是数据在 NWE 下降沿之前的建立时间,而 datastpre+2 个 bus_clk 是数据在 NOE 上升沿之前的建立时间。如果禁用 EXMC 模式,则这些位无效。 地址偏移:``0x38`` .. list-table:: 表 4.13:GMC_BTRPRE3 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - DATASTPRE - 7:0 - RW - 0xF - 数据在 NWE 下降沿之前的建立时间: datastpre × 总线时钟周期 * - 保留 - 31:8 - / - 0x0 - / SRAM/NOR-FLASH 写时序寄存器(用于 BANK 0)(GMC_BWTR0) ------------------------------------------------------------ 该寄存器包含每个存储器组的控制信息。用于 SRAM、PSRAM 和 NOR Flash 存储器。当 GMC_BCR0 寄存器中的 EXTMOD 位置位时,此寄存器对写访问有效。 地址偏移:``0x24`` .. list-table:: 表 4.14:GMC_BWTR0 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - ADDSET - 3:0 - RW - 0x4 - 地址建立阶段持续时间:ADDSET 阶段持续时间 = ADDSET × 总线时钟周期 * - ADDHLD - 7:4 - RW - 0xF - 地址保持阶段持续时间:ADDHLD 阶段持续时间 = ADDHLD × 总线时钟周期(ADDHLD 不能设为 0 * - DATAST - 15:8 - RW - 0x4 - 数据阶段持续时间:DATAST 阶段持续时间 = DATAST × 总线时钟周期(DATAST 不能设为 0) * - BUSTURN - 19:16 - RW - 0xF - 总线周转阶段持续时间:BUSTURN 阶段持续时间 = BUSTURN × 总线时钟周期(BUSTURN 不能设为 0) * - 保留 - 27:20 - / - 0x0 - / * - ACCMOD - 29:28 - RW - 0x0 - - 访问模式 - 2'b00:访问模式 A - 2'b01:访问模式 B - 2'b10:访问模式 C - 2'b11:访问模式 D * - 保留 - 31:30 - / - 0x0 - / 注意: - 在同步 NOR Flash 访问中,ADDHLD 不使用,地址保持阶段始终为 1 个 Flash 时钟周期。 - 在同步访问中,ADDSET 不使用,地址建立阶段始终为 1 个 Flash 时钟周期。 - 在复用模式中,ADDSET 的最小值为 1。 SRAM/NOR-FLASH 写时序寄存器(用于 BANK 1)(GMC_BWTR1) ------------------------------------------------------------ 该寄存器包含每个存储器组的控制信息。用于 SRAM、PSRAM 和 NOR Flash 存储器。当 GMC_BCR1 寄存器中的 EXTMOD 位置位时,此寄存器对写访问有效。 地址偏移:``0x2C`` .. list-table:: 表 4.15:GMC_BWTR1 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - ADDSET - 3:0 - RW - 0x4 - 地址建立阶段持续时间:ADDSET 阶段持续时间 = ADDSET × 总线时钟周期 * - ADDHLD - 7:4 - RW - 0xF - 地址保持阶段持续时间:ADDHLD 阶段持续时间 = ADDHLD × 总线时钟周期(ADDHLD 不能设为 0 * - DATAST - 15:8 - RW - 0x4 - 数据阶段持续时间:DATAST 阶段持续时间 = DATAST × 总线时钟周期(DATAST 不能设为 0) * - BUSTURN - 19:16 - RW - 0xF - 总线周转阶段持续时间:BUSTURN 阶段持续时间 = BUSTURN × 总线时钟周期(BUSTURN 不能设为 0) * - 保留 - 27:20 - / - 0x0 - / * - ACCMOD - 29:28 - RW - 0x0 - - 访问模式 - 2'b00:访问模式 A - 2'b01:访问模式 B - 2'b10:访问模式 C - 2'b11:访问模式 D * - 保留 - 31:30 - / - 0x0 - / 注意: - 在同步 NOR Flash 访问中,ADDHLD 不使用,地址保持阶段始终为 1 个 Flash 时钟周期。 - 在同步访问中,ADDSET 不使用,地址建立阶段始终为 1 个 Flash 时钟周期。 - 在复用模式中,ADDSET 的最小值为 1。 SRAM/NOR-FLASH 写时序寄存器(用于 BANK 2)(GMC_BWTR2) ------------------------------------------------------------ 该寄存器包含每个存储器组的控制信息。用于 SRAM、PSRAM 和 NOR Flash 存储器。当 GMC_BCR2 寄存器中的 EXTMOD 位置位时,此寄存器对写访问有效。 地址偏移:``0x34`` .. list-table:: 表 4.16:GMC_BWTR2 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - ADDSET - 3:0 - RW - 0x4 - 地址建立阶段持续时间:ADDSET 阶段持续时间 = ADDSET × 总线时钟周期 * - ADDHLD - 7:4 - RW - 0xF - 地址保持阶段持续时间:ADDHLD 阶段持续时间 = ADDHLD × 总线时钟周期(ADDHLD 不能设为 0 * - DATAST - 15:8 - RW - 0x4 - 数据阶段持续时间:DATAST 阶段持续时间 = DATAST × 总线时钟周期(DATAST 不能设为 0) * - BUSTURN - 19:16 - RW - 0xF - 总线周转阶段持续时间:BUSTURN 阶段持续时间 = BUSTURN × 总线时钟周期(BUSTURN 不能设为 0) * - 保留 - 27:20 - / - 0x0 - / * - ACCMOD - 29:28 - RW - 0x0 - - 访问模式 - 2'b00:访问模式 A - 2'b01:访问模式 B - 2'b10:访问模式 C - 2'b11:访问模式 D * - 保留 - 31:30 - / - 0x0 - / 注意: - 在同步 NOR Flash 访问中,ADDHLD 不使用,地址保持阶段始终为 1 个 Flash 时钟周期。 - 在同步访问中,ADDSET 不使用,地址建立阶段始终为 1 个 Flash 时钟周期。 - 在复用模式中,ADDSET 的最小值为 1。 SRAM/NOR-FLASH 写时序寄存器(用于 BANK 3)(GMC_BWTR3) ------------------------------------------------------------ 该寄存器包含每个存储器组的控制信息。用于 SRAM、PSRAM 和 NOR Flash 存储器。当 GMC_BCR3 寄存器中的 EXTMOD 位置位时,此寄存器对写访问有效。 地址偏移:``0x3C`` .. list-table:: 表 4.17:GMC_BWTR3 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - ADDSET - 3:0 - RW - 0x4 - 地址建立阶段持续时间:ADDSET 阶段持续时间 = ADDSET × 总线时钟周期 * - ADDHLD - 7:4 - RW - 0xF - 地址保持阶段持续时间:ADDHLD 阶段持续时间 = ADDHLD × 总线时钟周期(ADDHLD 不能设为 0 * - DATAST - 15:8 - RW - 0x4 - 数据阶段持续时间:DATAST 阶段持续时间 = DATAST × 总线时钟周期(DATAST 不能设为 0) * - BUSTURN - 19:16 - RW - 0xF - 总线周转阶段持续时间:BUSTURN 阶段持续时间 = BUSTURN × 总线时钟周期(BUSTURN 不能设为 0) * - 保留 - 27:20 - / - 0x0 - / * - ACCMOD - 29:28 - RW - 0x0 - - 访问模式 - 2'b00:访问模式 A - 2'b01:访问模式 B - 2'b10:访问模式 C - 2'b11:访问模式 D * - 保留 - 31:30 - / - 0x0 - / 注意: - 在同步 NOR Flash 访问中,ADDHLD 不使用,地址保持阶段始终为 1 个 Flash 时钟周期。 - 在同步访问中,ADDSET 不使用,地址建立阶段始终为 1 个 Flash 时钟周期。 - 在复用模式中,ADDSET 的最小值为 1。 SRAM/NOR-FLASH 超时寄存器(用于 BANK0~3)(GMC_BTO) ------------------------------------------------------------ SDRAM 控制器长时间占用总线。当其占用时间超过特定值时,NOR/PSRAM 控制器的事务会被强制结束。 地址偏移:``0x50`` .. list-table:: 表 4.18:GMC_BTO 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - TIME - 31:0 - RW - 0x78 - SDRAM 控制器长时间占用总线。当其占用时间超过特定值时,NOR/PSRAM 控制器的事务会被强制结束。 SDRAM 控制寄存器 (GMC_SDCR0) ------------------------------------------------- 地址偏移:``0x60`` .. list-table:: 表 4.19:GMC_SDCR0 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - NC - 1:0 - RW - 0x2 - - 列地址位数 - 2'b00:8位 - 2'b01:9位 - 2'b10:10位 - 2'b11:11位 * - NR - 3:2 - RW - 0x2 - - 行地址位数 - 2'b00:11位 - 2'b01:12位 - 2'b10:13位 - 2'b11:保留 * - MWID - 5:4 - RW - 0x1 - - 存储器数据总线宽度 - 2'b00: 8位 - 2'b01: 16位 - 2'b10: 32位 - 2'b11:保留 * - NB - 6 - RW - 0x1 - - 内部存储组数量 - 1'b0: 2个内部存储组 - 1'b1: 4个内部存储组 * - WE - 7 - RW - 0x0 - - 写使能 - 1'b0: 写访问使能 - 1'b1: 写访问被忽略 * - SDCLK - 10:8 - RW - 0x1 - - SDC 时钟配置 - 3'b001: sdc 时钟周期为 gmc 时钟周期的 1/2 - 3'b011: sdc 时钟周期为 gmc 时钟周期的 1/4 - 3'b101: sdc 时钟周期为 gmc 时钟周期的 1/6 - 3'b111: sdc 时钟周期为 gmc 时钟周期的 1/8 * - Reserved - 31:11 - / - 0x0 - / SDRAM 时序寄存器 (GMC_SDTR0) ------------------------------------------------- 地址偏移:``0x68`` .. list-table:: 表 4.20:GMC_SDTR0 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - TMRD - 3:0 - RW - 0x0 - - 加载模式寄存器到激活的延迟 - 4'b0000:1个 gmc 时钟周期 - 4'b0001:2个 gmc 时钟周期 - 4'b0010:3个 gmc 时钟周期 - ... - 4'b1111:16个 gmc 时钟周期 * - TXSR - 7:4 - RW - 0x0 - - 发出激活命令前退出自刷新的延迟 - 4'b0000:1个 gmc 时钟周期 - 4'b0001:2个 gmc 时钟周期 - 4'b0010:3个 gmc 时钟周期 - ... - 4'b1111:16个 gmc 时钟周期 * - TRAS - 11:8 - RW - 0x0 - - 激活到预充电的延迟 - 4'b0000:1个 gmc 时钟周期 - 4'b0001:2个 gmc 时钟周期 - 4'b0010:3个 gmc 时钟周期 - ... - 4'b1111:16个 gmc 时钟周期 * - TRC - 15:12 - RW - 0x8 - - 行激活到激活的延迟,也是自动刷新周期 - 4'b0000:1个 gmc 时钟周期 - 4'b0001:2个 gmc 时钟周期 - 4'b0010:3个 gmc 时钟周期 - ... - 4'b1111:16个 gmc 时钟周期 * - TWR - 19:16 - RW - 0x1 - - 写恢复延迟 - 4'b0000:1个 gmc 时钟周期 - 4'b0001:2个 gmc 时钟周期 - 4'b0010:3个 gmc 时钟周期 - ... - 4'b1111:16个 gmc 时钟周期 * - TRP - 23:20 - RW - 0x1 - - 发出另一个命令前行预充电的延迟 - 4'b0000:1个 gmc 时钟周期 - 4'b0001:2个 gmc 时钟周期 - 4'b0010:3个 gmc 时钟周期 - ... - 4'b1111:16个 gmc 时钟周期 * - TRCD - 27:24 - RW - 0x1 - - 行到列的延迟(即激活到读/写命令的延迟) - 4'b0000:1个 gmc 时钟周期 - 4'b0001:2个 gmc 时钟周期 - 4'b0010:3个 gmc 时钟周期 - ... - 4'b1111:16个 gmc 时钟周期 * - TPWRUP - 31:28 - RW - 0x0 - - CKE 断言后的延迟时间 - 4'b0000:1个 gmc 时钟周期 - 4'b0001:2个 gmc 时钟周期 - 4'b0010:3个 gmc 时钟周期 - ... - 4'b1111:16个 gmc 时钟周期 SDRAM 命令模式寄存器 (GMC_SDCMR) ------------------------------------------------- 地址偏移:``0x70`` .. list-table:: 表 4.21:GMC_SDCMR 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - MODE - 3:0 - RW - 0x0 - - 命令模式 - 4'b0000:正常操作(读/写) - 4'b0001:进入自刷新 - 4'b0010:低功耗模式 - 其他:保留 * - CTB - 5:4 - RW - 0x0 - - 命令目标 rank0/1 - 2'b00:命令未发向 rank0/1 - 2'b01:命令发向 rank0 - 2'b10:命令发向 rank1 - 2'b11:命令发向 rank0/1 * - NRFS - 9:6 - RW - 0x1 - - SDRAM 初始化过程中发送的刷新命令数量 - 4'b0000:1 - 4'b0001:2 - 4'b0010:3 - ... - 4'b1111:16 * - MRD - 22:10 - RW - 0x0 - - SDRAM 模式寄存器内容 * - 保留 - 31:23 - / - 0x0 - / SDRAM 使能寄存器 (GMC_SDEN) ------------------------------------------------- 地址偏移:``0x74`` .. list-table:: 表 4.22:GMC_SDEN 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - INIT_EN - 0 - RW - 0x0 - - 触发初始化过程 - 1'b0:无操作 - 1'b1:开始初始化 * - 保留 - 31:1 - / - 0x0 - / SDRAM 刷新定时器控制寄存器 (GMC_SDRTR) ------------------------------------------------- 地址偏移:``0x78`` .. list-table:: 表 4.23:GMC_SDRTR 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - CRE - 0 - RW - 0x0 - - 清除刷新错误标志 - 1'b0:无效果 - 1'b1:清除刷新错误标志 * - TREF - 13:1 - RW - 0xc35 - 刷新时间周期 * - 保留 - 31:14 - / - 0x0 - / SDRAM 状态寄存器 (GMC_SDSR) ------------------------------------- 地址偏移:``0x7C`` .. list-table:: 表 4.24:GMC_SDSR 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - MODES0 - 1:0 - RO - 0x0 - - BANK0 的状态模式 - 2'b00: 正常操作,读/写进行中 - 2'b01: 自刷新模式 - 2'b10: 软件掉电模式 - 2'b11: 硬件掉电模式 * - MODES1 - 3:2 - RO - 0x0 - - BANK1 的状态模式 - 2'b00: 正常操作,读/写进行中 - 2'b01: 自刷新模式 - 2'b10: 软件掉电模式 * - INIT_STAT - 4 - RO - 0x0 - - 初始化状态 - 1'b0: 初始化未完成 - 1'b1: 初始化完成 * - 保留 - 31:5 - / - 0x0 - / SDRAM 杂项寄存器 (GMC_MISC) ------------------------------------- 地址偏移:``0x80`` .. list-table:: 表 4.25:GMC_MISC 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - AREF_REQ - 7:0 - RW - 0x80 - - 在内部自动刷新请求断言前的这么多时钟周期(AREF_REQ × 8)内,需要将 SDRAM 总线的请求传输到 Flash 控制器。 - 8'b00000000:0个 gmc 时钟周期 - 8'b00000001:8个 gmc 时钟周期 - 8'b00000010:16个 gmc 时钟周期 - ... - 8'b11111111:2040个 gmc 时钟周期 * - PWD_ENT - 15:8 - RW - 0x80 - - 在命令通道空闲这么多时钟周期(PWD_ENT × 16)后,SDRAM 控制器自动将 SDRAM 置于掉电模式。 - 8'b00000000:0个 gmc 时钟周期 - 8'b00000001:16个 gmc 时钟周期 - 8'b00000010:32个 gmc 时钟周期 - ... - 8'b11111111:4080个 gmc 时钟周期 * - MAP_MODE - 16 - RW - 0x0 - - 地址映射模式 - 1'b0: bank_row_column - 1'b1: row_bank_column * - XOP_STATE - 21:17 - RO - 0x0 - 全局有限状态机状态,用于调试 * - AREF_ERROR - 22 - RO - 0x0 - 自动刷新错误标志,用于调试。 * - 保留 - 31:23 - / - 0x0 - / GMC 版本寄存器 (GMCVER) ------------------------------------- 地址偏移:``0x84`` .. list-table:: 表 4.26:GMCVER 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - IDVAL - 23:0 - RO - 0X10301 - GMC 版本 ID