Chinese translated version of Documentation-bus-devices-ti-gpmc
If you have any comment or update to the content, please contact the
original document maintainer directly. However, if you have a problem
communicating in English you can also ask the Chinese maintainer for
help. Contact the Chinese maintainer if this translation is outdated
or if there is a problem with the translation.
Chinese maintainer: <steven910812@gmail.com>
---------------------------------------------------------------------
Documentation-bus-devices-ti-gpmc的中文翻译
如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文
交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻
译存在问题,请联系中文版维护者。
中文版维护者: 徐唯 <steven910812@gmail.com>
中文版翻译者: 徐唯 <steven910812@gmail.com>
中文版校译者: 徐唯 <steven910812@gmail.com>
以下为正文
---------------------------------------------------------------------
GPMC (General Purpose Memory Controller):
通用存储控制器(GPMC):
=========================================
GPMC is an unified memory controller dedicated to interfacing external
memory devices like
* Asynchronous SRAM like memories and application specific integrated
circuit devices.
* Asynchronous, synchronous, and page mode burst NOR flash devices
NAND flash
* Pseudo-SRAM devices
GPMC是一个统一的内存控制器,专用于连接外部内存设备,如:
*异步SRAM外存和电路器件。
*异步,同步和页模式突发NOR闪存设备、NAND闪存
*虚拟SRAM器件
GPMC is found on Texas Instruments SoC's (OMAP based)
IP details: http://www.ti.com/lit/pdf/spruh73 section 7.1
GPMC generic timing calculation:
GPMC通用时序运算:
================================
GPMC has certain timings that has to be programmed for proper
functioning of the peripheral, while peripheral has another set of
timings. To have peripheral work with gpmc, peripheral timings has to
be translated to the form gpmc can understand. The way it has to be
translated depends on the connected peripheral. Also there is a
dependency for certain gpmc timings on gpmc clock frequency. Hence a
generic timing routine was developed to achieve above requirements.
GPMC的精确计时系统被用于正常工作的外设产品,而外设产品会有另一套计时
方式。为了使GPMC与外设产品共同工作,外设的计时会被翻译成能被GPMC理解
的表格。翻译的方式取决于该外设。并且某些GPMC计时依赖于GPMC的时钟频率。
因此,一个通用的计时程序的开发是为了实现上述要求。
Generic routine provides a generic method to calculate gpmc timings
from gpmc peripheral timings. struct gpmc_device_timings fields has to
be updated with timings from the datasheet of the peripheral that is
connected to gpmc. A few of the peripheral timings can be fed either
in time or in cycles, provision to handle this scenario has been
provided (refer struct gpmc_device_timings definition). It may so
happen that timing as specified by peripheral datasheet is not present
in timing structure, in this scenario, try to correlate peripheral
timing to the one available. If that doesn't work, try to add a new
field as required by peripheral, educate generic timing routine to
handle it, make sure that it does not break any of the existing.
Then there may be cases where peripheral datasheet doesn't mention
certain fields of struct gpmc_device_timings, zero those entries.
通用例程提供了一个通用的方法来计算GPMC对GPMC外设时序的计时。
struct gpmc_device_timings字段随着外设的数据表实时更新。
一些外围设备的时序要满足实时性和周期性。这就需要提供(指针struct gpmc_device_timings的定义)。
如果出现了一些时序指定的外设数据表不存在的现象,试着将外设时序指向
另一个等待中的外设。如果仍然无法工作,尝试增添一个新的外设所需的字段。
迫使通用定时程序来处理它,确保现有的功能不遭到破坏。
当发生外设数据表没有确切的struct gpmc_device_timings字段,就将实体清空。
Generic timing routine has been verified to work properly on
multiple onenand's and tusb6010 peripherals.
在接入多个OneNAND闪存和tusb6010外设的情况下,通用计时程序已经验证上正常工作。
A word of caution: generic timing routine has been developed based
on understanding of gpmc timings, peripheral timings, available
custom timing routines, a kind of reverse engineering without
most of the datasheets & hardware (to be exact none of those supported
in mainline having custom timing routine) and by simulation.
提醒一句:通用计时程序已经基于多种timings进行开发,如:GPMC的计时,外设的计时,可
自定义计时程序等。
gpmc timing dependency on peripheral timings:
GPMC计时依赖于外围时序:
[<gpmc_timing>: <peripheral timing1>, <peripheral timing2> ...]
1. common
cs_on: t_ceasu
adv_on: t_avdasu, t_ceavd
2. sync common
sync_clk: clk
page_burst_access: t_bacc
clk_activation: t_ces, t_avds
3. read async muxed
adv_rd_off: t_avdp_r
oe_on: t_oeasu, t_aavdh
access: t_iaa, t_oe, t_ce, t_aa
rd_cycle: t_rd_cycle, t_cez_r, t_oez
4. read async non-muxed
adv_rd_off: t_avdp_r
oe_on: t_oeasu
access: t_iaa, t_oe, t_ce, t_aa
rd_cycle: t_rd_cycle, t_cez_r, t_oez
5. read sync muxed
adv_rd_off: t_avdp_r, t_avdh
oe_on: t_oeasu, t_ach, cyc_aavdh_oe
access: t_iaa, cyc_iaa, cyc_oe
rd_cycle: t_cez_r, t_oez, t_ce_rdyz
6. read sync non-muxed
adv_rd_off: t_avdp_r
oe_on: t_oeasu
access: t_iaa, cyc_iaa, cyc_oe
rd_cycle: t_cez_r, t_oez, t_ce_rdyz
7. write async muxed
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
8. write async non-muxed
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
9. write sync muxed
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
10. write sync non-muxed
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
Note: Many of gpmc timings are dependent on other gpmc timings (a few
gpmc timings purely dependent on other gpmc timings, a reason that
some of the gpmc timings are missing above), and it will result in
indirect dependency of peripheral timings to gpmc timings other than
mentioned above, refer timing routine for more details. To know what
these peripheral timings correspond to, please see explanations in
struct gpmc_device_timings definition. And for gpmc timings refer
IP details (link above).
注:GPMC计时许多是依赖于其他的GPMC计时(一些
GPMC计时纯粹依赖于其他GPMC计时,当缺少一些的GPMC tingmings),
它会影响到间接依赖外设时序GPMC计时。
如上所述,请参阅计时程序,更多的细节。要知道什么
这些外围的时序对应,请参阅struct gpmc_device_timings定义。
而GPMC计时请参考IP详细资料(以上链接)。
If you have any comment or update to the content, please contact the
original document maintainer directly. However, if you have a problem
communicating in English you can also ask the Chinese maintainer for
help. Contact the Chinese maintainer if this translation is outdated
or if there is a problem with the translation.
Chinese maintainer: <steven910812@gmail.com>
---------------------------------------------------------------------
Documentation-bus-devices-ti-gpmc的中文翻译
如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文
交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻
译存在问题,请联系中文版维护者。
中文版维护者: 徐唯 <steven910812@gmail.com>
中文版翻译者: 徐唯 <steven910812@gmail.com>
中文版校译者: 徐唯 <steven910812@gmail.com>
以下为正文
---------------------------------------------------------------------
GPMC (General Purpose Memory Controller):
通用存储控制器(GPMC):
=========================================
GPMC is an unified memory controller dedicated to interfacing external
memory devices like
* Asynchronous SRAM like memories and application specific integrated
circuit devices.
* Asynchronous, synchronous, and page mode burst NOR flash devices
NAND flash
* Pseudo-SRAM devices
GPMC是一个统一的内存控制器,专用于连接外部内存设备,如:
*异步SRAM外存和电路器件。
*异步,同步和页模式突发NOR闪存设备、NAND闪存
*虚拟SRAM器件
GPMC is found on Texas Instruments SoC's (OMAP based)
IP details: http://www.ti.com/lit/pdf/spruh73 section 7.1
GPMC generic timing calculation:
GPMC通用时序运算:
================================
GPMC has certain timings that has to be programmed for proper
functioning of the peripheral, while peripheral has another set of
timings. To have peripheral work with gpmc, peripheral timings has to
be translated to the form gpmc can understand. The way it has to be
translated depends on the connected peripheral. Also there is a
dependency for certain gpmc timings on gpmc clock frequency. Hence a
generic timing routine was developed to achieve above requirements.
GPMC的精确计时系统被用于正常工作的外设产品,而外设产品会有另一套计时
方式。为了使GPMC与外设产品共同工作,外设的计时会被翻译成能被GPMC理解
的表格。翻译的方式取决于该外设。并且某些GPMC计时依赖于GPMC的时钟频率。
因此,一个通用的计时程序的开发是为了实现上述要求。
Generic routine provides a generic method to calculate gpmc timings
from gpmc peripheral timings. struct gpmc_device_timings fields has to
be updated with timings from the datasheet of the peripheral that is
connected to gpmc. A few of the peripheral timings can be fed either
in time or in cycles, provision to handle this scenario has been
provided (refer struct gpmc_device_timings definition). It may so
happen that timing as specified by peripheral datasheet is not present
in timing structure, in this scenario, try to correlate peripheral
timing to the one available. If that doesn't work, try to add a new
field as required by peripheral, educate generic timing routine to
handle it, make sure that it does not break any of the existing.
Then there may be cases where peripheral datasheet doesn't mention
certain fields of struct gpmc_device_timings, zero those entries.
通用例程提供了一个通用的方法来计算GPMC对GPMC外设时序的计时。
struct gpmc_device_timings字段随着外设的数据表实时更新。
一些外围设备的时序要满足实时性和周期性。这就需要提供(指针struct gpmc_device_timings的定义)。
如果出现了一些时序指定的外设数据表不存在的现象,试着将外设时序指向
另一个等待中的外设。如果仍然无法工作,尝试增添一个新的外设所需的字段。
迫使通用定时程序来处理它,确保现有的功能不遭到破坏。
当发生外设数据表没有确切的struct gpmc_device_timings字段,就将实体清空。
Generic timing routine has been verified to work properly on
multiple onenand's and tusb6010 peripherals.
在接入多个OneNAND闪存和tusb6010外设的情况下,通用计时程序已经验证上正常工作。
A word of caution: generic timing routine has been developed based
on understanding of gpmc timings, peripheral timings, available
custom timing routines, a kind of reverse engineering without
most of the datasheets & hardware (to be exact none of those supported
in mainline having custom timing routine) and by simulation.
提醒一句:通用计时程序已经基于多种timings进行开发,如:GPMC的计时,外设的计时,可
自定义计时程序等。
gpmc timing dependency on peripheral timings:
GPMC计时依赖于外围时序:
[<gpmc_timing>: <peripheral timing1>, <peripheral timing2> ...]
1. common
cs_on: t_ceasu
adv_on: t_avdasu, t_ceavd
2. sync common
sync_clk: clk
page_burst_access: t_bacc
clk_activation: t_ces, t_avds
3. read async muxed
adv_rd_off: t_avdp_r
oe_on: t_oeasu, t_aavdh
access: t_iaa, t_oe, t_ce, t_aa
rd_cycle: t_rd_cycle, t_cez_r, t_oez
4. read async non-muxed
adv_rd_off: t_avdp_r
oe_on: t_oeasu
access: t_iaa, t_oe, t_ce, t_aa
rd_cycle: t_rd_cycle, t_cez_r, t_oez
5. read sync muxed
adv_rd_off: t_avdp_r, t_avdh
oe_on: t_oeasu, t_ach, cyc_aavdh_oe
access: t_iaa, cyc_iaa, cyc_oe
rd_cycle: t_cez_r, t_oez, t_ce_rdyz
6. read sync non-muxed
adv_rd_off: t_avdp_r
oe_on: t_oeasu
access: t_iaa, cyc_iaa, cyc_oe
rd_cycle: t_cez_r, t_oez, t_ce_rdyz
7. write async muxed
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
8. write async non-muxed
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
9. write sync muxed
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
10. write sync non-muxed
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
Note: Many of gpmc timings are dependent on other gpmc timings (a few
gpmc timings purely dependent on other gpmc timings, a reason that
some of the gpmc timings are missing above), and it will result in
indirect dependency of peripheral timings to gpmc timings other than
mentioned above, refer timing routine for more details. To know what
these peripheral timings correspond to, please see explanations in
struct gpmc_device_timings definition. And for gpmc timings refer
IP details (link above).
注:GPMC计时许多是依赖于其他的GPMC计时(一些
GPMC计时纯粹依赖于其他GPMC计时,当缺少一些的GPMC tingmings),
它会影响到间接依赖外设时序GPMC计时。
如上所述,请参阅计时程序,更多的细节。要知道什么
这些外围的时序对应,请参阅struct gpmc_device_timings定义。
而GPMC计时请参考IP详细资料(以上链接)。