[STM32F7 Discovery] Serias dudas sobre la SDRAM interna

82 views
Skip to first unread message

Federico Noto

unread,
Jan 30, 2016, 7:00:30 PM1/30/16
to Embebidos32
Buenas noches, recurro a ustedes ante ya mi gran, gran, graaaan confusion intentando comprender la SDRAM de este kit de desarrollo. Les propongo mis dudas en distintos items.
  1. Los maximos bits que puedo asignar al bus de direcciones es de 12, dando asi 2^12 = 4K es decir 4096 palabras, pero segun el manual del micro, un banco de la memoria de la sdram es de 4(bancos)x64Mb, centrandonos en esos 64Mb que estan limitados por 16 bits de datos, un banco de la memoria sdram quedaria en 32Mb muy alejado de lo que vemos en la practica, un banco de (4K x 16b)*(4 bancos)=256K
  2. Vi que las dispocisiones de filas y columnas en una memoria sdram normal pueden ser por dar un ejemplo 16,384 filas  x 1,024 columnas, mientras que observamos que en este kit las filas varian entre 11 y 12 y las columnas entre 8 y 11, como puede ser posible eso, tan pocas??????
  3. Me impresiona que la sdram externa sea tan grande fisicamente y de tan poca capacidad  (128 Mbit, 64 Mbit accesibles) comparada con la suma de los dos bancos de sdram internos en el micro.
  4. Segun el manual del micro la dispocision de memoria maxima utilizando 16 bits de datos es "4 x 8K x 2K x 2" (128 Mb) , puedo comprender que 4 sea de los bancos, 2 multiplicando al doble de la memoria que se obtendria con 8b de datos, pero el 8K x 2K no lo comprendo dado lo dicho en los anteriores puntos
  5. el bus de direcciones es de 12 bits , sin embargo las direcciones no son de 12 bits, si no que son de 28 bits (HADDR(AHB Internal Address Lines)) dado que las direcciones van del 0xC000 0000 al 0xCFFF FFFF de la sdram banco1. Donde de todas maneras de esos 28 bits no son usados completamente para alojar filas y columnas si no tambien bits reservados, seleccionar el banco que se esta usando y el byte enable. Aun no comprendo del todo como jugar con esas filas y columnas al momento de guardar algun dato, pero sigo en ello, de momento se que con libertar puedo usar 1 byte y mitad del otro al momento de alojar algun dato.
  6. En el ejemplo C:\STM32Cube\Repository\STM32Cube_FW_F7_V1.3.0\Projects\STM32746G-Discovery\Examples\FMC\FMC_SDRAM cuando escribe en las distintas pocisiones de memoria un dato guardado  anterioremente en un vector se cuida meticulosamente de no escribir los primeros dos bits de menor peso multiplicando una variable que crece de a unidad por cuatro, no comprendo ese accionar ya que el primer bit de menos peso corresponde al bit enable y ese no debe tocarse, pero el segundo bit de menor peso ya corresponde a las columnas sin embargo el programa cuida de escribir ahi, de escribirse ese bit el programa se halla estancando, aun me encuentro intentando comprender porque.
    Si se cambia el tamaño de las columnas del valor 8 por defecto a cualquier otro (9,10,11) el programa presenta que los datos escritos no concuerdan con los leidos, eso tampoco lo comprendo.
Disculpen si algunas dudas son infantiles o detectan que carezco de algun concepto basico. Confio en que ustedes puedan ayudarme a desatar los nudos que me atan a cada item que escribi.

Saludos Cordiales.

Federico Noto

unread,
Jan 30, 2016, 7:04:13 PM1/30/16
to Embebidos32
Adjunto unas imagenes utiles.
3.jpg
1.jpg
2.jpg

martin ribelotta

