JZ2440 desarrollo de juntas desnuda práctica # 5 & Norflash y controlador de memoria SDRAM

controlador de memoria

Un chip de memoria, si desea acceder a él, necesita líneas de direcciones, líneas de datos, selección de chip líneas, habilitación de escritura, habilitación de lectura y otras líneas de control, por supuesto, pueden ellos mismos ser controlado por IO simulación de tiempo, pero demasiados problemas, hay una memoria ahora S3C2440 el controlador nos puede ayudar a conseguir el control de la lógica, que sólo tendrá que utilizar el rendimiento de la memoria, en comparación con un diagrama de tiempos correspondiente registro se proporciona al controlador de memoria buena.

Ver manual de S3C2440, se puede ver se muestran las características pertinentes, incluyendo, pero no limitado a:

1. El tamaño del extremo del software puede ser proporcionado 

2.8 Cada banco de un total de 128 MB 1 GB de memoria que puede controlar la cantidad máxima que puede para 1 GB (si todos estaban usando palabras)

3. Además de bank0, el acceso programable a los bits 8/16 / 32 bits, bank0 puede proporcionarse 16/32

Banco en 4,8, 6 puede ser ROM usado, SRAM y similares, se puede utilizar en dos ROM, SRAM, la SDRAM, etc.

5,8 banco siete ubicación fija, se puede acceder como un desplazamiento

6. Una dirección de inicio de ajuste flexible y tamaño del banco, medios bank7

7. El apoyo y el modo de auto-actualización para SDRAM de baja potencia.

Se puede observar a partir del diagrama de bloques del mapa de memoria, la presencia de los dos métodos Nandflash y Norflash S3C2440. Cuando se inicia de manera Norflash, el valor inicial del registro 2440 puede ser suficientemente lenta para Norflash driven mapea directamente a bank0 Norflash este caso, la SRAM incrustado se asignan a la bank7. RESUMEN 4 KB de memoria frente al empezar a NandFlash manera, NandFlash 2440 se copiará a la incorporada en la SRAM, y la SRAM se asigna a la dirección de inicio en este momento, en esta ocasión nGCS0 invisible, es decir Norflash disponible. Comenzó específica por la cual manera, OM1 se determina por el pasador OM0, y debe ser determinado mucho antes de la primera memoria de acceso.

 JZ2440 principio tabla de unión, OM1 se ha conectado a la planta baja GND 0, el otro extremo de una potencia de 3,3 V de control de conmutador de puesta a tierra con vida, y determina para comenzar NandFlash o 16 bits Norflash modo de inicio.

 

manera Norflash también se puede ver en el diagrama, el modelo utilizado MX29LV160DBTI Norflash, como puede verse en la FIG pasadores utiliza comprende: un pin de alimentación, líneas de direcciones, líneas de datos, de habilitación de lectura, de habilitación de escritura, el chip se selecciona de (Nxxx indica bajo activo), se puede observar a partir de las líneas de datos del chip de chip 16, proporciona una amplia datos de 16 bits, utilizando la línea de datos 20, en comparación con 2 ^ 20 = 1M * 16 bits = 16Mbits tamaño. Pero es extraño que las líneas de dirección A1 recibió A0, en lugar de A0 A0 correspondiente a la conexión. Hay ejemplos en este chip S3C2440 respecto Manual:

Aquí está mi entendimiento, las líneas de dirección S3C2440 diseñados para dirección de acceso frente a anchura de los datos del chip 8, cuando un flash de 8 bits de ancho, atracar A0 A0, la dirección de cada dirección, están alineados. Cuando se utiliza el bit de destello 16 de ancho, A1 y A0 de acoplamiento, es decir, la dirección / 2, también se puede entender como un uno binario, por ejemplo, al abordar la necesidad de dirección 0, A0 es 0, A1 es 0, este cuando se accede a los datos de dirección es 0, el leer datos de 16 bits, cuando la dirección es 1, A0 es 1, A1 es 0, este caso aún leer datos de dirección 0, y cuando la dirección alcanza un múltiplo entero de 2, A0 es 0 , A1 es 1, entonces lee los segundos datos de 16 bits. Por supuesto, no inútil A0, A0 se puede utilizar para distinguir los datos de la requerida de 16 bits superiores 8 bits o 8 bits inferiores. 32-bit de destello así, A2 continuación, A0, A1, A0 y con 8 para determinar qué datos necesita usar la leer datos de 32 bits, por supuesto, este valor depende de la orientación de nuestra bit instrucción anchura utilizado anchura de instrucciones, si LDR, acceso directo a la de 32 bits, si LDRB, datos de 8 bits se toma en el mismo.

