====== JTAG ====== __NOTOC__ {{wiki:jtag_header.jpg |Interface JTAG com barra de pinos 5x2, 90°}} ---- **ATENÇÃO** **Os terminais no Zeebo onde devem ser soldados os fios são bastante frágeis. Não exerça muita força ou demore muito tempo com o ferro de solda sobre eles, ou poderão se soltar. Caso isso aconteça, dê ADEUS ao JTAG no Zeebo.** **Se não tiver experiência com solda ou não estiver confiante para fazer, peça alguém que entenda. Pode ser em alguma eletrônica ou loja onde trabalhem com Xbox.** ---- Na placa filha do Zeebo, como chamada pelo site oficial Mexicano (que deveria ser chamada de mãe :)), existem 10 pads que expõe a interface JTAG primária do MSM7201A (ele também possui a auxiliar, que comumente está ligada ao tap do ARM11, mas não é exposta no Zeebo). Para utilizar a interface, você precisará de um dongle JTAG. Existem inúmeros modelos de dongles disponíveis no mercado. O único requisito para usá-lo no Zeebo é que ele aceite o nível de tensão que a interface JTAG do MSM7201A trabalha, ou seja, **2,6 V**. Se não pretende comprar um, você pode fabricar o famoso //Wiggler//, que é um //pseudo-dongle// que utiliza o porta paralela do PC. Muitos dos projetos deste cabo **NÃO** são adequados para o Zeebo, pois trabalham com níveis de tensão maiores e podem danificar o console. Por isso, é necessário o projeto de um Wiggler apropriado: a versão Baixa Tensão, ou Low Voltage (LV). Com o cabo/dongle em mãos, está na hora de ligá-lo ao Zeebo. Já que na placa só existem os pads, você pode soldar uma barra de pinos 5x2, 90° ou 180°, assim fica mais fácil de ligar os fios. Se preferir, pode também soldar os fios diretamente. Só não demore muito com o ferro de solda nos pads. ===== Construindo um Wiggler-compatível ===== Caso queira construir um cabo, use o projeto abaixo. Ele foi baseado na versão LV encontrado no fórum XDA-Developers ( [[http://forum.xda-developers.com/showpost.php?p=6055979&postcount=412]] ). Seu diagrama foi modificado e simplificado e é específico para o Zeebo. Alguns outros hardwares podem, com pouca ou nenhuma adaptação, ser usados com este cabo, mas foi criado com o Z em mente. {|class = "wikitable" style="width: 0%;" align="center" |- |{{ wiki:R2_sch.png |Esquemático}} |{{ wiki:R2_brd.png |Layout PCI}} |} O projeto em Eagle pode ser obtido aqui: [[http://tripleoxygen.net/files/openzeebo/hardware/zeebojtag_r2.zip]] O layout foi feito para PCIs com apenas um lado cobreado, e assim facilitar a fabricação. ===== Abrindo o Zeebo ===== Para ter acesso à interface JTAG, basta remover a tampa superior do Zeebo. Siga os detalhes em [[hardware]]. ===== Conexão ===== Independente de qual dongle usará, use esta referência para a pinagem no Zeebo. {{ wiki:jtag_zeebo.jpg |Pinagem JTAG no Zeebo}} Nos dois casos, o pino //JTAG_TRST// **deve** ser conectado ao pino //VREG_MSMP//, e caso o dongle não tenha clock adaptivo, o pino //JTAG_RTCK// do Zeebo deve ser conectado ao GND. Para os pinos que não forem citados nos diagramas abaixo, deixe-os desconectados. ==== Se fabricou o Wiggler (ARM 14 pinos) ==== {| border="1" cellpadding="5" cellspacing="0" align="center" |- ! Pino no Zeebo ! Pino no dongle |- || VREG_MSMP || 1 - VREG_MSMP |- || JTAG_TMS || 7 - JTAG_TMS |- || JTAG_TCK || 9 - JTAG_TCK |- || JTAG_TDO || 11 - JTAG_TDO |- || GND || 2 - GND |- || JTAG_RTCK || 4 - GND |- || JTAG_TDI || 5 - JTAG_TDI |- || JTAG_TRST || 3 - VREG_MSMP |} ==== Outro dongle com pinagem padrão ARM 20 pinos ==== {{ wiki:arm_jtag_20.png |Pinagem padrão ARM 20 pinos}} {| border="1" cellpadding="5" cellspacing="0" align="center" |- ! Pino no Zeebo ! Pino no dongle |- || VREG_MSMP || 1 - VCC |- || JTAG_TMS || 7 - TMS |- || JTAG_TCK || 9 - TCLK |- || JTAG_TDO || 13 - TDO |- || GND || Qualquer GND (20, por exemplo) |- || JTAG_TDI || 5 - TDI |- || JTAG_RTCK || 11 - RTCK (se o dongle não tiver RTCK, conecte o pino do Zeebo ao GND) |} ==== Software ==== Com o cabo ligado, você precisará ter o [[http://openocd.berlios.de/web/|OpenOCD]] instalado em sua máquina para comunicar com o console. Caso esteja no Linux, é necessário compilar o OpenOCD. Siga os passos em [[http://www.openplug.org/plugwiki/index.php/Setting_Up_OpenOCD_Under_Linux]]. Siga até o passo "Building OpenOCD", pois o resto não servirá. Se for usar Wiggler no Linux, na linha onde se lê: $ ./configure --enable-maintainer-mode --enable-ft2232_libftdi Inclua a porta paralela: $ ./configure --enable-maintainer-mode --enable-ft2232_libftdi --enable-parport --enable-parport_ppdev Para usuários Windows, baixe-o já compilado daqui: [[http://www.freddiechopin.info/index.php/en/download/category/4-openocd]] Nos dois casos, opte pela versão 0.4.0. O OpenOCD necessita de um arquivo de configuração que explica como ele deve comunicar com o dispositivo: qual CPU, IDCODE, velocidade do JTAG, etc... Para o Zeebo, você necessitará de 2 arquivos: um para o ARM9 e outro para o ARM11. Copie os respectivos textos abaixo e salve na pasta "scripts/target" contida na pasta do OpenOCD: === ARM9 === 0@@ === ARM11 === 1@@ Estes arquivos servem para o dongle da Signalyzer. Para usá-lo com o Wiggler, substitua o trecho: 2@@ por 3@@ Salve os arquivos com os nomes: "msm7201a_arm9.cfg" e "msm7201a_arm11.cfg", na pasta "target" do OpenOCD. Para usuários Windows, estará na pasta de instalação do OpenOCD. Linux, geralmente em /usr/local/share/openocd. Ligue seu Zeebo, abra uma janela do terminal e execute (de acordo com qual núcleo pretende controlar/depurar): sudo openocd -f target/msm7201a_arm9.cfg Se obter esta saída do OpenOCD, para o ARM9: 4@@ ou para o ARM11: 5@@ Observe as linhas: Info : JTAG tap: arm9.cpu tap/device found: 0xa01700e1 (mfg: 0x070, part: 0x0170, ver: 0xa) Info : JTAG tap: arm11.cpu tap/device found: 0xa7b360e1 (mfg: 0x070, part: 0x7b36, ver: 0xa) Dependendo de qual núcleo, aparecerá os respectivos IDCODEs: ARM9 - 0xa01700e1 ARM11 - 0xa7b360e1 Agora, abra outro terminal e digite: telnet localhost 4444 Você verá um prompt fornecido pelo OpenOCD: 6@@ Daqui você envia comandos ao OpenOCD. Agora você já pode ler, escrever na memória; executar passo a passo; modificar registradores; ... enfim,agora tem controle sobre o console! Já existem algums funções úteis que inclui no arquivo de configuração e que podem ser chamadas no OpenOCD: ***mf** - Pausa a execução e desliga a MMU ***mo** - Liga a MMU e resume a execução ***rst** - Reseta o console ***brew** - Força a execução do BREW Appmgr como primeiro aplicativo. ***em** - Força a execução do EMAPPLET como primeiro aplicativo. Estas funções serão detalhadas conforme forem usadas pelos outros artigos.