Foros ZackYFileS

Foros ZackYFileS (http://foros.zackyfiles.com/index.php)
-   6 PINES (http://foros.zackyfiles.com/forumdisplay.php?f=434)
-   -   Nuevo hilo JTAG sl65 ALI 6 pines (http://foros.zackyfiles.com/showthread.php?t=498374)

Geyper 07/05/2007 14:58

Parece ser que la imagen del Usb Ice Jtag, que puse para que se apreciaran los detalles del mismo, no ha interesado a casi nadie y es que en página anterior alguien pedía que se pusiera la mencionada foto.

Pero igualmente voy a seguir aportando al foro, cualquier cosa que considere de interés para el Sl65.


Un saludo a todos.

jubamo 07/05/2007 16:33

[QUOTE=Geyper;2873832]Parece ser que la imagen del Usb Ice Jtag, que puse para que se apreciaran los detalles del mismo, no ha interesado a casi nadie y es que en página anterior alguien pedía que se pusiera la mencionada foto.

Pero igualmente voy a seguir aportando al foro, cualquier cosa que considere de interés para el Sl65.


Un saludo a todos.[/QUOTE]

Claro que si que interesa, pero es que ya la habíamos visto aquí:
[url]http://foros.zackyfiles.com/showpost.php?p=2839184&postcount=239[/url]
y en el post siguiente tienes el enlace a las cuatro fotos y al sofware para este dispositivo.

Esto nos lleva a la conclusión de que no hay nada oficial de Ali que nos permita el construirnos nuestro dispositivo JTAG.

De todas formas, muchas gracias por tu colaboración,
Saludos.

xeloa 07/05/2007 16:35

no te molestes geyper lo que pasa es que es foto ya se puso en la pagina 24 creo,y como tu todos los que estamos por aqui nos bajemos ese archivo en su momento,y para que no sientas que te pasa solo ati yo tambien he puesto varios post sin obtener respuesta de nadie y desde luego como tu seguire posteado lo que me parezca de interes,asi que cualquier cosa que postees sera leido por todos aunque nadie te conteste,un saludo compañero

manolo_321 07/05/2007 19:49

Aqui estamos al pie del cañon, este fin de semana estuve con las pruebas, el M3329 echava humo , :) , bueno os cuento mis pruebas, he probado los programas jtag para los micros STI con resultado negativo, nuestro ALI ni se inmuta, tambien probe el software jtag del projecto OPENWINCE, viene con el codigo fuente, pero tambien con resultados negativos, con el unico programa que consigo recibir algun parametro es con el Ejtag_p, aqui espongo lo que recibo del mio, seria interesante si pudiera compararlo con otros decos :

IDCODE=00000000 (no se tiene acceso)
Implentation=00C05288(siempre es el mismo,seria interesante comparar con otros decos)
Receiver ID=R1074020864 (este varia en cada lectura)
Boxkey= 4004420040044200 (tambien varia)

he estado haciendo pruebas modificando la rutina de lectura del IDCODE, solo he conseguido tener lecturas como estas :

FF20DD4,FF2002C4,FF200E54...etc. (todas en este rango)

parecen ser posiciones de memoria segun he podido leer en el standar MPIS:

The Processor Access and DMA circuit blocks are used to setup and monitor the processor internal busses and to execute the code from the EJTAG interface. In order to provide debug code without integrating it into in the application code, the EJTAG Processor Access circuitry shares a specific memory location (0xFF20.0000 to 0xFF2F.FFFF in the 32-bit address space) which can replace system memory in debug mode. When the processor accesses this memory space, the EJTAG circuitry can feed it debug instructions not resident in the application code.

Bueno no quiero aburrir, sigo con mis pruebas, espero que entre todos consigamos algo positivo.

xeloa 07/05/2007 21:08

manolo te dire que a mi con el ejtag el ali tambien me daba ese resultado,Implentation=00C05288 y si hacia trabajar el wall a la vez con el ejtag como si escribiera la flash solo en ese espacio de tiempo que el ejtag trabajaba ,la lectura del wall en el id si daba lecturas.con los sti5518 la lectura en implementacion es otra siempre la misma tambien.saludos y animos que no veas como te lo curras

zivago40 08/05/2007 09:51

hola a todos, la implementacion por lo que se ve a todos nos da igual y lo que sale en IRD y BOX key es lo mismo, si IRD lo pasas a hex te da lo otro y como dice manolo_321 varia en cada lectura. Tambien seria bueno que alguien que le funcione compruebe si el numero de implementacion le aparece por algun lado a ver si conseguimos algo.
Para manolo_321, con que has conseguido compilar el ejtag_p?? yo lo he intentado con borland 5 pero me da error en la funcion inp y outp, segun he leido estan obsoletas y no se implementan ahora, asi que estoy reconvirtiendo el codigo para hacerlo funcionar con io.dll.

manolo_321 08/05/2007 20:15

Para Zivago40, yo lo compilo con el "microsoft visual c++ 6.0", la unica pega es que el ejecutable solo trabaja en windows98 ó w95, para que trabaje en el XP nos falta la libreria "ntport.h"(para que trabaje el puerto paralelo).
Aqui pongo un link en el cual podemos leer como desarrollaron el software para un deco strong con un sc2000, es muy interesante, creo que nos aportara nuevas ideas para seguir con nuestras investigaciones, al final de este link hay una evolucion del programa ejtag_p.

[url]http://www.investigacionludica.com/foro/showthread.php?t=52036[/url]

jubamo 10/05/2007 11:33

Bien, como encuentro interesante, por su facilidad de adaptación el
ejtag_p.cpp, , vamos a ir sacando detalles del mismo:

De la linea 28 a la 32 obtengo:
Señal -> nº de pin Db25; TMS-2,TCK-3,TDI-4,TRST-5,TDO-13,
De 35 a 39:
Podemos invertir, compilandolo posteriormente la polaridad de las señales.
De 46 a 49:
Algunas instrucciones del TAP, en este caso del STi5510.
En la 293 "EnterIRInst(5, 0xA);" utiliza intrucciones de 5 bits y pone 0xA, numérico
cuando ya lo había definido en la linea 48
En la 826 "EnterIRInst(5, 0x1)" es donde le mete la instrucción 0x1=IDCODE y en la siguiente linea lee el codigo del chip.
En la 847 "EnterIRInst(5, 0x3)"instrucción 0x3=IMPCODE y luego lee los 32 bits de implementación del chip.
En la 441 función para leer 16 bits de dirección adr, 450 selecionamos dirección (ADD_IR), 451 la colocamos, 454 - 455coloca en el CTRL_IR la palabra para lectura del DMA con lo que comienza la lectura de la posición de memoria seleccionada y si no ha habido error lo devuelve en la variale data.

Hay que tener claro que lo dicho anteriormente funciona con el STI5510.


Esto del ejtag_p.cpp para el STI5510
/* DMA State Machine Definitions */
#define ADDR_IR 0x8
#define DATA_IR 0x9
#define CTRL_IR 0xA
#define ALL_IR 0xB

/* DMA Control Reg Definintions */
#define DINC 1<<4
#define DLOCK 1<<5
#define DSZ0 1<<7
#define DSZ1 1<<8
#define DRWN 1<<9
#define DERR 1<<10
#define DSTRT 1<<11
#define EJTAGBRK 1<<12
#define DABORT 1<<13
#define SETDEV 1<<14
#define PROBEN 1<<15
#define PRRST 1<<16
#define DMAACC 1<<17
#define PERRST 1<<20
#define DNM 1<<28


Esto es de un Broadcom BCM4702
// --- Some EJTAG Instruction Registers ---
#define INSTR_EXTEST 0x00
#define INSTR_IDCODE 0x01
#define INSTR_SAMPLE 0x02
#define INSTR_IMPCODE 0x03
#define INSTR_ADDRESS 0x08
#define INSTR_DATA 0x09
#define INSTR_CONTROL 0x0A
#define INSTR_BYPASS 0xFF

// --- Some EJTAG Bit Masks ---
#define TOF (1 << 1 )
#define BRKST (1 << 3 )
#define DRWN (1 << 9 )
#define DERR (1 << 10)
#define DSTRT (1 << 11)
#define SETDEV (1 << 14)
#define PROBEN (1 << 15)
#define DMAACC (1 << 17)
#define PRACC (1 << 18)
#define PRNW (1 << 19)
#define DLOCK (1 << 5 )
#define TIF (1 << 2 )
#define SYNC (1 << 23)
#define PRRST (1 << 16)
#define PERRST (1 << 20)
#define JTAGBRK (1 << 12)
#define DNM (1 << 28)
#define ROCC (1 << 31)


Esto es de un atheros ar2312
instruction length 5

instruction BYPASS 11111 BR
instruction SAMPLE/PRELOAD 00010 BSR
instruction IDCODE 00001 DIR
instruction EJTAG_IMPCODE 00011 EJIMPCODE
instruction EJTAG_ADDRESS 01000 EJADDRESS
instruction EJTAG_DATA 01001 EJDATA
instruction EJTAG_CONTROL 01010 EJCONTROL
instruction EJTAG_ALL 01011 EJALL
instruction EJTAGBOOT 01100 BR
instruction NORMALBOOT 01101 BR
instruction EJTAG_FASTDATA 01110 EJFASTDATA

Esto es de un dec sa1100

instruction length 5

# mandatory instructions
instruction EXTEST 00000 BSR
instruction SAMPLE/PRELOAD 00001 BSR
instruction BYPASS 11111 BR

# optional instructions
instruction CLAMP 00100 BR
instruction HIGHZ 00101 BR
instruction IDCODE 00110 DIR

Vemos que son bastante similares.

Respecto de la busqueda del IDCODE por parte de manolo_321 puede que tenga otro codigo o no lo tenga.


Mala noticia:
De http://www.linux-mips.org/wiki/JTAG

Decode IMPCODE

31:29 EJTAGver 010 Version 2.6
28 R4k/R3k 0 R4k
24 DINTsup 1 supported
22:21 ASIDsize 10 8-bit ASID
16 MIPS16e 0 not supported
14 NoDMA 1 No EJTAG DMA support
0 MIPS32/64 0 MIPS32

Que seria la explicación de los bits de implemetation y según manolo_321 es: Implentation=00C05288
los bits 15 - 12 valen 5 hex = 0101 bin de donde el bit 14 vale 1 (NoDMA 1 No EJTAG DMA support)

lo que lleva a la conclusión de que el ejtag_p.cpp no nos sirve, pues utiliza DMA.
Suponiendo que sea igual al del ADM5120 que es al que se refiere en esta página.

Aunque he probado a leer con el ejtag_p en un deco con el STI5518 y en implementation me da DB6C36DB
los bits 15 - 12 valen 3 hex = 0011 bin de donde el bit 14 vale 0 (NoDMA 1 No EJTAG DMA support)
con lo cual este si lo soporta.

Saludos.

jubamo 10/05/2007 11:42

Para manolo_321,
si te interesa probar con este, tiene la opción de trabajar sin DMA y so loa fuentes, te lo has de compilar.

[url]http://downloads.openwrt.org/utils/HairyDairyMaid_WRT54G_Debrick_Utility_v48.zip[/url]

Saludos.

jubamo 10/05/2007 13:04

En:
http://www.linkstationwiki.net/index...ks_for_the_LS2
podemos leer:

HairyDairyMaid (did work)

Hairydairymaid is a tool used to read and write to the flash of the Linksys WRT54G router. Functionality has been added that would allow access to the flash mamory using E(xtended)JTAG. This is a set of JTAG instructions for the MIPS based processors and they allow what is known as processor access (PrAcc). PrAcc allows the loading and execution of instruction codes into the MIPS core. HairyDairyMaid (HDM) has these applications written and should be able to install that code on the LS2 allowing the reading and writing of the flash contents via JTAG.


Y como en las fotos del conector Jtag del ali pone EJTAG, E(xtended)JTAG, deduzco que para acceder a la flash del M3329 a traves de las instrucciones PrAcc de las que dispone el programa referenciado en el post anterior.

Parece que se van aclarando detalles.

Saludos.

manolo_321 10/05/2007 22:12

Hola , comparto todo lo expuesto por Jubano, nos falta saber como acceder al bus DMA, he estado buscado informacion sobre como trabajar en modo Pracc (noDMA), y no he encontrado gran cosa, he hechado un vistazo por encima al programa que dice Jubano y parece que si tiene la occion para trabajar con este modo (Pracc), ojala sea nuestra solucion, he mirado de compilar con el visual c++, y me da errores (faltan librerias), alguien lo a compilado para windows, creo que tenemos una via muy interesante de investigacion, gracias Jubano por tu trabajo.

xeloa 11/05/2007 11:39

hola para los que sabeis del tema me gustaria que hecharais un vistazo a esta pagina de acer
http://www.keil.com/dd/chip/3208.htm.

para saber si se puede aprovechar algo ,viene un programa para la flash y es por puerto com se llama winburn os dejo el enlace esta abajo del todo y hay dos archivos mas
http://www.microware-tech.com/index.html

decirme algo .saludos

jubamo 11/05/2007 13:01

Para xeloa:

La primera habla del microcontrolador de la plaquita USB, pero falta el programa que seguro
lleva en su memoria de programa.

El segundo no te puedo decir, pero en el sitio donde esta debe de ser para programar el chip anterior.

Sobre lo que preguntaste hace tiempo sobre implementación, es lo siguiente:
Describe las principales opciones disponibles para el TAP (para entenderlo jtag)

manlolo_321:
Yo lo hago funcionar en Linux, tambien decirte que hay otras versiones.
Fijate en esto está al final del encabezado del archivo wrt54g.c y dice que descomentes la segunda linea, pues por defecto esta para Linux.
/
/ Default is Compile for Linux (both #define's below should be commented out)
// #define WINDOWS_VERSION // uncomment only this for Windows Compile / MS Visual C Compiler
// #define __FreeBSD__ // uncomment only this for FreeBSD

Saludos.

xeloa 11/05/2007 15:27

concretamente que tengo que hacer para que trabaje en windows pues ni siquiera se me abre .saludos

jubamo 11/05/2007 18:07

Cita:

Iniciado por xeloa (Mensaje 2879338)
concretamente que tengo que hacer para que trabaje en windows pues ni siquiera se me abre .saludos

Si te refieres al paquete "HairyDairyMaid_WRT54G_Debrick_Utility_v48.zip"

es una utilidad en modo consola para reflashear por JTAG el ruter WRT54G, pero que se puede usar para otras CPU modificandolo ligeramente.

Dentro lleva ReadMe.txt que al final te dice como utilizarlo en Windows y dentro de la carpeta \windows (de esa aplicación), lleva los tres archivos de los que te habla el readme.

Si lo que quieres es compilarte tu versión personalizada es cuando tienes que descomentar la linea
// #define WINDOWS_VERSION // uncomment only this for Windows Compile / MS Visual C Compiler.

No detecta nada con el Ali, es para unos procesadores de Broadcom, pero lleva el código fuente (se puede modificar) y puede trabajar con las rutinas Pracc.

Saludos.

xeloa 11/05/2007 20:00

gracias jubamo al final aprendere algo sobre este tema jtag que me tiene perdida

manolo_321 11/05/2007 20:21

Juabano, gracias por tu ayuda, ya puedo compilarlo con el visial c++, ahora voy a probarlo, haver si podemos trabajar en modo Pracc.

jubamo 11/05/2007 22:55

manolo_321:

He estado probando (versión linux) y lee el IMPCODE, las pruebas que realicé tiempo atrás salían mal porque el PC que utilizaba es demasiado rápido y hace las lecturas mal.

Pruebalo con esta entrada "wrt54g -probeonly /skipdetect"
te debe de dar IDCODE 0000000000, e IMPCODE el comentado anteriormente.

Lee todos los switchs de linea de comando, pues te permiten seleccionar manualmente muchos parametros, piensa que esta hecho para otro hard diferente.

Saludos.

manolo_321 12/05/2007 09:44

Jubano he estado haciendo pruebas con el WRT54g, como ya sabiamos no reconoce el IDCODE, lo que me estraña es que tampoco reconoce el IMPCODE, estuve haciendo varias pruebas con los diferentes comandos, probe en modo "skipdetect" para pasar el reconocimiento del IDCODE, tambien con el modo "nodma" (Pracc) , y nada por ahora, las pruebas las estoy haciendo en windows tabien las pruebas las hice reconfigurando el cable XILINX en el archivo wrt54.h para no tener que modificar las conexiones de mi jtag:

// --- Xilinx Type Cable ---
#define TDI 2 //0
#define TCK 1 //1
#define TMS 0 //2
#define TDO 4 //4

Voy a probar como tu dices , creo que hay un programa para relentizar la velocidad de la cpu.

jubamo 12/05/2007 12:27

Sin modificar nada y con esta llamada:
"wrt54g -probeonly /skipdetect" me da: Ins Len set to 0, Chip ID 7, IMPCODE 0
Y con:
"wrt54g -probeonly /skipdetect /instrlen:5" me da: Ins Len set to 5, Chip ID 0, IMPCODE 00C05288

Al menos con estos dato podrás ver si te funciona correctamente.

jubamo 12/05/2007 13:17

Aquí hay un parche (creo que es para la V4.5) que le introduce una nueva función para retardo en las rutinas de la flash, pero como es de nanoseg se puede hacer una llamada cada vez que saque algo por el puerto paralelo y así vaya más despacio.

http://wiki.openwrt.org/OpenWrtDocs/...ggler.patch.gz

En el caso de una maquina rápida y no te funcione bién se puede probar a intercalar en la función clockin, antes de cada lectura o escritura en puerto paralelo.

static unsigned char clockin(int tms, int tdi)
{
unsigned char data;

tms = tms ? 1 : 0;
tdi = tdi ? 1 : 0;

if(wiggler) data = (1 << WTDO) | (0 << WTCK) | (tms << WTMS) | (tdi << WTDI) | (1 << WTRST_N);
else data = (1 << TDO) | (0 << TCK) | (tms << TMS) | (tdi << TDI);
#ifdef WINDOWS_VERSION // ---- Compiler Specific Code ----
{ tdelay(0, 20); //esta es la llamada, se pueden probar otros valores.
_outp(0x378, data);
}


ESTA ES LA FUNCION
void tdelay(int secs, int nsecs)
{
struct timespec delay;
delay.tv_sec = secs;
delay.tv_nsec = nsecs;
nanosleep(&delay, NULL);
}

He probado lo de los retardos y no es este mi problema, parece que es de adaptación de niveles de tensión, pue utilizo el Jtag de resistencias.

jubamo 13/05/2007 09:17

Mis deducciones:
 
No admite DMA por el TAP (jtag). Esto lo apoya el código que nos da con el IMPCODE. El que por el ICE-USB haya que mandarle la utilidad para flashearlo y el volcado de memoria.abs. Y el puente que hace que no arranque el deco (para tener la CPU parada) y permite que se hagan lecturas por JTAG.

EL ejtag_p, j ke ys y todos los que son para los STI o al menos no tienen en cuenta el IMPCODE, no sirven, pues tienen el acceso a la memoria por DMA (Acceso directo sin interrumpir el trabajo de la CPU), lo hacen por DMA pues es más rápido, pero al parecer eso complica el diseño de la pastilla y tienden a quitarlo.

Es recomendable un Jtag con el HC244 alimentado a 3 ó 3.3V (del mismo deco se puede sacar) para asegurar que los niveles de tensión son los correctos.

Esto es lo más difícil:
Hay que averiguar las instrucciones pracc para mandarle a la flash su contenido o hacerlo al estilo Ali a través de la ram.

Saludos.

manolo_321 13/05/2007 10:35

OK Jubano, ya tengo lectura del IMPCODE, probe con un programa llamado CPUKILLER , con el cual podemos relentizar la velocidad de la cpu del pc, este no era el fallo, al final con la instruccion que tu comentaste "wrt54g -probeonly /skipdetect /instrlen:5" ya tengo lectura, IMPCODE 00C05288, parece que es comun en todos los M3329, si partimos de la base que este micro no soporta bus DMA, esta claro que tosdos estos programas JTAG no nos sirven, hay que buscar informacion sobre como se programa el modo Pracc, estoy hechando un vistazo al programa de ali por usb, y alli tenemos muchas llamadas a memoria estilo 0ff200200,0ff20300,0ff20003c. Nos seria de mucha utilidad alguna persona con conocimientos en "ingenieria inversa" pues mi opinion es que hay tenemos la solucion.

jubamo 13/05/2007 13:25

Muy bien manolo_321, estas direcciones están dentro del rango de las utilizadas el PraCC.

Ingeniería inversa si, pero ten en cuenta que a través del ICE-USB se le manda por PraCC un código para que el Ali pueda flashear la memoria, que es para el Ali (flashwr27sf.abs) y es lo que se puede ver, pero lo realmente necesario es como lo manda el M6759 del USB.

Estoy convencido de que es tan simple como esto:
wrt54g -flash:custom /skipdetect /fc:1 /window:X /start:X /length:0x200000 /instrlen:5 /nodma

Primero se prueba con:
wrt54g -backup:custom /skipdetect /fc:1 /window:X /start:X /length:0x200000 /instrlen:5 /nodma

******** HAY QUE DESPEJAR LA X ******** HAY QUE DESPEJAR LA X *******

Con esta llamada (Jtag enchufado al ruter WRT54G) mira su salida en pantalla:

./wrt54g -backup:custom /skipdetect /fc:1 /window:1fc00000 /start:1ff00000 /length:0x200000 /instrlen:8 /nodma

====================================
WRT54G/GS EJTAG Debrick Utility v4.8
====================================

Probing bus ... Done

Instruction Length set to 8

CPU Chip ID: 00010100011100010010000101111111 (1471217F)
*** CHIP DETECTION OVERRIDDEN ***

- EJTAG IMPCODE ....... : 00000000100000000000100100000100 (00800904)
- EJTAG Version ....... : 1 or 2.0
- EJTAG DMA Support ... : Yes
*** DMA Mode Forced Off ***

Issuing Processor / Peripheral Reset ... Done
Enabling Memory Writes ... Done
Halting Processor ... <Processor Entered Debug Mode!> ... Done
Clearing Watchdog ... Done

Manual Flash Selection ... Done

Flash Vendor ID: 00000000000000000000000000000001 (00000001)
Flash Device ID: 00000000000000000010001001001001 (00002249)
*** Manually Selected a AMD 29lv160DB 1Mx16 BotB (2MB) Flash Chip ***

- Flash Chip Window Start .... : 1fc00000
- Flash Chip Window Length ... : 00200000
- Selected Area Start ........ : 1ff00000
- Selected Area Length ....... : 00200000

*** You Selected to Backup the CUSTOM.BIN ***

=========================
Backup Routine Started
=========================

Saving CUSTOM.BIN.SAVED_20070513_131732 to Disk...
[ 0% Backed Up] 1ff00000: 20031985 0000000c e41eb0b1 e0021985
[ 0% Backed Up] 1ff00010: 0000012c 67a74ec6 0000008c 000003b8
[ 0% Backed Up] 1ff00020: 000081a4 00000000 00087708 386d4389
[ 0% Backed Up] 1ff00030: 44272b1f 44272b1f 00042eca 000000e8
[ 0% Backed Up] 1ff00040: 00000136 00000006 4a6f7044 ee2eb743

barrigaverde 14/05/2007 18:47

saludos compañeros estoy tratando de ponerme al dia y no dejo de comprender que estoy superado y me quito el sombrero ante vuestro trabajo si creeis que puedo ayudar aki estoy jubamo,, manolo 321 etc

jubamo 14/05/2007 20:49

Gracias por tu ofrecimiento barrigaverde.

Con esta llamada:
"wrt54g -probeonly /skipdetect /instrlen:5"

y en Linux y conectado al Ali (en windows también terminaba) termina el programa indicando "violación de segmento" y haciendo un seguimiento he visto que termina en esta linea.

linea798 data = *(unsigned int *)(pmodule + offset);

Por si alguien quiere seguirlo:
[url]http://downloads.openwrt.org/utils/HairyDairyMaid_WRT54G_Debrick_Utility_v48.zip[/url] (programa y readme.txt)
[url]http://www.idt.com/products/files/1868542/32434manual.pdf?CFID=1053255&CFTOKEN=77314445[/url] (bonito manual de uno de estos chips).

Saludos.

lanza3d 15/05/2007 14:18

hilo cerrado y chincheteado .....


La franja horaria es GMT +2. Ahora son las 14:13.

Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
ZackYFileS - Foros de Debate