HOME

            Guía Hardware del daVinci por Jesús Arias.

(última actualización: 1999-10-26)

English version.


La información contenida en este documento es el resultado de un buen número de horas de ingeniería inversa en un PDA daVinci de 2Mb. Este análisis comienza con la apertura del PDA para ver que hay adentro, continua con una modificación hardware para poder utilizar el modo bootloader-serie del procesador dragonball, y termina con la ejecución de unos sencillos programas de prueba

Parte de esta información procede del desensamblado del Sistema Operativo. De esta manera Mark Tillotson encontró los comandos del chip NEXUS para el manejo de la pantalla táctil y los botones. La sección de arranque del S.O. también es muy interesante a la hora de identificar los pines de E/S de propósito general y el mapa de la memoria.

Otros datos, como los pines del conector del cradle, y su esquema, están disponibles libremente en Internet.

Esta documentación puede contener errores y/o ser incompleta.

El manual: "MC68EZ328 Integrated Processor User's Manual" de Motorola es indispensable a la hora de entender este documento.


Contenido:

Novedades.

Esquema general del daVinci.

Memoria La pantalla LCD. El chip Nexus. Comunicaciones serie y el Cradle. Varios. Contribuciones.


Novedades

(2000-06-23) S.O. experimental para daVincis basados en la CPU dragonball.

(1999-10-25) Modo de bajo consumo del Nexus. Medidas de consumo.

(1999-10-24) Funciones de los pines PF0 y PD1.


Memoria;

256K vs 2Mb.

Hasta este momento se conocen dos modelos de daVinci: el 256 Kb y el 2Mb. la cantidad total de memoria de cada modelo es:

256K: 256 Kb RAM, 1MB Flash.

2Mb: 256 Kb RAM, 2MB Flash.

Como seguramente habrá notado, el primer modelo basa su nombre en la cantidad de RAM, mientras que el segundo se basa en la flash. Esto obedece claramente a una estrategia de mercado, pero personalmente pienso que es tan sólo un engaño.

Direccionamiento de la memoria.

El S.O. del daVinci direcciona su memoria a través de los chip-select programables del 68ez328. El mapa de memoria seleccionado coincide con el del Palm Pilot. ¿Por qué será?

FLASH PRINCIPAL $10C00000 (1 Mb)

FLASH SECUNDARIA $10400000 (1 Mb)

RAM $00000000 (Sólo los primeros 64 Kb) $10000000 (todos los 256 Kb)

RAM.

La memoria RAM se implementa mediante dos chips HY62V8100A de Hyundai. Cada chip tiene 128k celdas de memoria de 8 bits cada una. El 68ez328 está configurado para usar un bus de datos de 16 bits, de modo que cada chip de RAM sólo ocupa medio bus de datos. Un chip está conectado a D0-D7 mientras que el otro está conectado a D8-D15.

Un aspecto interesante de la RAM es el doble direccionamiento. Esto es posible gracias al uso de dos chips-select del 68ez238 y de una puerta lógica externa, del chip 74hc08, que realiza una función OR entre ambos chip-select. Los chip-select en cuestión son:

CSB0: Base=$10000000 Size=256Kb Wait_States=0 Read_Only=NO Supervisor_Only=NO Bus_Width=16 bits

CSC0: Base=$00000000 Size=64Kb Wait_States=0 Read_Only=NO Supervisor_Only=NO Bus_Width=16 bits.

Flash.

Hay dos chips de memoria flash de 1 Mb en la versión del daVinci de 2Mb o sólo un chip en el de 256Kb. El número de estos chips ha sido borrado intencionadamente por el fabricante, pero por el número de pines se deduce que deben tener un bus de 16 bits. De qualquier modo, todos los chips de memoria flash modernos pueden identificarse por software, y la flash del daVinci ha dado los siguientes números de identificación:

Manufacturer ID: $0004 (Fujitsu)

Device ID: $225B (MBM29LV800BA)

Estos chips de flash pueden proteger cada uno de sus sectores de forma individual. Una vez protegido, un sector no puede ser programado o borrado sin la aplicación de altas tensiones (12V) en el pin de reset y tras haber ejecutado un comando de desprotección, mientras que un sector no protegido se puede borrar y programar con sólo 3.3 voltios. La memoria flash principal tiene protegidos sus 3 primeros sectores (32 Kb). Esta zona de la memoria contiene el código de arranque del daVinci. El resto de la flash primaria (S.O.) y toda la flash secundaria (Aplicaciones) están sin proteger.

La flash primaria se selecciona mediante CSA0, que es el chip-select de arranque. La flash secundaria se selecciona mediante CSD0. La programación de estos chip-select es:

