Showing posts with label componentes wiimote. Show all posts
Showing posts with label componentes wiimote. Show all posts

Wednesday, September 17, 2008

HID my ass...

Interfaz HID
El estándar HID, permite que los dispositivos se puedan describir a si mismos, utilizando un bloque descriptor de HID. Este bloque incluye una enumeración de reportes que el dispositivo entiende.Un reporte, puede ser visto como un puerto de una red, que está asigando con algún servicio en particular. La única diferencia, es que los reportes son unidireccionales, y el descriptor HID lista para cada puerto la dirección, ya sea de salida o de entrada, también dice cual sera el tamaño payload para cada uno de los puertos. Como todos los dispositivos HID, el Wiimote reporta su bloque descriptor HID, cuando se le pide información usando el protocolo SDP. Su descriptor, se ve de la siguiente forma:



Salidas





















Salidas:
ID del Reporte Tamaño
Payload
Función
0x11 1 Player LEDs, Rumble
0x12 2 Tipo de reporte/ID
0x13 1 Habilita el sensor infrarojo
0x14 1 Habilita bocina
0x15 1 Controla el estátus
0x16 21 Escribe datos
0x17 6 Lee datos
0x18 21 Le da datos a la bocina
0x19 1 Pone a la bocina en silencio
0x1a 1 Habilita el sensor infrarojo 2

Entradas






























Entradas:
Reporte ID Tamaño
Payload
Función
0x20 6 Puerto de expansión
0x21 21 Lee datos
0x22 4 Escribe datos
0x30 2 Es sólo para los botonesButtons only
0x31 5 Da un reporte de sensado de los botones.
0x32 16 Es puerto de expansión para los botones
0x33 17 Da un reporte del sensado del movimiento , así como de los botones.
0x34 21 Puerto de expansión del infrarojo
0x35 21 Da un reporte del sensado del movimiento , así como de los botones.
0x36 21 Da un reporte del sensado del movimiento , así como de los botones.
0x37 21 Da un reporte del sensado del movimiento , así como de los botones.
0x38 21 Da un reporte del sensado del movimiento , así como de los botones.
0x3d 21 Da un reporte del sensado del movimiento , así como de los botones.
0x3e 21 Da un reporte del sensado del movimiento , así como de los botones.
0x3f 21 Da un reporte del sensado del movimiento , así como de los botones.


Nótese que "salida" se refiere a paquetes, que son enviados del host al wiimote, y "entrada" se refiere a paquetes que van del Wiimote al host.

La notación de escritura, que se llevará acabo, es:

Incluir la cabecera del Bluetooth en paréntesis, el ID del reporte, y finalmente el payload. Cada byte se escribe en hexadecimal, sin tomar el prefijo 0x y separado por espacios.
Por ejemplo:
(a1) 30 00 00

Es un paquete de datos de entrada (0xa1), en el canal 0x30, con 2 bytes de payload 0x00, 0x00.

You got an incomming call from Mr. Wiimote

Comunicaciones.
El Wiimote se puede comunicar a la computadora, vía Bluetooth. El controlador Bluetooth que se utiliza es el chip Broadcom 2042. El cual es diseñado para ser utilizado con dispositivos, que siguen el estándar Bluetooth de dispositivos de Interfaces Humanas, (HID por sus siglas en inglés) como pueden ser teclados o mice. El Bluetooth HID se basa directamente en el estándar USB, y mucha de la misma documentación es aplicable.


La computadora, le puede pedir información al Wiimote, mediante el protocolo de descubrimiento de servicios, (SDP, por sus siglas en inglés). En este caso, el Wiimote reportará y regresará una gran cantidad de información.
En particular reporta:
Nombre :Nintendo RVL-CNT-01
ID Vendedor0:x057e
ID del Producto :0x0306


El Wiimote envía reportes al host, con una frecuencia máxima de 100 reportes por segundo. Del estándar Bluetooth, El Wiimote no utiliza ninguna de sus validaciónes o codificaciónes.


Ahora bien, para que la computadora tenga conexión con él, uno debe poner al control en modo de descubrimiento de servicios, esto se logra al apretar los botones 1 y 2 al mismo tiempo, o al apretar el botón rojo de sincronización, que se encuentra en la parte de atrás, cerca de la batería. Una vez que se encuentra en este modo, el HID driver del host, puede empezar a pedirle información al Wiimote.
Pero, si el driver HID del host no logra conectarse con el Wiimote, en menos de 20 segundos, el Wiimote se apagará . Apretando los botones 1 y 2 continuamente, hará que el Wiimote, se tenga que mantener en modo de descubrimiento, por lo que no se apagará. Esto, no funciona cuando se utiliza el botón de sincronizar.
Cuando se encuentra en modo de descubrimiento, los LEDS del Wiimote parpadearán. El número de parpadeos es directamente proporcional con lo que le queda de vida a la pila.

Monday, September 15, 2008

Undressing the Wiimote on a mexican night

