Hola, después de varios años usando solo el cable del pack carga y juega porque la batería murió casi el primer día, me he propuesto repararla. Lo primero que me sorprendió fue encontrarme con dos pilas recargables normales y molientes AA conectadas a un PCB que se encarga de monitorizar la carga. En este PCB se distinguen dos sistemas para monitorizar la carga:
El primer sistema utilizaría un sensor de temperatura que podría ser utilizado por un cargador externo casero (como
este por ejemplo). Este sistema es ignorado por completo por el mando de la XBOX360 dado que ni si quiera esta conectado físicamente al mando. Sospecho que alguno de los kit de carga rápida no oficiales utilizarán este sistema por la facilidad que presenta utilizar este sistema y por tanto serian casi totalmente inmunes a fallos, dado que simplemente cargan hasta que la batería se ponga caliente.
El segundo sistema es algo mas complejo e involucra a una memoria EEPROM I2C 2404. En el caso de mis baterías el numero de referencia de la memoria es el ATMLH810 aunque en otro foro he visto que la referencia cambia (concretamente Atmel 24C04N) en cualquier caso la información debería ser legible por cualquier programador capaz de leer memorias EEPROM I2C 2404. Por supuesto como ya sospechareis este sistema complejo y por tanto sujeto a fallos es el que usa el mando de la XBOX360. Concretamente según he podido leer en otros foro lo que pasa es que la información contenida en la EEPROM se corrompe y provoca que el mando no haga bien el ciclo de carga.
Por otra parte el cable oficial tiene algo de circuitería para controlar la carga y el cambio de luz. Mayormente se basa en el lm393 y un par de transistores. Una señal proveniente del mando (PIN4) activa o desactiva la carga. Aunque absurdamente compleja esta circuitería debería funcionar bien y es totalmente independiente de la EEPROM. Lo único que hace es cargar o no en función de lo que diga el mando. Algunos cables Carga y Juega no oficiales cargan la batería ignorando lo que diga el mando por lo que serian inmunes a fallos en las mediciones del mando. Una posible solución seria tunear este cable para que cargara pasando de lo que diga el mando. Como no veo muy claro como parar la carga de forma simple para no estropear la batería, de momento he descartado esta opción.
Ha estas alturas tenía claro que el problema esta en la dichosa EEPROM por eso me fabriqué un programador ultra simple y barato para leerla. Las instrucciones para fabricarlos las tenéis
aquí, se usaba para leer las EEPROM de la XBOX1 pero sirve también para leer la EEPROM del mando.
Segun la información del otro foro la EEPROM seguiría la siguiente estructura:
0x00-0x0D: Numero de serie de la batería codificado en ASCII (seguido de 0xFFs).
0x20-0x3F: Cadena "XBOX Battery Pack" (seguido de 0xFFs).
0x80-0x80: Marca de la baterias AA (seguido de 0xFFs) (En el foro era el volcado ponía "HR-3U-2100" en el mio pone "GP210AAHC").
0x90-0x96: Campo interesante los dos primeros bytes son iguales a los dos siguientes el resto esta puesto a FF. Quizás defina una característica de la batería.
0x97: 8-bit Checksum Ca2 del área 0x90-0x93. Podéis usar www.planetimming.com/checksum8.html para comprobarlo.
0x99-0x9E: Probablemente relleno sin valor (vale todo FF).
0x9F: Este byte esta a:
0xFF cuando la batería nunca se ha cargado.
0x01 cuando la batería se carga por primera vez.
0x00 En mi volcado. Me imagino que es una forma de decir que esta mal.
0xA0-0xA6: Datos que se desconoce que hacen.
0xA7: 8-bit Checksum Ca2 del área 0xA0-0xA6. Podéis usar www.planetimming.com/checksum8.html para comprobarlo.
0xA8-0xAE: Datos que se desconoce que hacen. Pero igual al area 0xA0-0xA6 ¿sera un campo redundante?
0xAF: 8-bit Checksum Ca2 del área 0xA8-0xAE. Podéis usar www.planetimming.com/checksum8.html para comprobarlo.
La solución que proponen en el otro foro es leer una EEPROM en buen estado y copiarla en la batería que este estropeada, el problema es que si quisiésemos comprar una batería nueva en buen estado no nos plantearíamos reparar la vieja no? o si?
y el intercambio publico de binarios es algo peliagudo (aunque sea una chorrada como esta). Por todo esto me he propuesto desarrollar una aplicación ultra simple que sea capaz de leer nuestra EEPROM repararla y escribirla y claro esta sin necesidad de un volcado de una EEPROM en buen estado (me imagino que un parcheador no sera ilegal).
Para realizar este proyecto necesito información sobre las áreas desconocidas, así que agradeceré vuestras sugerencias. No he querido copiar las imágenes de la fuente por lo que hasta que pueda hacer mis propias imágenes por favor ir a la fuente.
Fuentes:
http://forums.xbox-scene.com/index.php?showtopic=555361Agradecimientos a RDC de quien de sus investigaciones he obtenido todo mi conocimiento sobre este tema.
Actualización:Después de toquetear por aquí y por allá he descubierto el pin que se encarga de detectar el nivel de carga dentro del mando. He sustituido la resistencia por una resistencia de igual valor puesta en serie con un potenciómetro de 0-100k y variando este consigo engañar aumentar o disminuir el nivel de la batería de forma ficticia. Esto hace que la carga se inicie o no. Creo que con esto he solucionado el problema de los malditos carga y juega ahora tengo que esperar a que uno se me descargue para tratar de calibrar la resistencia y repetir el proceso hasta obtener un valor del potenciómetro promedio que pueda poner en un tutorial.
Por otra parte creo que ha exepción del campo "0x20-0x3F" que tiene que contener la cadena "XBOX Battery Pack" (seguido de 0xFFs) para que el mando la reconozca, el resto de campos solo sirven para obtener información sobre la batería pero no aporta nada al proceso de carga (O al menos eso me ha parecido después de modificar el HEX de varias formas). Esto ademas cuadraría con el echo de que conectando y desconectando muchas veces y de mas triquiñuelas que he ido leyendo se consiga que el mando comience a cargar. Si fuera algo que esta escrito en una EEPROM no creo que se pudiera "engañar" por mucho que nos empeñáramos sin embargo un nivel de corriente o voltaje puede que sea un poco mas bajo o un poco mas alto de una conexión a otra suficiente para que comience la carga.
Si alguien me quiere ayudar podría hacerlo midiendo el valor de la resistencia en algún controlador que tenga menos de dos años. Si hay algún interesado que me lo diga y así hago fotos de la resistencia que hay que medir.Actualizacion 2:Pinout del cable carga y juega mirando el cable de frente de izquierda a derecha:
1- GND
2- 4,7V Este pin esta unido al de 1 de una forma algo creativa. Tanto durante el proceso de carga como cuando para el proceso de carga su valor es el mismo.
3- Suministra la tensión para cargar la batería.
4- Este pin esta conectado al IC principal del mando valor alto durante la carga, bajo cuando para la carga.
5- USB D+
6- USB D-
7- USB 5V
Actualizacion 3:Al final veo que solo se va a poder solucionar de forma parcial porque el valor que se necesita para que inicie la carga el kit carga y juega cuando esta descargado hace que el nivel cuando esta cargado a tope no llegue a rellenar las cuatro rayas por lo que la carga nunca parará. El valor que he calculado es de unos 21.5k.
La única solución que se me ocurre es la de utilizar el sensor de temperatura (que a fin de cuentas es una resistencia que disminuye el valor con la temperatura) para parar la carga. La idea funcionaria de la siguiente forma
1º La batería inicia la carga la temperatura de las pilas deberia estar a temperatura ambiente. La resistencia del sensor esta en torno a 7,5K.
2º La batería alcanzaría su carga máxima.
3º Cuando la batería alcanza su carga máxima empieza a transformar la energía en calor. Las mediciones que hice daban 5.8K cuando la bateria estaba siendo cargada una vez terminada la carga.
4º Como el valor de la resistencia del sensor a bajado por debajo del limite para continuar la carga la carga finaliza.
Este sistema permitiría además cargar baterías de mayor capacidad hasta su carga máxima porque todas las baterías aumentan su temperatura cuando ya están cargadas (y no antes). Actualmente aunque se tenga un mando cargue bien, sospecho que como las baterías originales son de 2100mah por mucho que se pongan baterías de 4000mah la carga que recibirá seguirá siendo la misma.
Existen detalles a tener en cuenta con esta solución:
El primero es que cuando la batería se enfrié si apagas y enciendes el mando con el C&J o si desconectas y vuelves a conectar el C&J, el mando intentara cargar la batería otra vez. Realmente esto no es demasiado importante porque si la batería se había descargado un poco la volverá a cargar y parara y si no parara también en ambos casos tardara un poco hasta que la batería alcance la temperatura de desconexión. En el caso de que el mando este encendido y tu le dejes el C&J conectado no es problemático porque el mando solo vuelve a iniciar la carga después de que el C&J se apagie y vuelva a encenderse.
El segundo detalle es que el gráfico de la batería que muestra la consola no dara una informacion demasiado valida. A mi personalmente no me importa porque Mientras el C&J muestra una luz verde cuando este cargada la batería y el mando se apague cuando este descargada la batería no me hará falta tener mas indicaciones.
Actualización 4:Después de hacer varias pruebas he podido comprobar que si aumento la resistencia la carga se inicia siempre pero nunca llega a parar automáticamente (ni siquiera usando la resistencia térmica). La única solución que me queda es probar a regular la corriente con algún transistor pero para eso necesitaré tiempo para informarme en algún foro de electrónica.