QLSD

Subforo oficial del Sinclair QL: realiza aquí las consultas relativas a tu QL.

Moderador: Sir Cilve Sinclair

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: QLSD

Mensaje por mcleod_ideafix » Mar Abr 19, 2011 9:45 pm

El prototipo ya está construido.

Cara superior, con la mayoría de componentes:
Imagen

Cara posterior, con los componentes SMD, incluido el conector SD/MMC:
Imagen

El prototipo enchufado al QL. Una de las cosas que habrá que cambiar es la ubicación de la EPROM: está demasiado pegada al conector y choca con la carcasa del QL.
Imagen

Ahora toca la parte más emocionante (cuando funciona) o más ingrata (cuando no funciona), de coger y probar la funcionalidad básica del prototipo, a base de SuperBASIC, peekeando (que no pokeando ;) ) en las direcciones oportunas a ver qué sale :D

NOTA 1: la EPROM está ahora mismo de "atrezzo" ya que aún falta mucho para que sea absolutamente necesario que esté presente. Es de 32K porque son las que tengo por aquí. En el esquema del prototipo, una de las líneas de direcciones está conectada a masa, con lo que en realidad estoy usando sólo 16K de los 32K que tiene.

NOTA 2: en las fotos aparece pinchada una tarjeta SD-HC, pero eso es sólo porque es la que tenía más a mano para la foto. No tengo ni idea de si el protocolo SPI es compatible con este tipo de tarjetas, o siquiera si merece la pena soportarlas, ya que con mucha menos capacidad hay de sobra para lo que necesita el QL. Habida cuenta que seguramente implementaré FAT16 como sistema de ficheros, hay un límite de 2GB por partición. No sé si QDOS establece algún límite por debajo de éste para sus sistemas de ficheros o particiones.
Web: ZX Projects | Twitter: @zxprojects

afx
Sabreman
Mensajes: 396
Registrado: Dom Feb 24, 2008 10:56 pm

Re: QLSD

Mensaje por afx » Mar Abr 19, 2011 11:34 pm

mcleod_ideafix escribió:Ahora toca la parte más emocionante (cuando funciona) o más ingrata (cuando no funciona), de coger y probar la funcionalidad básica del prototipo, a base de SuperBASIC, peekeando (que no pokeando ) en las direcciones oportunas a ver qué sale ...

¡¡ Que nervios !! :D

.

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: QLSD

Mensaje por radastan » Mié Abr 20, 2011 7:14 am

Ganitas de verla funcionando aunque sea desde SuperBASIC a base de peeks, por lo menos con eso ya hemos superado la barrera del hardware y sólo hay que centrarse en el software.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: QLSD

Mensaje por mcleod_ideafix » Mié Abr 20, 2011 3:55 pm

Esta parte es un poco más lenta. De momento puedo decir que la tarjeta se comporta igual que en las simulaciones. Bueno... había un "pequeño fallo": yo pensaba que ROMOEH era activa a nivel bajo (como de hecho puse en la simulación) y resulta que no, que es activa a nivel alto (por qué no me fijaría en la H del nombre). Un leve cambio en la descripción de la CPLD y ahora la tarjeta ya puede encender y apagar el LED de actividad, muestra el estado de los bits card detect, write protect y busy, y puedo poner un valor en el divisor de reloj del reloj SPI.

Ahora falta la parte interesante de verdad: acceder a la tarjeta SD, que tiene un prototocolo de inicialización un poco delicado, y a continuación, pedirle que lea 64 bloques de 512 bytes cada uno (32768 bytes) y me los vuelque a pantalla, a ver qué sale :D
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: QLSD

Mensaje por mcleod_ideafix » Lun Abr 25, 2011 12:18 am

Primera prueba de QLSD leyendo una pantalla (32768 bytes) de la tarjeta SD. Se compara la velocidad conseguida con la de un disquete realizando la misma operación.
http://www.youtube.com/watch?v=JAtU87IzNfA