CSA0: Base=$10C00000 Size=1Mb Wait_States=1 Read_Only=NO Supervisor_Only=NO Bus_Width=16 bits Flash_Timming=NO

CSD0: Base=$10400000 Size=1Mb Wait_States=1 Read_Only=NO Supervisor_Only=NO Bus_Width=16 bits Flash_Timming=NO

Notas:


La pantalla LCD

Conexión del LCD.

El controlador de la pantalla LCD tiene una conexión directa con el 68ez328. Los principales aspectos son:

Modos de escala de grises.

El controlador LCD puede generar imágenes con 2 y 4 bit por pixel. Estos modos se programan a través del "LCD Panel Interface Configuration Register". El único problema asociado con estos modos es el parpadeo, que puede eliminarse programando un reloj de pixel más rápido en el "LCD Pixel Clock Divider Register". El divisor por defecto es 6, que es bueno para las imágenes de dos colores. Para los modos de 2 y 4 bits por pixel el divisor debe ser 3 y 1 respectivamente.


El chip Nexus.

Conexión serie SPI.

El daVinci incluye un chip a medida que se encarga de la pantalla táctil y de los botones. Este chip está etiquetado como "NEXUS rev 1.0", y se conecta al 68ez328 a través del interfaz de periféricos serie (SPI).

El SPI es un interfaz bidireccional. Mientras se saca un bit por SPIMTXD, entra otro bit por SPIMRXD. La temporización se controla por los flancos del reloj SPIMCLK. Desde el punto de vista del chip NEXUS, esto significa que se le pueden mandar comandos mientras se leen los datos previos.

El reloj del SPI está programado a una frecuencia muy baja (sysclock/512=32384 Hz). De este modo se dispone de tiempo suficiente para realizar las conversiones A/D mientras se transfieren los datos. La fase y polaridad el reloj toman los valores por defecto (00). Las transferencias son de 10 bits. Antes de cada transferencia se debe selecionar el chip NEXUS poniendo bajo el pin PD0. Entre la selección del chip NEXUS y la transferencia SPI se debe dejar un tiempo no inferior a 50 microsegundos.

El pin de E/S PD1 está conectado el reset del chip NEXUS. Para permitir el funcionamiento del chip este pin debe ponerse en alto.

Leyendo las coordenadas de la pantalla táctil.
 
TRANSFER SPI WRITE SPI READ
$0 
---- 
$40 
$0 

Las coordenadas X e Y se obtienen de un conversor A/D de 10 bit, por lo que su rango será: [0-1023].

Leyendo el estado de los botones.
 
TRANSFER 
SPI WRITE 
SPI READ 
$200 
---- 
$200 
BUTTONS 

BUTTONS es una palabra de 10 bit. Los botones pulsados se leen como 0. La posición de los botones en BUTTONS es:
 
BIT 
BUTTON 
DOWN 
TIME 
FIND 
UP 
RIGHT 
LEFT 
ON 

Leyendo el voltage de las pilas.
 
TRANSFER 
SPI WRITE 
SPI READ 
$80 
---- 
$80 
Vbat 

El voltage es: Vbat*3.3/1024

Pasando el chip Nexus al modo de bajo consumo.

El chip NEXUS responde a un comando para reducir el consumo de corriente cuando el daVinci está "dormido". Para apagar el chip NEXUS se debe dejar un retardo bastante largo (milisegundos) desde el último comándo válido hasta el comando de pasar a bajo consumo, que es:
 
TRANSFER SPI WRITE SPI READ
1
$100
----

Eventos que generan interrupciones.

El chip NEXUS solicita una interrupción al 68ez328 cuando se pulsa o suelta un boton, o cuando se pulsa en la pantalla táctil. Las interrupciones solicitadas son:


Comunicaciones serie y el Cradle.

Pines del conector del cradle.

El conector del cradle del daVinci es del tipo "borde de circuito impreso" y tiene 12 señales. Se emplean 4 señales en las comunicaciones serie. 3 son para el teclado externo, 1 para una interrupción reservada, 2 para la alimentación y 2 no están conectadas. Todas las señales tienen niveles lógicos CMOS (0 voltios para FALSO y 3.3 voltios para VERDADERO).


 
Pin 

Number

Signal 

Name

Description Direction 

with 

respect to 

daVinci

Functionality
1 RxD Data 

Receive

Input Serial data in. Up to 115200 baud.
2 TxD Data 

Transmit

Output Serial data out. Up to 115200 baud.
3 RTS Request to 

Send

Output daVinci asserts RTS when it is 

ready for host data. 

(not connected to PC)

4 CTS Clear to 

Send

Input Host asserts CTS when it is 

ready for daVinci data. 

(not connected to PC)

5 GND 

(Vss)