Lea el manual del chip sabrán que hemos establecido en el conjunto de registros es el número de bits usados ​​en el chip, creo que este es el número de bits utilizado para establecer el búfer de recepción utilizado, y también puede ser utilizado de acuerdo con el antes mencionado A0 o A1 para eliminar el Deseado bits de datos de ancho.

Además de los datos de controlador de memoria de función, así como la función lógica de hardware de procesamiento de señal, es decir, selección de chip, de escritura de clasificación de habilitación y de habilitación de lectura señales de control y similares, tenemos que configurar sólo entre las respectivas señales dependiendo del rendimiento del chip utilizado intervalo de tiempo, el controlador de memoria enviará una señal de control correspondiente que usamos para una capa superior cuando la lógica, reduciendo así la carga de desarrollo, particularmente con referencia a un diagrama de temporización del tiempo requerido y el chip manual de contraste a cuando se habla Norflash y SDRAM. Además, la dirección asignada por el Banco controlador de memoria 8 y el registro de direcciones de chips específico frente unificado pueden ver el manual, creado después de los registros pertinentes, asignada directamente al controlador de memoria puede leer y dirección de escritura.

 Norflash

En esta sección se describe el uso de parámetros JZ2440 MX29LV160DBTI Norflash y diagramas de temporización y control necesidad de saber esas cosas.

El chip puede ver la página del manual para la característica más crítica de la viruta se ha dado parámetros, el tamaño de 16Mbits, lata fuente de alimentación de 3V necesaria para ocho (células de memoria de 2 m) o 16 bits (unidad de almacenamiento 1M).

 Rechazado, un pin chip lógico puede ver la tabla de símbolos, la tabla indica, el Norflash las líneas de dirección, las líneas de entrada y salida de datos, selección de chip, de habilitación de escritura, entrada de selección de palabra / byte, de reposición, de habilitación de lectura, salida ocupada estado, y la línea de alimentación y la clavija de protección contra escritura hardware de aceleración. Donde el pasador se tira en el interior existe la aceleración, si no es necesario utilizar flotante o conectado a alto nivel para que sean inactivos.

 Q15 / A-1 no se aprecia inicialmente que lo que se entiende por la referencia al texto puede saber que A es A-1 1 negativo, es decir, después de una dirección combinada AM-A0 bit A-1. 16bits anchura de bit del chip, la unidad de almacenamiento 1 M, dirección de todas las células de memoria se puede lograr por-A19 co-A0 línea de dirección 20, y el bit de ancho es de 8 bits, se dirigió a las células de memoria requieren duplicar requiere un multi-dirección línea, esta vez, las líneas de datos se pueden utilizar como las líneas de dirección de inactividad se multiplexan, por lo que se describe la tabla.

 Más abajo es un diagrama de bloques del chip, el control está directamente relacionada con nuestra entrada de control es un bloque lógico acoplado a las clavijas de control, la dirección de pestillo y el tampón bloques, buffer de datos IO. módulo de control de lógica externa controlará señales a otros módulos internos, tales como la máquina de estado de escritura. bloque de dirección de entrada de direcciones será dividida a la salida X, Y decodificación, se decodifica X dirección de línea de palabra, Y dirección de decodificar los bits, por lo que la dirección dirigida por matriz flash, donde la matriz es un poco como una matriz de programa [x ] [Y] dos matrices, es decir, dirección de dirección que el chip de decodificación es reconocible. Los datos, la salida de voltaje por el amplificador para lograr los datos adecuados a la memoria intermedia de IO por circuito de puerta de paso Y. Sabemos Norflash no ser la misma que la escritura directa convencional, necesitamos comandos especiales para escribir, y sin embargo, cuando enviamos la señal de control WE, datos IO se latcheará al mando de la retención de datos (datos de comando de memorización), seguido por el mismo ser decodificado, se convirtió al "lenguaje interno" salida de chip para el registro de estado, y el registro de estado impulsado comandos de máquina de estados en la operación de estado correspondiente, al momento de escribir los datos deseados, se puede ver la máquina de estados es muy versátil y buena con. Programa / ERASE alta tensión Descripción manual de sede de este módulo proporciona la alta lógica de control he apreciado dispositivo (probablemente mal entendido) a un módulo correspondiente, para cumplir con el dispositivo lógico correspondiente se carga y se descarga para eliminar o conjunto (bit 0/1 ) función potencial.

 

 El controlador de memoria siguiente tabla se enumeran los comandos y estados de funcionamiento correspondiente de los pasadores y, en el diagrama de bloques correspondiente a la unidad de control, donde, de hecho, GPIO pin puede ser propósitos ordinarios de control de mando analógica, pero ahora tenemos, que Esto nos ayudará a hacer frente a estos.

