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: una SDRAM existente en mi iMX31 fue reemplazada por un tamaño diferente, de lo contrario, el mismo tipo / fabricante / diseño / pines / tiempos. De acuerdo a las especificaciones.
Breve escenario de configuración y comportamiento de error: logré arrancar la placa (la secuencia es la siguiente: ejecutar el gestor de arranque desde NAND, copiar 'step2 bootloader' a RAM, ejecutar 'step2 bootloader' desde RAM). Pero parece que tengo algunos ajustes incorrectos, ya que la ejecución desde la RAM (después del salto al paso 2) falla constantemente.
Hice una gran cantidad de pruebas en profundidad para identificar parámetros incorrectos, mis resultados son estos: - las lecturas / escrituras de un solo byte / palabra funcionan cuando se ejecutan desde NAND o JTAG - las escrituras en bloque / ráfaga parecen funcionar cuando se ejecutan desde NAND ( JTAG también) Lo interesante: - después de las escrituras en bloque, necesito múltiples lecturas en cualquier dirección SDRAM para leer un byte / palabra correcto (!) - si modifico la configuración de mi columna para SOLO usar la cantidad más alta (+1) de columnas para "modo de carga" pero no para precarga / actualización, entonces funciona, pero de manera inconsistente (en 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, además de los tiempos de RAM: en Freescale iMX31, ¿cómo puedo traducir la dirección SDRAM a la dirección de la CPU? Mi configuración original es idéntica (también SDRAM de 64 MB como en el enlace), mi nueva RAM es de 128 MB. Todos los paneles de referencia se suministran con 64 MB o 128 MB, por lo tanto, ambos valores son compatibles con iMX31 y derivados.
El cambio que tengo que hacer (atención: ¡suposición!) Es solo en la configuración de COLUMNA (es una columna más) de la RAM. La RAM tiene el doble de tamaño, pero de lo contrario, la especificación afirma exactamente los mismos tiempos, etc. Como solo tiene una columna más (consulte el enlace anterior, mis registros de modo de precarga, actualización y carga cambian de 0x92100000 a 0x92200000 para la nueva RAM, por ejemplo ) nada más ha cambiado.
Pregunta 1: ¿Tiene sentido mi suposición de que si todos los tiempos y las características físicas de los chips (que afectan la fuerza de la unidad, el tiempo y el consumo de energía) son similares, que un cambio en el recuento de columnas podría ser "local" (no afecta a otras configuraciones)? Lo suficientemente interesante, comparé mi configuración con muchas otras disponibles en línea (U-Boot, Red-Boot con 128 MB) y, además de las configuraciones específicas de la placa, como la potencia de la unidad, no veo diferencias.
Pregunta 2: Mi comportamiento de error anterior (escribe trabajo, lee solo parcialmente) es probablemente exclusivo de una determinada configuración no válida de la RAM. ¿Alguien puede darme un consejo sobre qué configuración tener más cerca? También podría ser posible establecer parámetros 'seguros' para que, incluso con un rendimiento disminuido, el sistema me permitiera reducir al culpable.
Respuestas:
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, probablemente tenga el número incorrecto de estados de espera en la lectura.
fuente