==== GPMC ==== .. contents:: Tabla de Contenido :depth: 2 GPMC Controlador de memoria de propuesta general ================================================ GPMC es un controlador de memoria unificado, para hacer de interfaz con dispositivos de memoria externa como: - SRAM asíncronos, como memorias y aplicaciones específicas integradas en circuitos de dispositivo. - Asíncrono, síncronos y, modos de página en dispositivos tipo NOR y NAND. - Pseudo-dispositivos SRAM. GPMC, se encuentra en SoC's de la marca `*Texas Instruments* `_ (OMAP based) sección 7.1 GPMC tiene ciertas *reglas de tiempo*, que deben ser programadas para un correcto funcionamiento del periférico, mientras que el periférico, sostiene otro conjunto de *reglas*. Hacer funcionar al periférico con GPMC, dichas reglas de tiempo deben ser traducidas para que las entienda. La forma en que deban ser traducidas, dependen del periférico conectado. Hay también ciertas reglas dependientes, en cuanto a frecuencia del reloj GPMC. Consecuentemente, ha sido desarrollada una *regla genérica de tiempo*, para alcanzar dichos requisitos. La *rutina genérica*, proporciona un método para calcular los tiempos GPMC, desde las reglas del periférico. El campo de la estructura ``struct gpmc_device_timings`` deberá ser actualizado con los tiempos provistos en las características de fabricante. Algunos de los tiempos de estos periféricos, podrán buscar la respectiva conicidencia, tanto en ciclos como en tiempo. En previsión al control de este escenario, ver la refencia a la definición de la estructura - ``struct`` ``gpmc_device_timings``. Podría ocurrir que el tiempo especificado por la hoja de características del periférico, no estuviese presente en la *estructura de tiempo*, en tal situación, es conveniente intentar una correlación entre la *regla* del periférico y *alguna disponible*. *Educar* consecuentemente una rutina de tiempo genérica, para ejercer control. Asegurar que no rompe alguna de las reglas existentes. Podrían aparecer casos, en los que la hoja de características -datasheet, no mencionase ciertos campos de la estructura ``gpmc_device_timings``, *Encerar* dichas entradas -poner a cero. Las reglas de tiempo, han sido verificadas para que funcionen apropiadamente en múltiples periféricos de un sólo ``NAND`` y, ``tusb6010``. .. note:: las reglas de tiempo, han sido desarrolladas basándose en la comprensión de las *reglas de tiempo*, tiempos de periféricos, reglas personalizadas, algo de ingeniería inversa sin disponer de las características de fabricante y, el *hardware* -for ser exactos, ninguna de las soportadas en la *línea principal*, con reglas personalizadas, también por simulación. Dependencias a *reglas* en los periféricos: ``[: , ...]`` 1. common .. code-block:: cs_on: t_ceasu adv_on: t_avdasu, t_ceavd 2. sync common .. code-block:: C sync_clk: clk page_burst_access: t_bacc clk_activation: t_ces, t_avds 3. read async muxed .. code-block:: C 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 .. code-block:: C 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 .. code-block:: C 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 .. code-block:: C 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 .. code-block:: C 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 .. code-block:: C 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 .. code-block:: C 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 .. code-block:: C 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:: muchas de las reglas GPMC, son dependientes de otros tiempos -algunos tiempos son púramente dependientes de otros, razón por la que alguna de estas reglas hayan sido arriba omitidas. Resultando en una dependencia indirecta a las reglas del periférico. Referir a la rutina de tiempos, para más detalles. Para saber a que tiempos corresponden estos periféricos, ver por favor, la explicación en la estructura ``gpmc_device_timings``. Para reglas gpmc referir la IP del enlace arriba expuesto. Referencias y agradecimientos ============================= `Texas Instruments `_