Si bien preocupado por el siguiente diagrama que muestra la necesidad de abordar algunas instrucciones y entrada de datos dentro de un período fijo de tiempo, por lo que la máquina de estado interna del chip puede ser operado a nuestro comando deseado. Esta capa es una capa de aplicación lógica, tiene que estar en el estado pre-habilitada para escritura está asegurada por el controlador de memoria, el resto del programa es necesario para implementar la función correspondiente.

Necesidad de  enfoque  la atención en el momento pertinente para explicar el diagrama de tiempos, va a volver a ver el diagrama de tiempos de acuerdo a esta tabla.

 diagrama de temporización de chip Norflash en una gran parte del manual, aquí se puede utilizar para referirse a la esquemática de chip S3C2440 manual, extraer un diagrama de tiempos correspondiente Norflash para simplificar el trabajo.

En primer lugar, encontrar el S3C2440, Norflash sólo dos de lectura y escritura diagramas de temporización relacionada, primera  lectura :

Al mismo tiempo encontrar un diagrama de tiempos de lectura en Norflash:

 Controla el cronograma descrito anteriormente puede saber en qué momento aparece en el sentido de:

Tec: señal de selección de chip CE envió mucho después de que los datos son válidos

intervalo de tiempo entre la transición de estado de lectura y escritura: Tsrw

Toeh: habilitación de salida de bits para mantener que las necesidades de habilitación de escritura WE no válidas después de la hora después de Toeh puede permitir OE

Dedo del pie: dedo del pie OE el tiempo transcurrido después de permitir que los datos para ser eficaz

Taa: la señal de dirección enviado a través de los datos de tiempo válido Taa

Trc: Leer tiempo de ciclo, tiempo durante el cual una operación de lectura

Toh: CE y OE está inactivo después de que el tiempo de retención de datos y la dirección de

TDF: datos de salida de tiempo no válido flotando después de OE y CE, es decir, los datos sobre el período de tiempo es incierto

En el S3C2440, TAC señales de dirección de habilitación de chip requiere mucho tiempo antes de la emisión, no hay ningún requisito Norflash y por lo tanto a 0; TCOs permiten CE es una necesidad para permitir OE cuánto tiempo hace que envió, no hay es requisitos, establece en 0, es decir, simultáneamente S3C2440 enviarán una señal de dirección, la señal de selección de chip de CE, una salida señal de habilitación de OE. TACC es el tiempo tras el cual los datos pueden ser eficientemente S3C2440 señal de control de salida, y el Norflash Taa, Tce, dedo del pie relevante, ya que también emitió tres señales, y por lo tanto puede seleccionar el TAA más larga, ya que es el experimento, elegimos el más después de 70ns largos, 70ns es decir tres señales de control pueden ser de salida para leer los datos. Tacp no marcado en el Norflash por lo tanto, se establece en el valor mínimo. tres señales de control Tach TCOH y está mostrando secuencialmente intervalo de tiempo no válido, no hay necesidad de fijar a 0. La preocupación es la salida de datos Norflash después de algún tiempo flotante, lo dado manual de chip es 30ns, aquí estamos un poco complicado, ya que la próxima vez que la lectura siempre hay que leer la salida después de 70 ns tres señales de control, por lo que no ver el tiempo de flotación. Escribo para encontrar tiempo para leer implica diagrama de tiempo es el mismo, por lo que la analogía se puede interpretar, no ampliar aquí.

En resumen, el principio registro S3C2440 siempre, que implica la BWSCON, BANKCON0, tal como se utiliza para bank0, y es el Norflash, por lo demás relacionado SDRAM no se puede establecer.

BWSCON para establecer el primer número de bits, como zona de inicio aquí bank0, ha sido determinado por la bota y OM1 OM0 es 16 bits, por lo que aquí registro es de sólo lectura, no tiene que ser proporcionada.

 Se siguió BANKCON0, que es la configuración relacionados con el tiempo, aquí también solo conjunto asociado con Norflash puede ser. Aquí todo el período de tiempo representado por el tiempo, y el reloj del bloque controlador de memoria vista de diagrama S3C2440 puede ser colgado en la HCLK sabe el autobús, mientras que los ejercicios anteriores, HCLK se establece en 100 MHz, por lo que aquí es un reloj de 10 ns, por lo Tac y el conjunto de las TCO a 0, Tacs establece en 8clock (opción muy conservador, de hecho, puede ser menor, porque los manuales de chips y hay un valor mínimo, si no a cero, debe ser capaz de ser probado).