unread,
Jan 30, 2016, 10:35:13 PM1/30/16
to embeb...@googlegroups.com
El 30 de enero de 2016, 21:00, Federico Noto <antoni...@gmail.com> escribió:
Buenas noches, recurro a ustedes ante ya mi gran, gran, graaaan confusion intentando comprender la SDRAM de este kit de desarrollo. Les propongo mis dudas en distintos items.
  1. Los maximos bits que puedo asignar al bus de direcciones es de 12, dando asi 2^12 = 4K es decir 4096 palabras, pero segun el manual del micro, un banco de la memoria de la sdram es de 4(bancos)x64Mb, centrandonos en esos 64Mb que estan limitados por 16 bits de datos, un banco de la memoria sdram quedaria en 32Mb muy alejado de lo que vemos en la practica, un banco de (4K x 16b)*(4 bancos)=256K
No, vos seleccionas 12bits de filas y 11 bits de columna como máximo para 16 bits. Vos mismo lo pones en la imagen del otro mensaje:
Imágenes integradas 1
Ahi se ve clarito que con 12 bits de columnas tenes todavia 8 bits mas de filas para direccionar ademas de los cuatro bancos. Cada uno de 2 bytes (o 16 bits como mas gustes)
Entonces tenes 4 bancos X 2^12 filas X 2^8 columnas X 2 bytes en cada acceso (16 bits de ancho de bus) = 4x2^12x2^8x2=8MBytes como minimo y 4x2^12x2^11x2=64MBytes como maximo (con 12 bits de row-address)
Para usarlo con 13 bits de addres el maximo seria:
4x2^13x2^11x2=128MBytes

Basicamente te estas olvidando que las DRAM direccionan columnas con RAS activo y filas con CAS activo, por lo que el ancho del bus de direcciones se duplica practicamente.
  1. Vi que las dispocisiones de filas y columnas en una memoria sdram normal pueden ser por dar un ejemplo 16,384 filas  x 1,024 columnas, mientras que observamos que en este kit las filas varian entre 11 y 12 y las columnas entre 8 y 11, como puede ser posible eso, tan pocas??????
La memoria es de 8MBytes, la mas chica que conseguis. Asi que si, te estan perreando la memoria como a los mejores jejejeje. 
  1. Me impresiona que la sdram externa sea tan grande fisicamente y de tan poca capacidad  (128 Mbit, 64 Mbit accesibles) comparada con la suma de los dos bancos de sdram internos en el micro.
No van a cambiar el empaque porque el chip sea mas chioco!!!! Va, de hecho, esa es la idea de los waffer packages, pero no estan para SDRAM. Basicamente, el tamaño del encapsulado responde a estandares, no a que "tan grande" resulte el chip. 
  1. Segun el manual del micro la dispocision de memoria maxima utilizando 16 bits de datos es "4 x 8K x 2K x 2" (128 Mb) , puedo comprender que 4 sea de los bancos, 2 multiplicando al doble de la memoria que se obtendria con 8b de datos, pero el 8K x 2K no lo comprendo dado lo dicho en los anteriores puntos
8K son las filas que direccionas con RAS activo usando las lineas A[12:0] y 2K son lo que direccionas cuando CAS esta activo con A[10:0]  
  1. el bus de direcciones es de 12 bits , sin embargo las direcciones no son de 12 bits, si no que son de 28 bits (HADDR(AHB Internal Address Lines)) dado que las direcciones van del 0xC000 0000 al 0xCFFF FFFF de la sdram banco1. Donde de todas maneras de esos 28 bits no son usados completamente para alojar filas y columnas si no tambien bits reservados, seleccionar el banco que se esta usando y el byte enable. Aun no comprendo del todo como jugar con esas filas y columnas al momento de guardar algun dato, pero sigo en ello, de momento se que con libertar puedo usar 1 byte y mitad del otro al momento de alojar algun dato.
????? No, pode susar cualquier tamaño de datos que soporte el micro 8bits, 16bits y 32bits... no se de donde viene la confusión. Como bien decis la direccion de la SDRAM se arma asi:
Selector de parte alta, baja o ambas (que determina el valor de DQM1:0) Bit A0 de la dirección del micro en este sentido:
- Para acceso de bytes: A0=0 implica que DQM1=0 y DQM0=1 accediendo solo a los 8 bits bajos del chip de SDRAM
- Para acceso de bytes: A0=1 implica que DQM1=1 y DQM0=0 accediendo solo a los 8 bits altos del chip de SDRAM
- Para acceso de 16 bits: Si está alineado A0 no importa y DQM1=DQM0=1 accediendo a ambos bytes.
Si no está alineado, puede dar un error o intentar hacer dos accesos al bus manejando DQM1 y DQM0 con los valores que corresponda a lo que deba afectar (parte alta o baja) en cada acceso.

