[GUÍA] Construir USB compatible con PsGrooPIC (15/11/2010)

1, 2, 3, 4
Ultima versión (15/11/2010) :
PsGrooPIC_C0C1-wBTL-Hermesv4b-PSN-350SPF
Sources (TSC)
Hex


Índice

  • 1. Introducción
  • 2. Construcción del dispositivo
  • 3. Programación del PIC la primera vez
    • 3.1 Modificar el bootloader
    • 3.2 Programando con WinPIC800
  • 4. Programación y actualización del dispositivo
    • 4.1 Modificar el PsGrooPIC
  • 5. Uso
  • 6. Solución de Problemas
  • Anexos
    • Anexo A: Versiones del PsGrooPIC
    • Anexo B: Portando el código a otros microchips (18F4550)


1. Introducción

A lo largo de esta guía vamos a tratar de explicar cómo se realiza exactamente un dispositivo USB que podremos utilizar después para grabar el exploit de ps3 PsGroopic. Nos vamos a basar en un microcontrolador PIC dotado de la lógica necesaria para gestionar un puerto USB.

Este tipo de circuitos son programables, por lo que se puede usar para infinidad de tareas. Para cambiar su finalidad basta con usar unas aplicaciones que quedan encapsuladas en archivos .hex, que podremos copiar y remplazar tantas veces como queramos dentro del dispositivo.

En este caso nos vamos a centrar en su aplicativo como Jailbreak para la PS3.

Además anotaremos como se puede modificar el software del PIC para que realice las funciones tal y como esperamos.

Esperamos que os sea útil.


2. Construcción del dispositivo

Todo el circuito que estamos a punto de montar se basa en un microcontrolador PIC. Un PIC es un chip que contiene las funcionalidades de un ordenador, pero de una forma reducida y limitada. Este tipo de microcontroladores es programable gracias a una memoria interna que posee y consta de una serie de pines (las patillas) para comunicarse con el resto de componentes. El número de patillas de un PIC varía según el modelo, algunas de estas tienen funciones ya pre-asignadas y otras están libres para que el diseñador del circuito use con libertad.

Cada pin que tiene un PIC tiene un nombre, que a su vez define su funcionalidad. Los nombres de los pines se pueden ver buscando en Internet el datasheet del PIC que estamos manejando en cuestión. Si no estás familiarizado con los alias de los pines, es recomendable que busques en google el datasheet del PIC que vayas a utilizar. Por ejemplo, si es el PIC18F2550, deberíamos buscar "PIC18F2550 datasheet", y lo encontraremos rápidamente.

Hay diferentes tipos de microcontroladores PIC en el mercado que podrían servir a nuestra causa, pero los por ahora han sido probados y confirmados como válidos para poder manejar el PsGrooPIC son:

PIC18F2450
PIC18F2550
PIC18F4450
PIC18F4550

La serie 18F2xxx consta de 28 pines, mientras que la 18F4xxx consta de 40. Esto no es un problema ya que para la finalidad que queremos darle al chip, en ambas series tenemos los pines necesarios, cambiando solo la posición.