código de salida es la siguiente:

s3c2440.h
-----------------------------
#ifndef __S3C2440_H
#define __S3C2440_H

#include <stdint.h>

.....

//memory controller 
#define BWSCON (*((volatile uint32_t*)0x48000000))

#define BANKCON0 (*((volatile uint32_t*)0x48000004))

....


void HardwareInitAll(void);
void Delay(uint32_t time);
void MemoryControllerInit(uint32_t val);


#endif

s3c2440.c
----------------------------

......

void MemoryControllerInit(uint32_t val)
{
	BANKCON0 = (val<<8);        //此处不能像之前那样清零控制位后再设置,置位0时NorFlash读取异常,将死机
}

void HardwareInitAll(void)
{
	WatchDogDisable();
    /*调试过程发现norFlash启动时,ClockDevideConfig必须在MPLLConfig前设置
    *应该与MPLL设置时的locktime相关,在norflash启动时速度较慢,分频来不及在
    *locktime结束前设置,而nandFlash则足够时间*/
	ClockDevideConfig();    
	ChangeModeToAsynchronous();
	MPLLConfig();
	MemoryControllerInit(7);  //8 clock
}

#include <stdint.h>

#include "s3c2440.h"
#include "led.h"
#include "uart.h"

int main()
{
	HardwareInitAll();
	LedInitAll();
	UartInit();
	uint8_t led_now=kLed1;
	uint8_t i=0;
	
	uint8_t tmp;

	while(1)
	{
		tmp = getc();
		putc(tmp);
                //实验证明到3的时候已经停止运行了,推测因为30ns浮空时间的限制
		if(tmp <= '7' && tmp >= '0'){ tmp -='0'; }
		MemoryControllerInit(tmp);
		
		i=6;	
		while(i--)
		{
			SingleLedOFF(led_now++);
			if(led_now > kLed3) { led_now =kLed1; }
			SingleLedON(led_now);
			Delay(100000);
		}
	}
}

 

SDRAM

Con el conocimiento de la parte delantera de cama, SDRAM será más fácil de entender. En primer lugar, la primera de a bordo mirada esquemática JZ2440 SDRAM, un total de 32 líneas de datos, dos de una memoria SDRAM 32, la línea de dirección A2 a una SDRAM de A0. Manual de los chips de SDRAM puede ser visto como una capacidad de 16M SDRAM * 16bits, respondiendo así a la necesidad de que la célula de memoria tiene una 16M, las líneas de dirección debe ser de 24, pero utiliza única figura A2-A14, y A24 con A25 está conectado a la BA0 y BA1, que está determinada por el modo de acceso de SDRAM.

 SDRAM como un diagrama de bloques, se puede observar en la memoria SDRAM se divide en cuatro Banco, cada banco 4M * 16bits, col y fila direcciones necesarias para las células de memoria de acceso en el mismo. Por lo tanto, para proporcionar acceso a las necesidades dirección del banco SDRAM para determinar secuencialmente el banco, se determina para proporcionar línea de fila, COL columna determinada, se requiere un cierto tiempo entre la fila y col, que es un control de parámetro tRCD. El contenido es diagrama de bloques relativamente simple no pasará, Norflash analogía se puede entender claramente.

 

Registros deben establecerse de la siguiente manera:

Puede verse en el esquema, que usa el regulador bank6 memoria S3C2440 SDRAM, sólo es necesario para establecer registros relacionados Bank6, en dos SDRAM tablero paralelo es la memoria 16bits 32bits, por lo DW6 a 10. WS6 mordió espera bit de habilitación, pero al leer S3C2440 SDRAM está ocupado lata no responden a los datos, la SDRAM puede ajustarse de modo que el bit 2440 para esperar algún tiempo, no sirve de nada, directamente desactivar. ST6 es la única operación de su cambio de bytes tipo SDRAM al configurar varios bytes leer ni escribir, se pone a 0 solamente por escrito este efecto, listo para una lectura y la escritura tienen el efecto, aquí hemos leído controlador de memoria a los datos de ayuda para escoger, y por lo tanto se puede establecer en cero.

 MT se establece en 11 medios que estamos utilizando la SDRAM, la sección media Tac-PMC para los no-SDRAM y, por tanto, ignorarlos. TRCD es la Fila hora y la dirección Col del intervalo mencionado anteriormente, manual de chips SDRAM de búsqueda, usted puede saber un mínimo de 18ns, a fin de utilizar 00, que es de 20ns. SCAN representa la dirección de columna de vista bits de SDRAM chip de memoria SDRAM de búsqueda manual de dirección de columna, se puede saber la dirección de bit SDRAM columna utilizada para la A0-A8, a saber, 9, y por lo tanto está ajustado a 01.

 

 SDRAM es una memoria dinámica, necesidad de ser renovado para mantener los datos, pues podría perder datos, actualizar aquí realmente está almacenada en el condensador de recarga. REFEN utilice la opción predeterminada Habilitar actualización. TREFMD ajustada en el modo de actualización automática. Trp después de cuánto tiempo habilitar la señal de selección de chip enviado a la dirección de la fila, o transferido a otra línea de acceso de un tiempo de precarga fila, manuales chips de SDRAM directos de búsqueda, se puede configurar para 20ns se puede encontrar, es decir, conjunto de 00. TSRC puede obtenerse por Trc-Trp, el tiempo de salto total de Trc requerido para acceder a la otra línea de fila, además de la carga de Trp, TSRC requiere, la búsqueda Trc, los 60ns valor mínimo, 40ns de la TSRC, es decir, conjunto a 00. Contador de refresco página de características Vista hoja de datos SDRAM, se pueden ver los 8192 ciclos / 64ms de refresco, a saber Refresh_period = 64 ms / 8192 = 7.8us, la refresh_Couter se puede calcular de acuerdo con la fórmula como 1269.