Unas aclaraciones:
- El programa está leyendo la tarjeta sin ningún sistema de ficheros. No hay aún driver. La pantalla está en los primeros 64 sectores de la tarjeta.
- Por problemas en el reloj (creo que es eso), la tarjeta SD está siendo usada a una velocidad 50 veces menor que la que realmente puede llegar a tener. Una SD "normalita" puede funcionar a 20MHz, pero en las pruebas no he conseguido nada fiable más allá de los 400kHz. No sé si es un problema de la descripción en Verilog, o del reloj que estoy usando, que no me acaba de convencer la forma de onda que me da a la CPLD.
- De momento, no he probado la escritura. Bastante ya si logro que lea decentemente :D

El programa mostrado está en ensamblador, porque pensé que el compilador de C me estaba dando problemas, pero parece que al final la cosa es del hardware. De todas formas, el compilador no me da un código muy optimizado que digamos.

Para que se vea lo lento que está yendo respecto a cómo debería ir, aquí esta el cronograma real de lo que está pasando en unos cuantos microsegundos de ejecución, visto en el analizador lógico.

Imagen

SCLK es el reloj de la tarjeta SD, y es quien dicta a qué velocidad leemos o escribimos. Este es el reloj que va más lento de lo que debiera. Cada vez que queremos leer un byte se envía una ráfaga de 8 períodos de reloj.

Lo que el QL lee desde la tarjeta SD en ese tiempo está en la última línea del cronograma. Sólo hay dato nuevo en cada ráfaga de SCLK.

Los pequeños pulsitos en ROMOEH son los accesos del QL a la interfaz QLSD, bien para solicitar un nuevo dato, o para preguntar si aún se está recibiendo un dato y hay que esperar a que termine, o bien para leer de forma efectiva el dato recién enviado por la tarjeta. Se ve que esos pulsitos son muy muy cortos en comparación con la ráfaga de SCLK. Pues bien, cada pulsito tiene 300ns de anchura. Si el reloj SCLK fuera a su máxima velocidad, el tiempo de una ráfaga SCLK sería de 320ns, es decir, el mismo tiempo que se dura un pulsito en ROMOEH.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
Scooter
Freddy Hardest
Mensajes: 711
Registrado: Jue Nov 11, 2010 10:17 pm

Re: QLSD

Mensaje por Scooter » Lun Abr 25, 2011 1:25 am

¡¡¡Eres un monstruo!!!

Eso si, uno a 400kHz :wink:
Aquellos chalados en sus viejos cacharros...

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: QLSD

Mensaje por radastan » Lun Abr 25, 2011 7:33 am

Se ve claramente que ya carga más rápido que desde un disquette, con eso yo ya me doy con un canto en los dientes. Pero vamos, que si consigues mayor velocidad aún sería la monda.

No se como has implementado en la CPLD la lectura de la SD, pero lo suyo sería usar un buffer en el que cupiese al menos un sector de la tarjeta (512 bytes). Lo digo porque lo mismo es cosa del QL, por culpa de las interrupciones de la ROM, el que tengas esos problemas.

Cuando implementes el sistema de archivos FAT vas a tener que leer de todas formas por sectores, así que mejor ir adaptando el diseño al tamaño del sector.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: QLSD

Mensaje por mcleod_ideafix » Lun Abr 25, 2011 8:28 am

radastan escribió:No se como has implementado en la CPLD la lectura de la SD, pero lo suyo sería usar un buffer en el que cupiese al menos un sector de la tarjeta (512 bytes). Lo digo porque lo mismo es cosa del QL, por culpa de las interrupciones de la ROM, el que tengas esos problemas.


No, no es cosa del QL. Probé en modo supervisor, con las interrupciones deshabilitadas y me pasa lo mismo. No creo que sea eso. Por otra parte, no puedo implementar dentro de la CPLD un buffer d e512 bytes. La CPLD no tiene tanta memoria interna. Ponerla externa encarece el asunto, y no merece la pena: llegado el caso, basta con hacer la operación de lectura atómica, pasando a modo supervisor y desactivando las interrupciones.