El esquema en sí, está basado en el expuesto por MetalPhreak en los foros de psx-scene (http://psx-scene.com/forums/showthread.php?t=65863):
(para 18f2550 y para 18f4550)
ImagenImagen


Indicar que cuando una línea see cruza con otra, solo implica que hay conexión si existe un cuadrado rojo en la intersección.

La distribución de los componentes dentro de nuestro ensamblado no es importante, lo importante es que se hagan las conexiones que se marcan. Como nota, me gustaría añadir que el PIN RB5, debería ir a tierra cuando usamos para programarlo un ART2003 (LVP enabled).

Los componentes que se usan son:

Imagen

  • Zócalo de 28 pines (o 40 depende del caso)
  • C1 y C2: dos condensadores de 22pf (o un poco más)
  • C3 y C4: condensadores de 100 nf (pueden llegar a ser de hasta 470 nf)
  • Q1: cristal de 20 Mhz  (puede ser de 8Mhz, 12, 16 ó 24)
  • R1 y R2: resistencias de 330 omnios (o 220 para tener más iluminación)
  • R3 y R4: resistencias de 10 k
  • LEDR y LEDG: un led rojo y otro verde de 0.5mm
  • USB: una clavija de USB macho.
  • Un jumper y pines para jumper
  • Estaño
  • Cable
  • Soldador
  • Placa perforada

Personalmente lo he montado en una placa perforada con las pistas premarcadas, y es una solución que os recomiendo. La distribución que he utilizado ha sido más o menos esta:

Imagen


Los leds están cambiados en este último esquema. Solo recordar que tiene que apuntar el polo positivo (ánodo) a la resistencia y el negativo (cátodo a tierra). En la mayoría de los leds la patilla más larga es el ánodo, y si miras en su interior, hay como dos partes, la positiva es la parte más pequeña.

El conector USB da igual si es macho o hembra, el tipo, si se puede soldar a la placa o está en el aire, lo importante es tener bien los puntos y que se pueda conectar a la PS3. Si no usamos un macho tipo A, necesitaremos un cable que lo transforme en esto. Por ejemplo, si compramos una hembra tipo B necesitaremos un cable USB de macho Tipo A a macho tipo B. Por lo que recomiendo usar directamente un macho tipo A que se pueda soldar en la placa, para conectar el dispositivo directamente.

Dentro del USB, comúnmente tendremos este código de colores: el primer punto (cuadrado en lugar de circulo en los esquemas) es el cable rojo (VCC), el segundo el blanco (D-), el tercer punto el verde (D+) y el cuarto el cable negro que es tierra.

Las líneas azules son pequeños puentes realizados con cable. Uno por necesidad y el resto para poder customizar fácilmente el chip y que sea adaptable a otros bootloaders y demás configuraciones de los leds.

Para que os hagáis a la idea, el resultado final de mi placa es el siguiente (teniendo en cuenta que he modificado un poco la distribución de los componentes):

ImagenImagen


En este esquema, el Jumper está ahora en la parte inferior y al haberlo programado con un ART2003, el PIN 26 está unido con tierra. Los leds están en los pines 11 (RC0) y 12 (RC1). Esto no es importante, porque más adelante veremos cómo recompilar todo para que utilice estas posiciones de Leds. Si te estás preguntando donde está el cristal de cuarzo, se encuentra justo debajo del PIC, en la misma posición de los esquemas de más arriba. Además se puede observar que en el jumper, en lugar de poner solo dos varillas, hay 3. Una de ellas no está conectada a nada, pero ayuda a no perder el jumper cuando se deje en modo de ejecución.

Una vez tengamos nuestro chip montado podemos pasar a programarlo…


3. Programación del PIC la primera vez

La primera vez que programemos el PIC vamos a utilizar un programador ART2003. Si buscáis por internet, encontrareis muchísimos diseños del mismo. Así que en esta parte no me voy a detener. Simplemente que sepáis que se puede utilizar un T20 y cualquier otro dispositivo semejante.

Lo que vamos a intentar hacer en este punto es cargar dentro del pic un programa llamado bootloader. Este bootloader se instala al principio de la memoria del microprocesador y mediante una pequeña señal, nos dejará instalar programas a continuación del mismo.

El bootloader arranca y si tiene un pin concreto activado entonces te deja programar lo que viene a continuación. Y si no, simplemente arranca el programa que se graba a partir de una posición de memoria determinada.

Algo importante a tener en cuenta es que cada bootloader tiene diferentes direcciones de memoria para asignar el programa de ejecución y a su vez diferentes pines para marcar el estado de programación.

Nosotros utilizaremos el USB HID C18 modificado, que almacena el programa .Hex a partir de la posición 0x1000 (luego tendrá importancia este valor), que usa los Leds en los pines rc0 y rc1; y el pin rb7 para marcar el estado de programación. Tal y como hemos realizado nuestra placa, este es el bootloader ideal, pero podríamos modificarlo para nuestras necesidades.

BootloaderUSBHIDC18_18F2550Trainer_V1.0 - Customized by nullex.hex.zip (4.69 KB)

BootloaderUSBHIDC18_18F2550Trainer_V1.0 - Customized by nullex. Hex

BootloaderUSBHIDC18_18F2550Trainer_V1.0 - Customized by nullex.zip (129.83 KB)

BootloaderUSBHIDC18_18F2550Trainer_V1.0 - Customized by nullex. Source code


3.1 Modificar el bootloader

Si queremos modificar el bootloader para nuestra placa, lo primero que tenemos que hacer es ir a la página de MPLab y descargarnos el IDE (http://www.microchip.com/stellent/idcpl ... t=SW007002) y el compilador para PIC18.

Después necesitaremos el código fuente del Bootloader, y usaremos el “BootloaderUSBHIDC18_18F2550Trainer_V1.0” que se puede encontrar en la página de PsGrooPIC (http://psgroopic.blogspot.com).

Una vez tenemos todo instalado en nuestra máquina, nos dirigimos a la carpeta de código fuente del bootloader y abrimos el proyecto con el MPLab IDE.

Imagen


Dentro de la ventana de workspace seleccionamos primero el archivo io_config.h. Este archivo está dividido en varias secciones que se pueden identificar gracias a los pragmas de compilación:
#if defined(MiE_PIC18F14K50Trainer)
...
#elif defined(MiE_PIC18F255xTrainer))
...
#elif defined(MiE_PIC18F455xTrainer)
...
#else
    #error Not a supported board (yet), add I/O pin mapping in __FILE__, line __LINE__
#endif


Como en este caso estamos programando para un PIC18F2550, nos tendremos que mover hasta la sección de “#elif defined(MiE_PIC18F255xTrainer)”.

Si por el contrario, vamos a usar otro PIC diferente al 2550, recomendaríamos leer ahora el Anexo B, para después seguir con los pasos que indicamos a continuación.


Dentro de esta sección debemos buscar la declaración de los LEDs, que debería ser algo así:
/** L E D ***********************************************************/
#define mInitAllLEDs()      LATB &= 0xCF; TRISB &= 0xCF;

#define mLED_1 LATBbits.LATB5 //Red
#define mLED_2 LATBbits.LATB4 //Green


Aquí simplemente hay que cambiar los valores por los pines que usamos nosotros (RC0 y RC1):
/** L E D ***********************************************************/
#define mInitAllLEDs()      LATC &= 0xCF; TRISC &= 0xCF;

#define mLED_1 LATCbits.LATC0 //Red
#define mLED_2 LATCbits.LATC1 //Green


Y justo encima de estas líneas añadimos una definición para nuestro Pin con jumper, en este caso el RB7:
/** JMP *************************************************************/
#define TRISJMPPIN   TRISBbits.TRISB7
#define JMPPIN            PORTBbits.RB7 //28 jumper


También puede resultar interesante comentar la líneas que hacen mención al switch para que no haya ningún problema con el C0, pero esto es opcional:
/** S W I T C H *****************************************************/
//#define mInitAllSwitches()  TRISCbits.TRISC0=1;
//#define mInitSwitch()       TRISCbits.TRISC0=1;
//#define sw                  PORTCbits.RC0
/********************************************************************/


Guardamos y cerramos este archivo, para a continuación abrir el “main.c”. Dentro de este archivo nos movemos hasta que el código sea algo parecido a esto:
void main(void)
{
if(RCONbits.POR == 1)
{
RCONbits.POR = 0;
}
else /*This example uses the sw I/O pin to determine if the device should enter the bootloader, or the main application code*/
{
RCONbits.POR = 1;
_asm
goto 0x1000 /*If the user is not trying to enter the bootloader, go straight to the main application remapped "reset" vector.*/
_endasm
}


Y lo sustituimos por este otro código:
void main(void)
{
ADCON1 = 0xF;
if(JMPPIN == 1)
{
ADCON1 = 0x7;
_asm
goto 0x1000
_endasm
}


Grabamos las modificaciones, compilamos y ya tenemos modificado nuestro bootloader para que funcione correctamente en nuestra placa.

3.2 Programando con WinPIC800

Para poder programar correctamente el bootloader en el pic usaremos un programa llamado WinPIC800, que podéis descargar aquí (http://www.winpic800.com/).

En la pantalla principal configuraremos el tipo de PIC que estamos usando:

Imagen

Acto seguido, en el menú configuración > hardware, tendremos que elegir el ART2003:

Imagen

Y ahora ya podemos abrir nuestro archivo .hex con el bootloader. Entonces hacemos clic en la pantalla de configuración y nos fijamos que el cristal tenga la frecuencia que utilizamos y que tenemos activado el LVP:

Imagen

Ahora ya podemos lanzar el programar todo y después el verificar.

Si todas las tareas se han completado con éxito, ahora ya podemos colocar nuestro PIC en la placa y prescindir de otros programadores como el WinPIC y el ART2003. Nuestro dispositivo ya es programable y actualizable.


4. Programación y actualización del dispositivo

Para poder tanto programar como actualizar el PsGrooPIC, simplemente pondremos el Jumper en posición de programación y lo conectamos al ordenador. Windows detectará el dispositivo como una interfaz HID USB.

Ahora descargamos el “Microchip Bootloader USB HID v2.6a”de la página del PsGrooPIC (http://psgroopic.blogspot.com/) y lo ejecutamos:

Imagen

El programa nos detectará nuestro dispositivo. Ahora hacemos clic en “Open Hex File” y seleccionamos nuestro archivo .hex con el psgroove, preparado para nuestro bootloader. Y después hacemos clic en “Program/Verify”. En unos pocos segundos nuestro PsGrooPIC estará correctamente programado.

Como nota añadir que es posible que se quede colgado durante el proceso de verificación (hay que tener en cuenta que este proceso es más bastante más largo que el de grabación y borrado). Esto no es importante siempre y cuando diga que se ha programado correctamente.

psgroopic1.7a.nullex.source.zip (77.28 KB)

PsGrooPIC 1.7a - customized by nullex (source and hex)


4.1 Modificar el PsGrooPIC

Si quieres saber cómo modificar un PsGrooPIC para cambiar los pines de los leds o activar el sector de arranque (aquello de la dirección de memoria 0x1000 del bootloader), necesitarás comprar el CCS PIC en su página oficial (http://www.ccsinfo.com/).

Después deberías descargar el código fuente del exploit desde la página del PsGrooPIC (http://psgroopic.blogspot.com/) y abrir el archivo “main.c” como un proyecto nuevo del CCS.

Nada más abrir el archivo “main.c” encontraremos estas líneas:

#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,USBDIV,PLL2,CPUDIV1,VREGEN,PUT,MCLR
#use delay(clock=48000000)

#use rs232(baud=115200, xmit=pin_c6, rcv=pin_c7)

#define LEDR PIN_B4

/////////////////////////
// Bootloader Memory Space
// Microchip USB HID Bootloader
#define CODE_START 0x1000
#build(reset=CODE_START, interrupt=CODE_START+0x08)
#org 0, CODE_START-1 {}
/////////////////////////


Aquí encontramos todo lo necesario para reconfigurarlo:
  • Cambiar el valor del cristal: En la primera línea vemos el valor “PLL2”, esto significa que el cristal tiene 2x4 Mhz. Es decir, 8Mhz. Si hemos montado un cristal de 20, el PLL debería ser 5 (5x4 = 20 Mhz), por lo que sustituiríamos PLL2 por PLL5.
    #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,USBDIV,PLL5,CPUDIV1,VREGEN,PUT,MCLR
  • Para nuesto bootloader es importante la dirección de memoria del comienzo del código (detrás del bootloader), como dijimos algo más arriba, este utiliza la posición 0x1000, por lo que debemos estar seguros de que esta línea existe con este valor:
    #define CODE_START   0x1000
  • El led queda definido en LEDR, y en este caso en el RB4 no tenemos ningún led, pero tenemos dos en el RC0 y RC1, por lo que añadimos una nueva línea (LEDG) y modificamos otra(LEDR):
    #define LEDR PIN_C0 // Red
    #define LEDG PIN_C1 // Green

    Y buscamos a lo largo de todo el archivo, donde aparezca:
    output_bit(LEDR,un_valor_cualquiera);

    Cambiandolo por:
    • si “un_valor_cualquiera” es led1, esto:
      output_bit(LEDR,!led1);
      output_bit(LEDG,led1);
    • si en lugar de led1 pone un 1:
      output_bit(LEDR,0);
      output_bit(LEDG,1);
    • si en lugar de 1 pone un 0:
      output_bit(LEDR,1);
      output_bit(LEDG,0);

Una vez hemos realizado nuestras modificaciones, compilamos y ya tenemos nuestro archivo .hex, listo para ser actualizado en nuestro dispositivo mediante el Microchip Bootloader USB HID.


5. Uso

Ya tenemos nuestro PsGrooPIC reprogramable listo, ahora deberíamos cambiar la posición del Jumper a modo funcionamiento (Modo “PS3” que digo yo) e introducirlo en uno de los puertos USB de nuestra consola.

Actualmente, el PsGrooPIC solo funciona (y exclusivamente) con el Firmware 3.41 de PS3.

Apagamos la PS3 desde el botón trasero, o desenchufándola de la red eléctrica. Esperamos unos segundos y la volvemos a conectar. Entonces se encenderá el piloto de “stand by”. Ahora rápidamente pulsamos el botón de “power” y justo después el de “eject” del blu-ray.

Observamos nuestro dispositivo y si después de que se enciendan varias veces las luces, la que queda encendida es la verde, significa que ha funcionado. Si no, repetir los pasos hasta que si que funcione.


6. Solución de Problemas

Si hemos realizado todos los pasos que se comentan en este documento y aún así no funciona nuestro dispositivo, lo primero que recomendamos es revisar todas las soldaduras. Hay que ser muy cuidadoso y que no se junten unas con otras (si no es nuestra intención). Comprobar que cada punto va donde se espera y remarcar los bordes con el soldador para dejar bien separados los puntos.

Si sigue fallando, el siguiente paso será comprobar que no nos estamos confundiendo de frecuencia del cristal. Si insertamos un .hex (ya sea el bootloader o el psgroopic) que no está preparado para la frecuencia de nuestro cristal, este simplemente no funcionará. Por lo que comprobar en el paso 3.2, que efectivamente se está insertando en el WinPIC800 el valor correcto de frecuencia y en el paso 4.1 que el valor PLL es realmente el que corresponde.

Incluso si después de comprobar todo (ves que tienes el firmware 3.41 en la ps3), te sigue sin funcionar; siempre está este hilo para poder preguntar. Eso si, nos gustaría pedirte que la forma de consultar fuera lo más clara posible, danos los detalles de cómo realizas los pasos, que frecuencia de cristal tienes, que circuito has hecho, ...


Anexos

Anexo A: Versiones del PsGrooPIC

El PsGrooPIC es un port realizado por J1M del PsGroove basado en el trabajo de ElSemi para microcontroladores PIC.

Versiones:
  • 1.0 Primera release
  • 1.1 Solucionados los problemas con el emulador BRD
  • 1.2 Corregidos los problemas de los LEDs y añadida compatibilidad con el Microchip USB HID Bootloader
  • 1.3 Añadidos los parches del lv2 (los de la nueva versión del psgroove)
  • 1.4 Led cambiado a posición RB4 (solución a los problemas del LVP)
  • 1.5 Añadido el payload de Hermes


Anexo B: Portando el código a otros microchips (18F4550)

Todo este documento ha sido realizado con un PIC18F2550, pero eso no quiere decir que sea el único PIC que podemos usar. Adicionalmente, para cambiar el chip tendremos que hacer ciertas modificaciones en el código tanto del bootloader como del PSGrooPIC.

Para modificar el Bootloader y adaptarlo a otro chip (como el 18F4550) los pasos a dar serán:

  • Descargar el archivo de linker para el 18f4550 (al final del anexo está la descarga y originalmente está dentro de las librerías de microchip que podéis descargar desde su página web)
  • El el MPLAB IDE, con el código fuente del bootloader abierto tendremos que:
    • Primero ir al menu Configure > Select Device, y dentro de la nueva ventana cambiar el device de 18F2550 por 18F4550
    • En la ventana del Workspace, dentro de la carpeta de "Linker Script" quitamos el archivo "BootModified.18f2550_g.lkr" y añadimos el que acabamos de descargar, el "BootModified.18f4550_g.lkr".
    • Ahora en el archivo de io_cfg.h, deberíamos hacer los cambios que se indican en el punto 3.1, pero esta vez dentro de la sección "#elif defined(MiE_PIC18F455xTrainer)".

Compilamos y tendremos nuestro bootloader preparado para el PIC18F4550.


Y para modificar el PsGrooPIC (creo que si hacéis la prueba, funcionará la misma versión que para el 18F2550), solo tendríamos que cambiar la primera línea del archivo main.c:

En lugar de:
#include <18F2550.h>


Debería poner:
#include <18F4550.h>


Compilamos con el CCS y ya temos nuestro PsGrooPIC preparado para otro chip diferente :)

BootloaderUSBHIDC18_18F4550Trainer_V1.0 - customized by nullex.hex.zip
BootModified.18f4550_g.lkr.zip
Muchas Gracias por la guia, nada mas tenga un hueco lo monto.

Saludos y nuevamente gracias por compartir tu tiempo.
Todo perfectamente explicado, página metida en favoritos.

Gracias [oki]
Excelente Tutorial, mejor explicado no puede estar, gracias por tus esfuerzos y compartir tus conocimientos en esta gran comunidad.

Saludos.....
Pregunta: En el customizado que acabas de poner, lo he abierto con el mplab ide y no estan cambiados los valores de los leds en rc0 y rc1 ni lo del jumper. ¿tenemos que cambiarlo a capón? tal y como está explicado parece que esta adaptado ya y preparado para grabar.
Estoy haciendo tu modelo y me gustaria aclarar esto antes de pifiarla.
Saludos
etxetxe escribió:Pregunta: En el customizado que acabas de poner, lo he abierto con el mplab ide y no estan cambiados los valores de los leds en rc0 y rc1 ni lo del jumper. ¿tenemos que cambiarlo a capón? tal y como está explicado parece que esta adaptado ya y preparado para grabar.
Estoy haciendo tu modelo y me gustaria aclarar esto antes de pifiarla.
Saludos


Y si que está preparado, el código fuente para compilar y el hex para grabar directamente:

Dentro del código fuente adjunto, está modificado para el modelo de PIC 18F2550, dentro de la sección "MiE_PIC18F255xTrainer" del io_cfg.h. Si se usa otro tipo de chip como el 18F4550, habrá que cambiar la sección de "MiE_PIC18F455xTrainer".

Las secciones dentro de este archivo se ven por los pragmas de compilación:
#if defined(MiE_PIC18F14K50Trainer)
...
#elif defined(MiE_PIC18F255xTrainer))
...
#elif defined(MiE_PIC18F455xTrainer)
...
#else
    #error Not a supported board (yet), add I/O pin mapping in __FILE__, line __LINE__
#endif


Dentro del pragma del PIC18F255x si está correcto. Aunque gracias a tu pregunta, he encontrado algo que modificar y añadir a la guía, así que muchas gracias :)

Edit: Ya está añadido, no es nada significativo, pero está bien mencionarlo. Espero no tener que corregir nada más, aunque quizá si que toque añadir algún que otro anexo sobre un tema en concreto...
Estupendo tutorial! Gran trabajo que seguro ayudará a mucha gente.
Muchisimas gracias, me suscribo a este hilo porque explicas muy bien todo y haces mucho mas facil entender el codigo, felicidades!! por otro lado, podrias poner todos los firms que han salido y las diferencias que hay entre ellos, si te parece util y quieres claro. Un saludo
VALL3JO escribió:Muchisimas gracias, me suscribo a este hilo porque explicas muy bien todo y haces mucho mas facil entender el codigo, felicidades!! por otro lado, podrias poner todos los firms que han salido y las diferencias que hay entre ellos, si te parece util y quieres claro. Un saludo


Es buena idea, aunque si buscas en el Wiki, encontrarás ya una página donde los lista y describe todos ;)
wiki/Firmwares_oficiales_de_PlayStation_3
me referia a las distintas versiones del psgroove , para poder comprender "algo" el codigo
VALL3JO escribió:me referia a las distintas versiones del psgroove , para poder comprender "algo" el codigo

Ok! Ya está añadido como anexo A :)

También he añadido algunas especificaciones sobre el USB, el código fuente y algún detalle más que he podido encontrar...
Amigo es posible que me hagas un bootloader para pic 4550 ya que segui tu tutorial trate de hacerlo pero me da error, es para el mismo esquema de tu tutorial
Q buen tutorial, el mejor de toda la red sin excepcion...Saludos y gracias nullEX
tidusmen escribió:Amigo es posible que me hagas un bootloader para pic 4550 ya que segui tu tutorial trate de hacerlo pero me da error, es para el mismo esquema de tu tutorial


Los pasos a seguir para hacer un bootloader para el PIC18F4550 son:

  • Descargar el archivo de linker para el 18f4550 (al final del post está la descarga y originalmente está dentro de las librerías de microchip que podéis descargar desde su página web)
  • El el MPLAB IDE, con el código fuente del bootloader abierto tendremos que:
    • Primero ir al menu Configure > Select Device, y dentro de la nueva ventana cambiar el device de 18F2550 por 18F4550
    • En la ventana del Workspace, dentro de la carpeta de "Linker Script" quitamos el archivo "BootModified.18f2550_g.lkr" y añadimos el que acabamos de descargar, el "BootModified.18f4550_g.lkr".
    • Ahora en el archivo de io_cfg.h, deberíamos hacer los cambios que se indican en el primer post, pero esta vez dentro de la sección "#elif defined(MiE_PIC18F455xTrainer)".

Compilamos y tendremos nuestro bootloader preparado para el PIC18F4550.

BootloaderUSBHIDC18_18F4550Trainer_V1.0 - customized by nullex.hex.zip (4.68 KB)

Archivo .Hex del USB HID C18 Bootloader para 18f4550 - nullex

BootModified.18f4550_g.lkr.zip (862 Bytes)

Linker script del bootloader para 18f4550


PD: voy a añadir un nuevo anexo con esta información :)
Valla currada de wiki. Gracias, menos mal que hay gente komo tu y los que no lo tenian claro ya lo tendran.
hola no es mi intencion molestarte tengo una consulta, yo tengo esta placa de hecho yo hice este tutorial

hilo_tutorial-psgroove-en-olimex-pic-usb-4550-con-pic18f4550_1487605

tengo pocos conocimientos de electronica me base en las indicaciones de un foro y le agrege lo que yo habia realizado para cargar el psgroove el hex que uso solo me funciona con el 1.2, he probado diferentes hex de 18f4550 y ninguno me va.

Con el winpic800 he probado los hex 1.5 como estan y modificar las opciones para dejarlos con el 1.2 que me funciona.

Queria preguntarte si es posible adaptarlo a esta placa.

Gracias y saludos

PD: gracias por la respuesta cuando llegue a la noche a la casa voy a cambiar lo que me enviaste por PM para hacerlo compatible con mi placa, gracias nuevamente por la respuesta
Sonsuke escribió:hola no es mi intencion molestarte tengo una consulta, yo tengo esta placa de hecho yo hice este tutorial

hilo_tutorial-psgroove-en-olimex-pic-usb-4550-con-pic18f4550_1487605

tengo pocos conocimientos de electronica me base en las indicaciones de un foro y le agrege lo que yo habia realizado para cargar el psgroove el hex que uso solo me funciona con el 1.2, he probado diferentes hex de 18f4550 y ninguno me va.

Con el winpic800 he probado los hex 1.5 como estan y modificar las opciones para dejarlos con el 1.2 que me funciona.

Queria preguntarte si es posible adaptarlo a esta placa.

Gracias y saludos

PD: gracias por la respuesta cuando llegue a la noche a la casa voy a cambiar lo que me enviaste por PM para hacerlo compatible con mi placa, gracias nuevamente por la respuesta


Gracias por poner en el hilo la pregunta.

Para poder funcionar con una placa olimex tienes que tener en cuenta que el bootloader que usa no está en la posición 0x1000, está en la 0x800 (creo que he leído por ahí). Así que para poder compilar el PsGroove, necesitarás cambiar dos cosas dentro del main.c:

Tienes esto:
#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,USBDIV,PLL2,CPUDIV1,VREGEN,PUT,MCLR


y tendrás que cambiar el microchip y el PLL a 5 (por tu cristal de 20 Mhz):
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,USBDIV,PLL5,CPUDIV1,VREGEN,PUT,MCLR


Y por otro lado en la sección del bootloader tienes:
/////////////////////////
// Bootloader Memory Space
// Microchip USB HID Bootloader
#define CODE_START   0x1000


Pero el bootloader de tu placa usa la posición 0x800 en lugar de la 0x1000, por lo que habrá que poner:
/////////////////////////
// Bootloader Memory Space
// Microchip USB HID Bootloader
#define CODE_START   0x800


Luego se compila con el CCS y listo para programar tu placa :)
Hola,

Antes de todo, quería agradecer este tutorial por lo bien que está explicado.

He aquí mi dilema.

Programo con el WinPic800 el bootloader modificado. Hecho esto lo enchufo al ordenador y todo bien, me instala los drivers y tal.

Abro la aplicación para colocar el PSGroopic y me dice que se ha programado correctamente, aunque a la hora de verificar se cuelga y los LED's quedan parpadeando, me dice que se ha programado bien.

Quito el jumper y enchufo el aparato en la PS3.

Resultado? No funciona. No se encienden los LED's y la PS3 no muestra las dos carpetas de "Install Packages" ni "APP/HOME".

He usado el circuito del PS3Minus, con un cristal de 8Mhz, modificando las conexiones para que funcione con los archivos de este hilo.

He probado con todo, todo tipo de HEX, etcetera, y no funciona. Parece algo que viene después del bootloader, porque el ordenador me reconoce el dispositivo por USB.

Podría alguien echarme una mano con ésto?

Gracias de antemano y un saludo.

PD: Si pongo con el WinPic800 directamente el Groopic funciona a la perfección, pero visto que esto se actualiza cada dos días, no es plan de ir sacando y poniendo el chip porque al final me lo voy a cargar.
Hola locusls10,

Para que verifique bien la grabación tienes que conectar el dispositivo al ordenador con el jumper. Entonces una vez te lo reconozca el pc y el programa para actualizarlo, quitas el jumper. Sin desenchufar el dispositivo. Entonces programas y la verificación debería completarse con éxito (esto tarda unos segundos, pero algo menos de un minuto).

Si toda esta operación ha sido correcta y encima te funciona si utilizas el código sin bootloader; a mi me suena a que es probable que no hayas metido el hex correspondiente a tu cristal...
Gracias por tu rapidísima respuesta.

Estoy utilizando un cristal de 8MHz, y puedo asegurar que todos los hexes que he usado hasta ahora son diseñados para cristales de 8MHz.

He hecho lo que me has comentado, lo de quitar el puente una vez conectado al ordenador, pero el proceso de verificación sigue colgándose, aunque dice que se ha programado correctamente.

No sé que es lo que puede pasar, si alguien pudiese ayudarme, sería de agradecer, a parte de nullex.

Gracias y un saludo.
En tu diseño del ps3minus modificado, como lo tienes exactamente?

Tienes el pin 26 conectado a tierra?
La resistencia de 10k entre el 1 y el VDD (pin 20) y la otra entre el 28 y VDD?
Tienes también el pin 8 y 19 conectados entre si y a tierra?
Lo tengo como en el minus pero con los LED's cambiados de sitio y el jumper también, y con las conexiones USB arregladas.

Pero no creo que tenga nada que ver con eso porque el primer día ya no me funcionaba.

Saludos.
nullEX escribió:
tidusmen escribió:Amigo es posible que me hagas un bootloader para pic 4550 ya que segui tu tutorial trate de hacerlo pero me da error, es para el mismo esquema de tu tutorial


Los pasos a seguir para hacer un bootloader para el PIC18F4550 son:

  • Descargar el archivo de linker para el 18f4550 (al final del post está la descarga y originalmente está dentro de las librerías de microchip que podéis descargar desde su página web)
  • El el MPLAB IDE, con el código fuente del bootloader abierto tendremos que:
    • Primero ir al menu Configure > Select Device, y dentro de la nueva ventana cambiar el device de 18F2550 por 18F4550
    • En la ventana del Workspace, dentro de la carpeta de "Linker Script" quitamos el archivo "BootModified.18f2550_g.lkr" y añadimos el que acabamos de descargar, el "BootModified.18f4550_g.lkr".
    • Ahora en el archivo de io_cfg.h, deberíamos hacer los cambios que se indican en el primer post, pero esta vez dentro de la sección "#elif defined(MiE_PIC18F455xTrainer)".

Compilamos y tendremos nuestro bootloader preparado para el PIC18F4550.

BootloaderUSBHIDC18_18F4550Trainer_V1.0 - customized by nullex.hex.zip

BootModified.18f4550_g.lkr.zip


PD: voy a añadir un nuevo anexo con esta información :)



Amigo disculpa lo trato de hacer y me sigue dando problemas al compilar!!!
Gracias nullEX por la respuesta (no pude irme al trabajo sin antes probar si funcionaba [qmparto] ), realice el cambio que me comentabas

#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,USBDIV,PLL5,CPUDIV1,VREGEN,PUT,MCLR

/////////////////////////
// Bootloader Memory Space
// Microchip USB HID Bootloader
#define CODE_START   0x800


Tambien comparando con el HEX 1.2 que te mencionaba que era el que me funcionaba, buscando en internet opciones para dejar el HEX compilado igual al que me funciona realice este cambio

#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,USBDIV,PLL5,CPUDIV1,VREGEN,PUT,NOMCLR,ICPRT

/////////////////////////
// Bootloader Memory Space
// Microchip USB HID Bootloader
#define CODE_START   0x800[/quote]


con cualquiera de las 2 configuraciones no me funciona [buuuaaaa]

estoy usando CSS 4.104 crees que por ser una version inferior a la recomendada sea ese el problema o bien que la ubicacion del bootloader no sea 0x800, ya que al usar el PDFSUSB al utilizar el HEX compilado con los cambios este parte en

1542240 2E EF 1E F0 04 6E D8 CF 05 F0 E0 CF 06 F0 00 01


y el que me funciona parte en
000800 B3 EF 1F F0 XX XX XX XX 05 6E D8 CF 06 F0 E0 CF
Hago todos los pasos para hacer el bootloader para pic 4550 y cuando lo compilo me da el siguiente error:

Halting build on first failure as requested.

alguien me puede ayudar?

si alguien puede realizar el bootloader o si lo tiene para pic 4550 con el digrama del inicio del post para 4550
En respuesta a locusls10, en el nuevo compilado se marca como opción el MCLR, lo que implica conectar el pin 1 (MCLR) con una resistencia de 10k al VDD...

Para placas olimex, el tema de Sonsuke, no creo que el compilador de problemas. La verisón que uso del CCS es bastante anterior a la que recomiendan. Quitando que el .hex es unos bytes más grande, todo funciona correctamente.

Sobre el 4550, que comenta tidusmen, ¿Has probado el hex adjunto en la respuesta? Este ya está compilado por mi. Y sobre el error que comentas, no aporta demasiada información esa línea, quizá podrías pegar todo el log cuando compilas.
nullEX escribió:En respuesta a locusls10, en el nuevo compilado se marca como opción el MCLR, lo que implica conectar el pin 1 (MCLR) con una resistencia de 10k al VDD...

Para placas olimex, el tema de Sonsuke, no creo que el compilador de problemas. La verisón que uso del CCS es bastante anterior a la que recomiendan. Quitando que el .hex es unos bytes más grande, todo funciona correctamente.

Sobre el 4550, que comenta tidusmen, ¿Has probado el hex adjunto en la respuesta? Este ya está compilado por mi. Y sobre el error que comentas, no aporta demasiada información esa línea, quizá podrías pegar todo el log cuando compilas.




ya te lo envie en un mp...

tu sibiste el bootloader para pic 4550? donde esta!!!!!!!!!!!!
tidusmen escribió:
nullEX escribió:..

Sobre el 4550, que comenta tidusmen, ¿Has probado el hex adjunto en la respuesta? Este ya está compilado por mi. Y sobre el error que comentas, no aporta demasiada información esa línea, quizá podrías pegar todo el log cuando compilas.


ya te lo envie en un mp...

tu sibiste el bootloader para pic 4550? donde esta!!!!!!!!!!!!


Aquí: http://www.elotrolado.net/download/file.php?id=65205
Hola,

Bueno, parece que he podido avanzar un poco más.

Esto va para Nullex, o para quien pueda ayudarme.

Veréis, el invento sigue sin funcionar, haciendo la combinación del botón trasero, power, eject... El aparato no funciona, los LED's no se encienden, aunque la máquina tarda un poco más de lo normal, como si estuviera cargando el programa del chip, pero no lo hace.

Pero he descubierto que si enchufo el aparato una vez encendida la consola, los LED's indican movimiento, es decir, parpadean como si estuviera cargando el programa, y seguidamente se enciende el LED rojo en vez del verde (obviamente, el programa no se ha cargado).

Esto me hace pensar que está todo bien programado en el chip, pero hay algo que sigue fallando.

Alguien que pueda echarme una mano?

Gracias de antemano y saludos.
locusls10 escribió:Hola,

Bueno, parece que he podido avanzar un poco más.

Esto va para Nullex, o para quien pueda ayudarme.

Veréis, el invento sigue sin funcionar, haciendo la combinación del botón trasero, power, eject... El aparato no funciona, los LED's no se encienden, aunque la máquina tarda un poco más de lo normal, como si estuviera cargando el programa del chip, pero no lo hace.

Pero he descubierto que si enchufo el aparato una vez encendida la consola, los LED's indican movimiento, es decir, parpadean como si estuviera cargando el programa, y seguidamente se enciende el LED rojo en vez del verde (obviamente, el programa no se ha cargado).

Esto me hace pensar que está todo bien programado en el chip, pero hay algo que sigue fallando.

Alguien que pueda echarme una mano?

Gracias de antemano y saludos.


Has probado a dejar la consola como 20 seg. apagada totalmente?
Después tienes que presionar el power y acto seguido el eject, entonces la consola hará unos pitidos. A los 3 seg. o así empezarán a bailar las luces...
Tengo que presionar primero el power, y luego el reset? No era el eject? Qué es el reset, el botón de power otra vez?
locusls10 escribió:Tengo que presionar primero el power, y luego el reset? No era el eject? Qué es el reset, el botón de power otra vez?


Estoy espeso jejeje

Primero el power y luego el eject si :)
No se que hago mal, compilo con el CSS 4.10, he cogido el SRC y el HEX del blog de J1M, en teoria cogiendo los source y compilando me tendría que dar un hex practicamente identico al 99% con el HEX, pero no es así. ¿No se trata solo de darle al botón de compilar?
Puff,

Esto sigue sin funcionar... Ya no sé qué hacer...

Hay que hacer alguna modificación especial en algun HEX, o algo, para que esto funcione?

Siempre puedo tirar atrás y meterle directamente el programa sin bootloader. Pero con tanta actualización me voy a cargar el chip.

Gracias y un saludo.
dgtor escribió:No se que hago mal, compilo con el CSS 4.10, he cogido el SRC y el HEX del blog de J1M, en teoria cogiendo los source y compilando me tendría que dar un hex practicamente identico al 99% con el HEX, pero no es así. ¿No se trata solo de darle al botón de compilar?


El compilador del CSS trae mejoras en cada versión, y esto hace que si no compilas exactamente con lo mismo que J1M, el resultado sea sensiblemente diferente...

La pregunta es si funciona o no
nullEX escribió:
tidusmen escribió:
nullEX escribió:..

Sobre el 4550, que comenta tidusmen, ¿Has probado el hex adjunto en la respuesta? Este ya está compilado por mi. Y sobre el error que comentas, no aporta demasiada información esa línea, quizá podrías pegar todo el log cuando compilas.


ya te lo envie en un mp...

tu sibiste el bootloader para pic 4550? donde esta!!!!!!!!!!!!


Aquí: http://www.elotrolado.net/download/file.php?id=65205




ok null, ya lo coloque pero el pc me dice que no reconoce el dispositivo y no encuentro el Microchip Bootloader USB HID v2.6a, ya que en el blog hay es Microchip Bootloader USB HID v2.6b
tidusmen escribió:ok null, ya lo coloque pero el pc me dice que no reconoce el dispositivo y no encuentro el Microchip Bootloader USB HID v2.6a, ya que en el blog hay es Microchip Bootloader USB HID v2.6b



Supongo que habrás colocado el jumper. Sobre la versión de la página del psgroopic no creo que sea importante, si es mayor, quizá han solucionado algunos problemas :)

