7 votos

En Freescale iMX31, ¿cómo puedo traducir SDRAM de direcciones de la CPU a la dirección?

[Este es un re-post de http://stackoverflow.com/q/5346225/69172]

Soy nuevo en el iMX31 y sistemas embebidos, por favor me ayudan a entender la traducción de SDRAM dirección a la CPU ARM de dirección, especialmente en los "especiales" dos modos de comando de la SDRAM controlador.

Aquí está la SDRAM código de inicialización tengo problema con:

    ldr r0, ESDCTL_BASE_W
    mov r2, #SDRAM_BASE_ADDR /* 0x80000000 */

    ldr r1, =0x92100000 /* Precharge */
    str r1, [r0]
    ldr r1, =0x0
    ldr r12, =0x80000F00
    str r1, [r12]

    ldr r1, =0xA2100000 /* Auto-refresh */
    str r1, [r0]
    ldr r1, =0x0
    str r1, [r2]

    ldr r1, SDRAM_0xB2100000 /* Load Mode Register */
    str r1, [r0]
    ldr r1, =0x0
    strb r1, [r2, #0x33]

    ldr r1, =0xFF
    ldr r12, =0x81000000

La RAM que tengo es de Micras LPDDR MT46H64M32LF, y este código sigue el procedimiento de inicialización muy bien, pero en PRECARGA de paso, donde es la dirección 0x80000F00 proviene?

De iMX31 manual de referencia me enteré de que durante la PRECARGA de paso, tengo que crear SDRAM pin A10 a lo ALTO, que será, por tanto, resultado de una PRECARGA de TODOS. Aquí está el texto en PRECARGA de RM:

...Mientras esté en este modo, un acceso (lectura o escritura) a la SDRAM/LPDDR espacio de direcciones generará un comando de precarga del ciclo. SDRAM/LPDDR dirección de bit A10 determina si un solo banco, o todos los bancos, son precargado por el comando. El acceso a una dirección de la SDRAM/LPDDR dirección A10 baja precarga sólo el banco seleccionado por el banco de direcciones, como se ilustra en la Figura 19-75. Por el contrario, los accesos con A10 alto de precarga de todos los bancos, independientemente de la dirección del banco, ...tenga en cuenta que el A10 es la SDRAM pin, no la A10 poco el BRAZO bus de direcciones. Traducción de la SDRAM A10 a la correspondiente BRAZO de dirección depende de la configuración de la memoria.

Y aquí hay otro texto en el multiplexado bus de direcciones durante el "período especial" modo:

Durante el "período especial", por ejemplo, de precarga de modo (SMODE=1) o modo de carga de los registros (SMODE=3) no hay ninguna dirección de desplazamiento, significa que la CPU de direcciones A0 es mapeado en MA0 en la memoria de todos ancho. Por ejemplo, en orden a la unidad de MA10 bits (para la precarga de todos los comandos) la CPU A10 bit debe ser establecido (para ambos de 16 o 32 bits con dispositivos externos). La misma lógica es válida para el modo de carga registro de comandos, como se puede ver en la rutina de inicialización de ejemplo en la Sección 19.5.4.1, "SDRAM de Inicialización."

Según el texto anterior y suponiendo que A0 es el primer bit de 0x80000000, ajuste de la A10 a 1 debe dar dirección 0x80000400, no el 0x80000F00 en el código. Por qué???

El fragmento de código que mostré aquí se supone que funciona con el DDR. Para SDRAM, que en realidad se utiliza 0x80000400 en PRECARGA.

¿Hay algo relacionado con las características de DDR? Y ¿cómo puedo obtener la traducción correcta entre SDRAM pines y el BRAZO de la CPU de la dirección?

-1voto

Jon Ericson Puntos 9703

Para responder a su base de la pregunta, para llegar a la dirección de pin A10 de la memoria que usted tiene que mirar en el mapa de memoria para el BRAZO del dispositivo...

En este caso se busca en el mapa de memoria:

0x8000 0000 -> 0x8FFF FFFF se asigna a CSD0 (SDRAM/DDR)

y

0x9000 0000 -> 0x9FFF FFFF se asigna a CSD1 (SDRAM/DDR)

Necesitaría saber qué chip select se utiliza en el diseño de PCB para determinar su respuesta al banco que su DDR se adjunta.

Esto implica que el A10 se encuentra como 0x8000 0400 (como se mencionó) o 0x9000 0400.

En cuanto a por qué 0x8000 0F00 fue utilizado en lugar de 0x8000 0400...la lectura de la hoja de datos para que la memoria implica, pero no indica que el otro la dirección de los pines, A(n) no se preocupa por esta operación, de manera que el programador, probablemente, sólo se tiró en una F de ahí, en lugar de averiguar que era sólo un 4 que era necesario.

Yo también no encontrar esas 2 secciones de la hoja de datos que se contradicen unas a otras. La primera es básicamente diciendo que usted necesita para hacer referencia a la memoria del dispositivo de mapa para localizar la dirección real donde la memoria se asigna así que usted puede utilizar esa dirección como base.

La segunda cita nos indica que el bit 0 de la dirección corresponde a la dirección de pin 0 de la memoria en este modo, que no siempre puede ser el caso en la operación normal. Se puede depender de los datos/dirección de la anchura de la memoria, combinado con los problemas de alineación para el núcleo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X