Ground Power 0 Volts
6 PD3 Keyboard Input Data input from keyboard
7 PD2 Keyboard ? Clock for keyboard
8 IRQ6 Reserved Input Reserved Interrupt input
9 IRQ1 Keyboard Input Keyboard Interrupt
10 Vcc 

(Vdd)

Power Power 3.3 Volts
11 NC - - Not connected (reserved)
12 NC - - Not connected (reserved)

Esquema del cradle. (Versión postscript.).

Conversión de niveles lógicos.

Como se puede ver en el esquema anterior, el PC debe proporcionar la alimentación para la conversión de niveles lógicos a través de los pines DTR y RTS. Para un buen funcionamiento DTR debe estar en alto (1 en MCR del 16550) y RTS en bajo (0 en MCR del 16550). Los niveles RS232 que se obtienen con este circuito son +3.3 y -12 voltios. El nivel alto es algo bajo, pero suficiente. Nótese que no se consume corriente del daVinci, de modo que las comunicaciones serie no tienen mucho efecto en la vida de las pilas. El pin TXD del daVinci puede programarse bien como salida de drenador abierto o como TOTEM-POLE.


Varios.

Sonido.

La única forma de producir sonido en el daVinci es a través de su altavoz piezoeléctrico. Este altavoz está conectado a la salida PWMO, seguramente a través de un amplificador de tensión de un único transistor. La calidad de este sistema de sonido es tan mala, que sólo es útil para producir pitidos.

Las malas características del sistema de sonido del daVinci se deben a la naturaleza resonante del altavoz, a la ausencia de filtros anti-alias y seguramente a grandes no-linealidades en la etapa amplificadora. Aunque la salida PWMO del 68ez328 puede reproducir muestras de sonido de 8 bits a frecuencias de 8, 16 y 32 KHz, las enormes distorsiones de la electrónica analógica hacen inútil esta funcionalidad, como demuestra la siguiente prueba:

Se reprodujo una onda sinusoidal de 1500 Hz a través de PWMO, con una frecuencia de muestreo de 32384 Hz, y una repetición de muestras cuadruple, lo que da una frecuencia de muestreo efectiva de 8096 Hz, mientras que la portadora PWM está en 32 KHz. La onda muestreada y cuantizada es:

La baja frecuencia de muestreo hace parecer esta onda algo irregular, pero su espectro muestra claramente que se trata de un sonido muy "monocromático":

El sonido que realmente emite el daVinci tiene el siguiente espectro:

En esta gráfica se reslata la frecuencia fundamental (f0), de 1500 Hz, sus armónicos (2f0, 3f0,...), la frecuencia de muestreo (fs), de 8096 Hz y algunas frecuencias alias (fs-f0, fs-2f0,...). Como se puede ver, el espectro de la onda reproducida dista mucho del de un único tono. Además hay que destacar que la componente de mayor amplitud no es la frecuencia fundamental, sino el tercer armónico. La conclusión que se saca es:

El daVinci es incapaz de reproducir ondas muestreadas. Sólo pueden generarse ondas rectangulares o cuadradas. Esta limitación no es culpa del 68ez328, sino del amplificador y el altavoz.

Interruptor de la tapa de las pilas..

En la parte trasera del daVinci hay un pequeño interruptor que bloquea la tapa de las pilas. Este interruptor se debe subir para abrir el compartimento de las pilas y poder cambiarlas cuando están bajas. No se suele pensar que este interruptor tenga implicaciones en el software, pero una prueba demostró que el pin PD5 se pone en nivel bajo cuando se sube este interruptor. Este pin puede generar una interrupción de nivel 2, de modo que el S.O. puede realizar algún procesamiento "urgente" antes de quedarse sin alimentación.

Consumo de potencia. .

La siguiente tabla muestra la corriente consumida por el daVinci bajo diferentes condiciones de funcionamiento. las medidas se tomaron mientras la CPU ejecutaba un bucle tonto:
 
Measurement CONDITIONS
Battery Current (mA)
CPU Full Speed (16.5 MHz), LCD ON, BACKLIGHT ON
87.5
CPU Full Speed (16.5 MHz), LCD ON
55
CPU Full Speed (16.5 MHz), LCD OFF
46.1
CPU doze mode 1/32, LCD OFF
8.7
CPU doze mode 0/32 (stopped), LCD OFF
7.3
PLL OFF, LCD OFF
2.1
PLL OFF, LCD OFF, Nexus Power-Down
0.1

De la tabla anterior se puede inferir la corriente consumida por cada subsistema del daVinci:
 
daVinci Subsystem
Current (mA)
Nexus Chip
2
LCD
8.9
Backlight
32.5
CPU at Full Speed (16.5MHz)
44
CPU, doze mode: N/32
5.2+1.2*N
CPU Peripherals & PLL system
5.2


Contribuciones.