radastan escribió:Cuando implementes el sistema de archivos FAT vas a tener que leer de todas formas por sectores, así que mejor ir adaptando el diseño al tamaño del sector.


Ya. De hecho las rutinas de acceso a la SD ya tienen en cuenta eso, porque a la SD hay que leerla por sectores, así que desde el principio la estoy leyendo por sectores de 512 bytes. Por eso decía que la pantalla ocupaba los primeros 64 sectores de la tarjeta: llamo 64 veces a la función de "leer sector".
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: QLSD

Mensaje por radastan » Lun Abr 25, 2011 8:40 am

Hay algo que no entiendo, dices que la SD hay que leerla por sectores pero a la vez dices que no puedes tener un buffer en el que quepa un sector. ¿Cómo haces la lectura?

Lo digo desde el más absoluto desconocimiento sobre como trabaja una SD, yo sólo he trabajado a bajo nivel con las Compact Flash (mucho más sencillas).
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: QLSD

Mensaje por mcleod_ideafix » Lun Abr 25, 2011 9:00 am

radastan escribió:Hay algo que no entiendo, dices que la SD hay que leerla por sectores pero a la vez dices que no puedes tener un buffer en el que quepa un sector. ¿Cómo haces la lectura?

Lo que no puedo tener es un buffer en la propia CPLD (eso entendí de lo que dijiste al hablar de que la multitarea del QL podría dar problemas). Obviamente, la lectura la hago desde la SD hacia 512 bytes de memoria RAM del QL, leyendo un byte cada vez, tal y como harías con una Compact Flash cuando le das un comando de lectura y te metes en un bucle de 512 vueltas.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: QLSD

Mensaje por radastan » Lun Abr 25, 2011 11:31 am

mcleod_ideafix escribió:
radastan escribió:Hay algo que no entiendo, dices que la SD hay que leerla por sectores pero a la vez dices que no puedes tener un buffer en el que quepa un sector. ¿Cómo haces la lectura?

Lo que no puedo tener es un buffer en la propia CPLD (eso entendí de lo que dijiste al hablar de que la multitarea del QL podría dar problemas). Obviamente, la lectura la hago desde la SD hacia 512 bytes de memoria RAM del QL, leyendo un byte cada vez, tal y como harías con una Compact Flash cuando le das un comando de lectura y te metes en un bucle de 512 vueltas.


Pero entonces los tiempos de lectura de la SD dependen de los tiempos de acceso de la RAM del QL. Lo que se me ocurre así de primeras es que debes escoger una frecuencia de lectura de la SD que sea múltiplo de la frecuencia de trabajo de la RAM, así no hay cosas raras en los tiempos de acceso. Puede sonar a chorrada, pero es que estamos tratando de acceder a un dispositivo que es más rápido que la propia RAM del QL. Me huele que hay un poco de desincronización y ese es el problema.

Por otro lado, ¿lees directamente la SD o lo haces a través de un buffer de 8 bits al menos? es que así separas las dos partes perfectamente y no hay problemas de tiempos.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: QLSD

Mensaje por mcleod_ideafix » Lun Abr 25, 2011 11:49 am

radastan escribió:Pero entonces los tiempos de lectura de la SD dependen de los tiempos de acceso de la RAM del QL.

???????????????????
A ver, a ver...
Leer un sector de la tarjeta SD es como leer un sector de una Compact Flash. Tú lees 512 bytes del puerto de lectura del dispositivo y lo vuelcas a RAM, a un buffer. De ahí, ya lo envías a dónde sea.

radastan escribió:Lo que se me ocurre así de primeras es que debes escoger una frecuencia de lectura de la SD que sea múltiplo de la frecuencia de trabajo de la RAM, así no hay cosas raras en los tiempos de acceso. Puede sonar a chorrada, pero es que estamos tratando de acceder a un dispositivo que es más rápido que la propia RAM del QL. Me huele que hay un poco de desincronización y ese es el problema.