Secuencialmente hacia abajo para permitir el acceso en modo ráfaga (acceso a una pluralidad de células de memoria a la vez, es decir, la dirección de inicio es emitido, la longitud, para devolver el valor de las posiciones de memoria contiguos), lo que permite el poder modo hacia abajo (modo ahorro de energía mediante la introducción de SCKE) permitir SCLK_EN (también en consideraciones de ahorro de energía), BK76MAP acuerdo con 64MB que utilizamos para seleccionar 001.

 palabra fija está fijada opción, puede seleccionar directamente CL momento especial, CL se emite después de los datos de dirección de columna puede llegar a ver la hoja de datos de SDRAM y encontró que el CL puede ser 2 o 3, presione a 2. Este registro se establece el registro de modo SDRAM, un diagrama de bloques se puede ver desde la SDRAM anteriormente.

 En resumen, el código de salida es la siguiente:

s3c2440.h
----------------------------------
#ifndef __S3C2440_H
#define __S3C2440_H

#include <stdint.h>

...


//memory controller 
#define BWSCON (*((volatile uint32_t*)0x48000000))

#define BANKCON0 (*((volatile uint32_t*)0x48000004))
#define BANKCON6 (*((volatile uint32_t*)0x4800001C))

#define REFRESH (*((volatile uint32_t*)0x48000024))
#define BANKSIZE (*((volatile uint32_t*)0x48000028))
#define MRSRB6 (*((volatile uint32_t*)0x4800002C))

void HardwareInitAll(void);
void Delay(uint32_t time);

#endif

s3c2440.c
------------------------
#include "s3c2440.h"

...

static void MemoryControllerInit(void)
{
	BWSCON = (2<<24);
	BANKCON0 = (4<<8);
	BANKCON6 = (3<<15)|(0<<2)|(1<<0);
	REFRESH  = (1<<23) | (1269 << 0);
	BANKSIZE = (1<<7) | (1<<5) | (1<<4)|(1<<0);
	MRSRB6   = (2<<4);
}

void HardwareInitAll(void)
{
	WatchDogDisable();
	ClockDevideConfig();
	ChangeModeToAsynchronous();
	MPLLConfig();
	MemoryControllerInit();
}


#include <stdint.h>

#include "s3c2440.h"
#include "led.h"
#include "uart.h"

int sdram_test(void)
{
	volatile unsigned char *p = (volatile unsigned char *)0x30000000;
	int i;

	// write sdram
	for (i = 0; i < 1000; i++)
		p[i] = 0x55;

	// read sdram
	for (i = 0; i < 1000; i++)
		if (p[i] != 0x55)
			return -1;

	return 0;
}

int main()
{
	HardwareInitAll();
	LedInitAll();
	uint8_t led_now=kLed1;

	while(1)
	{
		if (sdram_test() == 0)
		{
			SingleLedOFF(led_now++);
			if(led_now > kLed3) { led_now =kLed1; }
			SingleLedON(led_now);
			Delay(100000);
		}		
	}


}

Código de ensayo escrito continuamente a la SDRAM y después se leen de forma continua determina si los datos es correcta, realizando de este modo la iluminación, si el funcionamiento de la lámpara se establece con éxito.

 
Se han publicado 19 artículos originales · ganado elogios 7 · vistas 6924

Supongo que te gusta

Origin blog.csdn.net/G_METHOD/article/details/104419712
Recomendado
Clasificación