La verdad que el 4550 no lo he montado, pero la teoría me dice que debería funcionar bien con esto... Has comprobado que los puntos estén bien conectados y todo eso?
nullEX escribió:
tidusmen escribió:ok null, ya lo coloque pero el pc me dice que no reconoce el dispositivo y no encuentro el Microchip Bootloader USB HID v2.6a, ya que en el blog hay es Microchip Bootloader USB HID v2.6b



Supongo que habrás colocado el jumper. Sobre la versión de la página del psgroopic no creo que sea importante, si es mayor, quizá han solucionado algunos problemas :)

La verdad que el 4550 no lo he montado, pero la teoría me dice que debería funcionar bien con esto... Has comprobado que los puntos estén bien conectados y todo eso?



si los probe de arriba, abajo, coloque el jumper, use tu booloader pero lo configure asi:

http://img580.imageshack.us/img580/7132/295sbdl.jpg


+ la opocion de lvp



otra cosa use fue condesadores de 220 (dos) y los otros dos si los use de 22
nullEX escribió:
dgtor escribió:No se que hago mal, compilo con el CSS 4.10, he cogido el SRC y el HEX del blog de J1M, en teoria cogiendo los source y compilando me tendría que dar un hex practicamente identico al 99% con el HEX, pero no es así. ¿No se trata solo de darle al botón de compilar?