No, no. No sé qué te estarás imaginando, pero la cosa no va por ahí. Vuelvo a repetir que creo que es un problema con el reloj que alimenta a la CPLD. Por otra parte, ¿escoger una frecuencia de trabajo múltiplo de la frecuencia de trabajo de la RAM? ¿Y cómo se controla eso, cuando hay contenciones y demás? Por otra parte, el dispositivo NO es más rápido que la RAM del QL. Si lo fuera, ¡estupendo! pero a 20MHz, el tiempo que se tarda en recoger un dato son unos 320ns, y el tiempo de acceso de la memoria que tengo instalada en el QL (mi ampliación de 512B) es de 20ns

radastan escribió:Por otro lado, ¿lees directamente la SD o lo haces a través de un buffer de 8 bits al menos? es que así separas las dos partes perfectamente y no hay problemas de tiempos.

A través de un buffer de 8 bits, claro está. Si no existiera ese buffer, tendría que leer el contenido de la memoria bit a bit (que es como la da)
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: QLSD

Mensaje por radastan » Lun Abr 25, 2011 12:54 pm

Vale, ya me aclaro con la SD:

- La lectura es bit a bit (serie)
- Vuelcas el contenido a un buffer de 8 bits
- El QL lee el contenido de ese buffer

Pues ya está claro que del QL no es problema, porque hay buffer de por medio. Lo único que puede pasar es que las peticiones de lectura del QL sean más rápidas que lo que tarda en llenarse el buffer, pero estoy seguro que eso ya lo has tenido en cuenta con algún bit de "lectura completada" o algo así que indique al QL que puede realizar otra petición.

Entonces pasamos a otra pregunta, ¿está usando el modo de transferencia SPI, no? Es decir, ¿usas este formato?:

http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus

¿Qué clase de tarjeta usas? porque según la clase de la tarjeta alcanzas un nivel de transferencia:

- Clase 2, 2 MB/s
- Clase 4, 4 MB/s
- Clase 6, 6 MB/s
- Clase 10, 10 MB/s

Perdona si suelto alguna incongruencia de vez en cuando, es que ni se como es tu diseño ni cómo estás leyendo los datos.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: QLSD

Mensaje por mcleod_ideafix » Lun Abr 25, 2011 1:11 pm

radastan escribió:Lo único que puede pasar es que las peticiones de lectura del QL sean más rápidas que lo que tarda en llenarse el buffer, pero estoy seguro que eso ya lo has tenido en cuenta con algún bit de "lectura completada" o algo así que indique al QL que puede realizar otra petición.

Exacto. Hay un bit de "ocupado" que testeo hasta que termina la transferencia y entonces es cuando leo el registro de salida con el dato de 8 bits ya preparadito.

radastan escribió:Entonces pasamos a otra pregunta, ¿está usando el modo de transferencia SPI, no? Es decir, ¿usas este formato?:

Sí, uso SPI. No uso el protocolo SD porque:
- Necesito más pines en la CPLD, que no tengo.
- Tengo que implementar CRC para todos los comandos, por lo que lo que gano de velocidad en un lado (transfiero 4 bits en lugar de 1 en cada golpe de reloj) lo pierdo en el cálculo del CRC que es necesario en cada transferencia, y que en SPI es opcional.

radastan escribió:¿Qué clase de tarjeta usas? porque según la clase de la tarjeta alcanzas un nivel de transferencia

Una que debería soportar mucha más frecuencia de la que uso, ya que esa misma tarjeta la uso en el adaptador ZXMMC, que va a 3,5MHz y funciona bien. Fíjate además que las más "lentas", de la clase 2, si soportan 2MB/s es porque su reloj debe ser de como mínimo 2 * 8 = 16MHz.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: QLSD

Mensaje por radastan » Lun Abr 25, 2011 1:49 pm

Vale, hay algo que no me cuadra entre tus señales y las que en teoría debería haber con la SD. En concreto estoy mirando las señales MOSI y MISO, que según la teoría deberían funcionar así:

Imagen

Pero tu tienes:

Imagen

Según eso no veo sincronizado SCLK con MOSI y MISO, entre otras cosas porque tendrían que estar desplazadas medio ciclo de reloj antes. ¿Me equivoco?
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 12 invitados