GPMC (通用用途存储控制器)¶
GPMC 是一种统一的存储控制器,专门用于连接外部存储设备,如
异步 SRAM 存储器和特定于应用的集成电路设备。
异步、同步和页面模式突发 NOR 闪存设备 NAND 闪存
伪 SRAM 设备
GPMC 位于德州仪器 SoC(基于 OMAP)上。IP 详细信息: https://www.ti.com/lit/pdf/spruh73 第 7.1 节
GPMC 通用时序计算:¶
GPMC 具有必须编程的时序,以便外设正常工作,而外设具有另一组时序。 为了让外设与 gpmc 一起工作,必须将外设时序转换为 gpmc 可以理解的形式。 它的转换方式取决于连接的外设。 此外,某些 gpmc 时序取决于 gpmc 时钟频率。 因此,开发了一种通用时序例程来实现上述要求。
通用例程提供了一种从 gpmc 外设时序计算 gpmc 时序的通用方法。 必须使用连接到 gpmc 的外设的数据手册中的时序来更新 struct gpmc_device_timings 字段。 一些外设时序可以以时间或周期为单位提供,已经提供了处理这种情况的规定(请参阅 struct gpmc_device_timings 定义)。 可能会发生外设数据手册中指定的时序不在时序结构中。 在这种情况下,尝试将外设时序与可用的时序相关联。 如果这不起作用,请尝试添加外设所需的新字段,指导通用时序例程处理它,确保它不会破坏任何现有内容。 然后可能存在外设数据手册未提及 struct gpmc_device_timings 的某些字段的情况,将这些条目归零。
通用时序例程已经过验证,可以正确地在多个 onenand 和 tusb6010 外设上工作。
友情提示:通用时序例程是基于对 gpmc 时序、外设时序、可用的自定义时序例程的理解、一种没有大多数数据手册和硬件的逆向工程(确切地说,主线中没有自定义时序例程支持的任何东西)以及通过模拟开发的。
gpmc 时序对外设时序的依赖性
[<gpmc_timing>: <外设时序 1>, <外设时序 2> ...]
通用
- cs_on
t_ceasu
- adv_on
t_avdasu, t_ceavd
同步通用
- sync_clk
clk
- 页面突发访问
t_bacc
- clk_activation
t_ces, t_avds
读取异步复用
- adv_rd_off
t_avdp_r
- oe_on
t_oeasu, t_aavdh
- 访问
t_iaa, t_oe, t_ce, t_aa
- rd_cycle
t_rd_cycle, t_cez_r, t_oez
读取异步非复用
- adv_rd_off
t_avdp_r
- oe_on
t_oeasu
- 访问
t_iaa, t_oe, t_ce, t_aa
- rd_cycle
t_rd_cycle, t_cez_r, t_oez
读取同步复用
- adv_rd_off
t_avdp_r, t_avdh
- oe_on
t_oeasu, t_ach, cyc_aavdh_oe
- 访问
t_iaa, cyc_iaa, cyc_oe
- rd_cycle
t_cez_r, t_oez, t_ce_rdyz
读取同步非复用
- adv_rd_off
t_avdp_r
- oe_on
t_oeasu
- 访问
t_iaa, cyc_iaa, cyc_oe
- rd_cycle
t_cez_r, t_oez, t_ce_rdyz
写入异步复用
- adv_wr_off
t_avdp_w
- we_on, wr_data_mux_bus
t_weasu, t_aavdh, cyc_aavhd_we
- we_off
t_wpl
- cs_wr_off
t_wph
- wr_cycle
t_cez_w, t_wr_cycle
写入异步非复用
- adv_wr_off
t_avdp_w
- we_on, wr_data_mux_bus
t_weasu
- we_off
t_wpl
- cs_wr_off
t_wph
- wr_cycle
t_cez_w, t_wr_cycle
写入同步复用
- adv_wr_off
t_avdp_w, t_avdh
- we_on, wr_data_mux_bus
t_weasu, t_rdyo, t_aavdh, cyc_aavhd_we
- we_off
t_wpl, cyc_wpl
- cs_wr_off
t_wph
- wr_cycle
t_cez_w, t_ce_rdyz
写入同步非复用
- adv_wr_off
t_avdp_w
- we_on, wr_data_mux_bus
t_weasu, t_rdyo
- we_off
t_wpl, cyc_wpl
- cs_wr_off
t_wph
- wr_cycle
t_cez_w, t_ce_rdyz
- 注意
许多 gpmc 时序依赖于其他 gpmc 时序(一些 gpmc 时序完全依赖于其他 gpmc 时序,这是上面缺少某些 gpmc 时序的原因),这将导致外设时序间接依赖于除上述之外的其他 gpmc 时序,有关更多详细信息,请参阅时序例程。 要了解这些外设时序对应于什么,请参阅 struct gpmc_device_timings 定义中的说明。 对于 gpmc 时序,请参阅 IP 详细信息(上面的链接)。