Veremos más de cerca al Wiimote.

Empezaremos analizando su origen: Es manufacturado por Mitsumi (FCC ID POO-WC45) y Foxconn (FCC ID UMB-WCF7).

Los componentes que conforman al Wiimote son:

Parte Functiones Localizacion
Documentacion
ADXL330 Acelerómetro Se encuentra en la parte de arriba, a la izquierda del botón A Data Sheet, Schematic
H7824HE Driver del la bocina Arriba, entre la bocina y el botón 1 Data sheet
ST 4128 BWP EEPROM Arriba entre home y botón A Data Sheet(?)
BCM2042 Bluetooth, 8051 core, RAM/ROM Hasta abajo, localizado un poco arriba de las baterías. Product Info
M 626 3322 ? Arriba, a la derecha del boton 1
?
U7849 6Q63 Audio DAC?
Convertidor digital analogico
Abajo, junto al boton naranja para sincronizar, cerca de la batería ?





Sí, es una foto de un Wiimote, que se compró por separado. Viendo su linda envoltura, uno se pregunta que secretos oscuros guarda este artefacto.




Abriéndolo, empezamos a descubrir todos sus "dirty little secrets":



Adentro, vemos algunas de las cosas que brinda Nintendo. La bocina, es el disco negro con las dos pestañas. El acelerómetro, ADXL330, está localizado justo donde se encuentra la cabeza del desarmador de la imagen anterior.







En esta vista, que está un poco de lado vemos muchos otros componentes. En la parte de abajo, encontramos un pequeño motor vibrador, que sirve para dar el efecto de "rumbling". Asimismo, tenemos al final el senor infrarojo. Pegado al sensor infrarojo, se encuentra un capacitor de 4V 3300uF . Pero, ¿Para qué serviría un capacitor tan grande? Se cree que se utiliza, para limpiar el circuito DC,es decir para mantener estable el voltaje de entrada.
Otra teoría, es que el capacitor funciona como una pequeña fuente de energia.
Lo que sucede, es que si un jugador, se encuentra jugando muy efusivamente, las baterias AA, pueden comprimir los resortes lo suficiente, para desconectarlas temporalemente, al menos medio segundo. El gran capacitor, por ello, serviría para brindar energía al sistema momentaneamente.


En la siguiente imagen, tenemos el botón scan push, y los muy elegantes clips para la batería AA.


Todas las "cositas redondas" (330,100,4R7) son inductores 33uH, 10uH, and 4.7uH. Son usados principlamente para corriente directa a corriente directa con entradas altas o entradas bajas. Se pueden usar, para hacer filtreo. El filtreo es muy importante para tener una señal de radio frecuencia proveniente del circuito integrado Broadcom del Bluethooth limpia.

BCM2042 es un circuito integrado de Broadband, de bajo costo para mouse/teclado inalambrico de Bluetooth. Utiliza un 8051 core, y una memoria RAM/ROM que guarda el perfil HID (HID, por sus siglas en inglés, human interface device , que significa dispositivo de interfaz con humanos, esto es un dispositvo de computadora que interacciona directamente con usuarios, toma entradas de humanos, y puede tener también una salida para entregar directo a humanos.) del bluetooth y la pila.

El wiimote, tiene además un pequeño cristal de 24MHz.

La imagen inferior, muestra el acelerometro y el EEPROM:




Finalmente tenemos al ADXL330, o acelerómetro, con código 0614 (Lo cul significa que este chip fue construido en la primera semana de Abril del 2006!) asi como las muy esperadas tapas de los 3 ejes y la capa de sumistro de energía.

La parte ST 4128 BWP , parece ser una EEPROM serial. Su hoja de especificaciones se encuentra : Aquí.
Los pines 1 al 4, se encuentran conectados a tierra. Vcc es el pin 8, el pin 7 tiene el control de la escritura, y está atado con la resistencia R38. Los pines 6 y 5 son las lineas de los datos seriales y reloj serial. La EEPROM, guarda información acerca del identificador Bluetooth, asi como algunos valores, que sirven para hacer cortes en las grandes cantidades de valores que arroja el acelerómetro ó el sensor infrarojo. Contiene muchas constantes como el ID del Bluetooth, revision de firmware etc.

Una gran parte de la funcionalidad del Wiimote se quema dentro del circuito integrado BCM2042 ,el cual es producido por Broadcom Corportation (Es importante saber, que Broadcom Corporation es una compañia norteamericana que construye circuitos integrados para comunciaciones de banda ancha) Allí, se guarda la pila HID del Bluetooth así como su protocolo.
Uno, se podría preguntar, ¿Dónde hace su entrada aquí la EEPROM?
La EEPROM aparece, debido a que durante el booting, se hace un ping a ella, para que devuelva el firmware del controlador del Wii. Por otro lado, se ha visto que la EEPROM, también guarda 'Miis'. Un Mii es un personaje personalizado, creado por el usuario, que participa en los juegos del Wii. La EEPROM guarda la información de este personaje.