problema de inicialización de SDRAM (Freescale iMX31)

10

Estoy tratando de modificar una secuencia de inicio existente (inicio de bajo nivel de SDRAM) para acomodar un cambio en la configuración del hardware: un SDRAM existente en mi iMX31 fue reemplazado por un tamaño diferente, de lo contrario es el mismo tipo / fabricante / diseño / pines / tiempos .. de acuerdo a las especificaciones.

Escenario de configuración breve y comportamiento de error: Logré arrancar la placa (la secuencia es como tal: ejecutar el gestor de arranque desde NAND, copiar 'step2 bootloader' a la RAM, ejecutar 'step2 bootloader' desde la RAM). Pero parece que tengo algunas configuraciones incorrectas, ya que la ejecución desde la RAM (después de saltar a step2) falla constantemente.

Hice una gran cantidad de pruebas en profundidad para identificar parámetros incorrectos, mis resultados son los siguientes: - las operaciones de lectura / escritura de un solo byte / palabra cuando se ejecutan desde NAND o JTAG - Las escrituras en bloque / sabio parecen funcionar cuando se ejecutan desde NAND (JTAG también) Lo interesante: - después de las escrituras de bloque, necesito varias lecturas en cualquier dirección de SDRAM para leer un byte / palabra correcta (!) - Si modifico la configuración de mi columna SOLO para usar la cantidad más alta (+1) de columnas para "modo de carga" pero no para precarga / actualización, entonces funciona, pero es inconsistente (para mi teoría, funciona de manera confiable para el rango de direcciones más bajo, donde la columna que falta no importa).

Para tener una idea de mi configuración: la configuración de RAM es casi idéntica a la de esta pregunta. Esto no es sorprendente, ya que son suministrados por Freescale, junto a los tiempos de RAM: En Freescale iMX31, ¿cómo puede ¿Traduzco la dirección SDRAM a la dirección de la CPU? Mi configuración original es idéntica (también 64 MB SDRAM como en el enlace), mi nueva RAM es de 128 MB. Todas las placas de referencia se suministran con 64 MB o 128 MB, por lo que ambos valores son compatibles con iMX31 y sus derivados.

El cambio que tengo que hacer (atención: ¡suposición!) está solo en la configuración de COLUMNA (es una columna más) de la RAM. La memoria RAM tiene el doble de tamaño, pero, por lo demás, las especificaciones afirman exactamente los mismos tiempos, etc. Dado que solo tiene una columna más (ver el enlace anterior, los registros de mi modo de precarga, actualización y carga cambian de 0x92100000 a 0x92200000 para la nueva RAM, por ejemplo) no se cambia nada más.

Pregunta 1: ¿Mi suposición tiene sentido, que si todos los tiempos y las características físicas del chip (que afectan la fuerza del disco, el tiempo y los consumos de energía) son similares, que un cambio en el recuento de la columna podría ser "local" (que no afecta a otras configuraciones)? Lo suficientemente interesante, comparé mis configuraciones con muchas otras disponibles en línea (U-Boot, Red-Boot con 128MB) y junto a las configuraciones específicas de la placa, como la fuerza de la unidad, no veo diferencias.

Pregunta 2: Mi comportamiento de error anterior (escribe trabajo, lee solo parcial) es probablemente único para una cierta configuración no válida de la RAM. ¿Alguien puede darme un consejo sobre qué entorno debo mirar más de cerca? También podría ser posible establecer parámetros 'seguros' para que incluso con un rendimiento disminuido, el sistema me permita acotar al culpable.

    
pregunta Peter Branforn

1 respuesta

1

Para 2, comience con la configuración de una placa de demostración iMX31. Luego, modifíquelos según sea necesario para su parte (velocidad y tamaño principalmente). En particular, es probable que tenga un número incorrecto de estados de espera en la lectura.

    
respondido por el Brian Carlton

Lea otras preguntas en las etiquetas