El compilador del CSS trae mejoras en cada versión, y esto hace que si no compilas exactamente con lo mismo que J1M, el resultado sea sensiblemente diferente...

La pregunta es si funciona o no


No funciona... y en teoria es tan simple como cargar el main.c y darle a compilar...
dgtor escribió:
nullEX escribió:
dgtor escribió:No se que hago mal, compilo con el CSS 4.10, he cogido el SRC y el HEX del blog de J1M, en teoria cogiendo los source y compilando me tendría que dar un hex practicamente identico al 99% con el HEX, pero no es así. ¿No se trata solo de darle al botón de compilar?


El compilador del CSS trae mejoras en cada versión, y esto hace que si no compilas exactamente con lo mismo que J1M, el resultado sea sensiblemente diferente...

La pregunta es si funciona o no


No funciona... y en teoria es tan simple como cargar el main.c y darle a compilar...


Y después de compilar tendrás un archivo main.hex que es el que contiene el psgroove, ¿es así?



Para tidusmen he estad revisando el esquema del 4550 y están los leds mal colocados. Puedes compararlo con el del 2550. En lugar de ir al 19 y 20 deberían ir a los pines 15 y 16...
ok voy a revisar y te aviso, gracias
Buenas nullEX, ¿modo programación sería con el jumper haciendo corto o sin poner?, lo he buscado en la guía pero no lo he encontrado.
Ealdor escribió:Buenas nullEX, ¿modo programación sería con el jumper haciendo corto o sin poner?, lo he buscado en la guía pero no lo he encontrado.