Columnas (sacadas por A10:0 cuando CAS=0): Bits 11:1 de la direccion lineal del micro
Filas (sacadas por A12:0 cuando RAS=0): Bits 24 a 12 de la direccion lineal del micro
Banco (scados por A14:13 en todos los accesos): Bits 26 y 25 de la direccion lineal del micro

Todo esto se corre un bit a la izquierda para un bus de 32 bits dejando A0 y A1 como los controladores de DQM0 1 2 y 3 (control de los cuatro bytes que hay en el bus de 32 bits)
  1. En el ejemplo C:\STM32Cube\Repository\STM32Cube_FW_F7_V1.3.0\Projects\STM32746G-Discovery\Examples\FMC\FMC_SDRAM cuando escribe en las distintas pocisiones de memoria un dato guardado  anterioremente en un vector se cuida meticulosamente de no escribir los primeros dos bits de menor peso multiplicando una variable que crece de a unidad por cuatro, no comprendo ese accionar ya que el primer bit de menos peso corresponde al bit enable y ese no debe tocarse, pero el segundo bit de menor peso ya corresponde a las columnas sin embargo el programa cuida de escribir ahi, de escribirse ese bit el programa se halla estancando, aun me encuentro intentando comprender porque.
Eso no tiene nada que ver con la SDRAM sino conque el bus es mas eficiente accedido en multipos de 4 bytes (32 bits) porque sinó tiene que dividir el acceso en dos o mas operaciones de bus. Posiblemente eso no sea soportado por el controlador SDRAM. Pensa que sino, tendria que ser mas complejo y poder transformar una operación des alineada a varias operaciones de bus. 
  1. Si se cambia el tamaño de las columnas del valor 8 por defecto a cualquier otro (9,10,11) el programa presenta que los datos escritos no concuerdan con los leidos, eso tampoco lo comprendo.
Eso es porque no accede bien a la SDRAM y escribe/lee cualquier cosa.
Las filas y columnas son fijas para la memoria y no se pueden cambiar (salvo que logres engañar a la memoria pero hay pocos valores que hace eso)

Disculpen si algunas dudas son infantiles o detectan que carezco de algun concepto basico. Confio en que ustedes puedan ayudarme a desatar los nudos que me atan a cada item que escribi.

Saludos Cordiales.

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Federico Noto

unread,
Jan 30, 2016, 11:22:47 PM1/30/16
to Embebidos32
Olvide mencionar que el bus de datos esta restringido no se puede acceder a más de 16 bits.

martin ribelotta

unread,
Jan 31, 2016, 9:06:21 AM1/31/16
to embeb...@googlegroups.com
El 31 de enero de 2016, 1:22, Federico Noto <antoni...@gmail.com> escribió:
Olvide mencionar que el bus de datos esta restringido no se puede acceder a más de 16 bits.

Eso es porque el chip de SDRAM soldado (y el empaque y el PCB) tienen 16 bits. Es una limitación de diseño de la placa. El micro en si, puede usar un bis de 32 bits (solo disponible en LQFP176, LQFP208 y los encapsulados BGA)

Ahora, creo que se me está escapando la/las preguntas o no he respomdido tus dudas en el mail anterior.
 
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

Federico Noto

unread,
Jan 31, 2016, 9:29:12 AM1/31/16
to Embebidos32
Las estoy leyendo muy atentamente y con paciencia. Cualquier cosa que no entienda o que crea que fue mal interpretado vuelvo a realizar una respuesta. Desde ya muy agradecido por tu respuesta!, espero sacarme las dudas!. Gracias.
Reply all
Reply to author
Forward
0 new messages