El modo programación es haciendo puente entre el 28 y la tierra, el modo ps3 sin jumper.
El compilador del CSS trae mejoras en cada versión, y esto hace que si no compilas exactamente con lo mismo que J1M, el resultado sea sensiblemente diferente...

La pregunta es si funciona o no[/quote]

No funciona... y en teoria es tan simple como cargar el main.c y darle a compilar...[/quote]

Y después de compilar tendrás un archivo main.hex que es el que contiene el psgroove, ¿es así?



Para tidusmen he estad revisando el esquema del 4550 y están los leds mal colocados. Puedes compararlo con el del 2550. En lugar de ir al 19 y 20 deberían ir a los pines 15 y 16...[/quote]



Nada Null ya cambie los led y nada, el orden del usb que colocas es este:

1 VCC ( Rojo) +5V (EL voltaje positivo de 5 Voltios)
2 D− (Blanco) Data − (transmisión de datos ambas direciones)
3 D+ (Verde) Data + (transmisión de datos ambas direciones)
4 GND (Negro) Tierra (tierra o negativo)
Bienas Nullex. yo he seguido tu guia he modificado todo para el 18f2550 y para el 18f4550, tanto para uno como para el otro y en los dos solo he cargado el bootloader, cual es mi sorpresa que en ninguno de los dos micros funciona el bootloader, lo he probado cambiando las patillas D+ y D- de las 2 maneras posibles, el VCC y GND van perfectos, se me enciende el led verde solo si tengo el jumper puesto, y sino lo tengo no hace nada ya que aun no he cargado el psgroove, he cambiado el cristal de 8Mhz que utilizo, el condensador que se conecta al VUSB, el conector USB de una hembra con un adaptador que tenia a un macho directamente, el caso esque también le he puesto un conector ICSP para que sea mas rapido programarlo, y me lo programa perfecto tanto uno como otro, pero no hay manera que el PC me detecte el PIC con el bootloader, cuando le enxufo el 2550 no hace nada ni detecta nada solo da corriente y se enciende el led, y cuando conecto el 4550 si que hace algo, pero en el PC me pone que el dispositivo no se puede identificar, he probado en windows 7 y en windows XP, y aun asi nada. Haber si algun alma caritativa puede ayudarme en mi problema, ya que llevo 3 semanas intentando montar la placa y no funciona de ninguna manera, ni con bootloader ni sin bootloader. Gracias de antemano.
nesi_tor escribió:Bienas Nullex. yo he seguido tu guia he modificado todo para el 18f2550 y para el 18f4550, tanto para uno como para el otro y en los dos solo he cargado el bootloader, cual es mi sorpresa que en ninguno de los dos micros funciona el bootloader, lo he probado cambiando las patillas D+ y D- de las 2 maneras posibles, el VCC y GND van perfectos, se me enciende el led verde solo si tengo el jumper puesto, y sino lo tengo no hace nada ya que aun no he cargado el psgroove, he cambiado el cristal de 8Mhz que utilizo, el condensador que se conecta al VUSB, el conector USB de una hembra con un adaptador que tenia a un macho directamente, el caso esque también le he puesto un conector ICSP para que sea mas rapido programarlo, y me lo programa perfecto tanto uno como otro, pero no hay manera que el PC me detecte el PIC con el bootloader, cuando le enxufo el 2550 no hace nada ni detecta nada solo da corriente y se enciende el led, y cuando conecto el 4550 si que hace algo, pero en el PC me pone que el dispositivo no se puede identificar, he probado en windows 7 y en windows XP, y aun asi nada. Haber si algun alma caritativa puede ayudarme en mi problema, ya que llevo 3 semanas intentando montar la placa y no funciona de ninguna manera, ni con bootloader ni sin bootloader. Gracias de antemano.




Amigo estoy igual que tu, estoy con pic 4550 y nada, probado en 3 pc, xp, vista y seven, habra que modificar algo en el bootloader?
Mi bootloader esta modificado por mi para adaptarlo a mi placa, con mis pines , y ni con esas va.. jajajaj buen ohabrra que tener paciencia...
nesi_tor escribió:Mi bootloader esta modificado por mi para adaptarlo a mi placa, con mis pines , y ni con esas va.. jajajaj buen ohabrra que tener paciencia...



a mi tampoco me va hay que revisar bien para poder ver que fallan con los pic 4550, el esquema y el bootloader
¿El pin 28 no debería ir a masa para activar el bootloader?


En el esquema del 18F2550 el jumper está a VCC... ¿esto es así?
Gracias nullEX por toda la ayuda, aunque no haya podido hacer funcionar con mi placa.

Sacaron un HEX modificado para la placa que uso con el funcionamiento del LED y corriendo la 1.5

Igual me motive revisando codigo y viendo como podia adaptarlo para que funcionara, por mientras lo dejare con el 1.5 que publicaron para mi placa pero igual metere manos en el codigo para lograr hacerlo funcionar :)
155 respuestas
1, 2, 3, 4