mirror of
https://github.com/elua/elua.git
synced 2025-01-08 20:56:17 +08:00
bd1465ca50
Conflicts: SConstruct doc/en/arch_platform.html doc/en/comunity.html doc/en/overview.html doc/en/refman.html doc/en/refman_gen.html doc/en/status.html doc/en/tut_bootstick.html doc/images/lng_pt.png doc/images/minusnode.png doc/images/next.png doc/images/node.png doc/images/nodelast.png doc/images/plusnode.png doc/images/plusnodelast.png doc/images/previous.png doc/images/showall.png doc/images/sync.png doc/images/vertline.png doc/pt/arch.html doc/pt/arch_coding.html doc/pt/arch_con_term.html doc/pt/arch_newport.html doc/pt/arch_overview.html doc/pt/arch_platform.html doc/pt/arch_tcpip.html doc/pt/building.html doc/pt/comunity.html doc/pt/dl_binaries.html doc/pt/dl_old.html doc/pt/dl_sources.html doc/pt/downloads.html doc/pt/examples.html doc/pt/faq.html doc/pt/installing_i386.html doc/pt/installing_lm3s.html doc/pt/news.html doc/pt/overview.html doc/pt/refman_dep.html doc/pt/refman_gen.html doc/pt/status.html doc/pt/tc_386.html doc/pt/toolchains.html doc/pt/tut_openocd.html doc/pt/using.html romfs/LM3S.lua romfs/led.lua romfs/morse.lua romfs/pong.lua src/lua/linit.c src/modules/auxmods.h src/platform/lm3s/platform.c src/platform/lm3s/platform_conf.h src/platform/sim/platform_conf.h
159 lines
19 KiB
HTML
159 lines
19 KiB
HTML
$$HEADER$$
|
|
<h2>Downloads</h2>
|
|
|
|
<p>Se você preferir ignorar a longa e entediante introdução sobre o OpenOCD e ir direto para a área de download dos scripts do OpenOCD, clique nos links abaixo:</p>
|
|
|
|
<ul><li><p><a href="http://www.eluaproject.net/en/Using_OpenOCD?p=Using_OpenOCD#str9files">Arquivos de configuração para STR9-comStick</a></p></li><li><p><a href="http://www.eluaproject.net/en/Using_OpenOCD?p=Using_OpenOCD#lpc2888files">Arquivos de configuração para LPC2888</a></p></li><li><p><a href="http://www.eluaproject.net/en/Using_OpenOCD?p=Using_OpenOCD#str7files">Arquivos de configuração para STR7</a></p></li></ul>
|
|
|
|
<h2>Sobre OpenOCD</h2>
|
|
|
|
<p>
|
|
|
|
<a href="tut_openocd.html">OpenOCD</a> é uma ferramenta de código aberto que pode ser usada para conectar CPU's de interface <a href="http://en.wikipedia.org/wiki/JTAG">JTAG</a>. O uso do OpenOCD com uma conexão física JTAG permite a gravação da memória flash (on-chip) de sua CPU (ou carregar o código diretamente para a memória RAM), a leitura da memória interna da CPU (Flash / RAM) e o uso da <a href="http://sourceware.org/gdb/">gdb</a> para depurar o seu código. É desnecessário afirmar que esta é uma ferramenta muito útil (e especialmente quando a sua CPU for montada em volta de um núcleo ARM, uma vez que, neste caso, é quase certo existir uma interface JTAG que você; pode usar). Dito isto, se o seu único objetivo é gravar o seu firmware, sugiro se possível, que evite usar o OpenOCD. Não é fácil aprender a usá-la adequadamente, por ser uma ferramenta de linha de comando que utiliza configuração de arquivos com muitos parâmetros diferentes, e isso certamente leva tempo para acostumar. Pior, parece que não é muito bem documentada. Na wiki existem poucas informações sobre os parâmetros de configuração, no entanto, existem alguns bons tutoriais de OpenOCD na internet, mas nenhum deles consegue ser completo. E a sintaxe (e mesmo alguns comandos) parece mudar entre versões, o que torna as coisas ainda mais difíceis. É por isso que geralmente uso uma outra ferramenta para grava&cceidl;ão de firmware, quando disponível, e uso o OpenOCD apenas quando não encontro um bom gravador de firmware. Entretanto, se você precisa depurar o seu código, provavelmente você vai precisar usar o OpenOCD, uma vez que as alternativas não são baratas.
|
|
Para resumir, você pode esquecer OpenOCD quando:</p>
|
|
|
|
<ul>
|
|
<li><p> o fabricante de sua CPU fornece um programa para gravação em firmware. Certamente este é o caso, porém na maioria das vezes esses programas funcionam somente para Windows;</p></li>
|
|
<li><p> precisa depurar o seu código, porém você já tem uma boa noção sobre onde pode estar o seu problema. Neste caso, simplesmente conecte um LED na porta PIO e ligue-o e desligue-o em vários pontos do seu código até localizar exatamente a origem do seu problema. Não me lembro qual foi a última vêz que usei gdb para depuração, pois "depuração com LED" foi da única coisa que precisei.</p></li>
|
|
</ul>
|
|
|
|
<p>Por outro lado, você provavelmente usar´ OpenOCD quando:</p>
|
|
|
|
<ul>
|
|
<li><p>seu fabricante de sua CPU não fornecer uma programa para gravação em firmware (ou quando é fornecido, este não é o que você precisa);</p></li>
|
|
<li><p>você está usando Linux, MacOS ou outro sistema operacional que não é suportado pelo programa fornecido pelo fabricante;</p></li>
|
|
<li><p>você precisa realizar difíceis depurações a fim de tentar entender o que existe de errado com a sua aplicação.</p></li>
|
|
</ul>
|
|
|
|
<p>Afinal, se você resolveu não utilzar o OpenOCD, agora é hora de abandonar esta página e se previnir de possíveis problemas. Caso você precise do OpenOCD, então continue lendo e tentarei tornar este tutorial o menos complicado possível. Entretanto, não espere que este tutorial esgote o assunto sobre OpenOCD, pois não é, minha intenção é dar a você informações suficientes para usar o OpenOCD para gravar eLua na sua placa. Portanto, não citarei aqui qualquer informação sobre depuração usando OpenOCD, somente gravação de firmware. E, antes de começarmos, por favor leia o aviso abaixo.</p>
|
|
|
|
<p>AVISO: o uso inapropriado do OpenOCD pode causar um comportamento inesperado de sua CPU. Apesar da remota possibilidade de danificar fisicamente a sua CPU devido ao uso do OpenOCD, você pode acabar travando o seu chip, pode apagar uma área de memória que não poderia ser apagada, ou pode até desabilitar a interface JTAG (tornando-a inútil). Se você alterar os scripts fornecidos pelo tutorial, por favor, certifique-se do está fazendo. Além disso, não sou um especialista em OpenOCD, meus arquivos de configuração foram testados, no entanto podem conter erros. Resumindo, este tutorial não possui garantias de funcionamento.</p>
|
|
|
|
<h2>Obtendo o OpenOCD</h2>
|
|
|
|
<p>Caso você utilize Windows, o melhor site para baixar o OpenOCD compilado e pronto para usar é o <a href="http://www.yagarto.de/">Yagarto home page</a>. Este site fornece um instalador muito bom, e parece manter o mesmo padrão de evolução do OpenOCD (as versões do site Yagarto não são as mais recentes, mas estão quase sempre atualizadas). No entanto, se você usa Linux, poderá usar o apt-get ou o pacote gerenciador de sua distribuição:</p>
|
|
|
|
<pre><code>$ sudo apt-get install openocd<br></code></pre>
|
|
|
|
<p>Parece que a coisa não é bem assim: a versão do OpenOCD que baixei pelo apt-get é do dia 5/9/2007, enquanto a versão do site Yagarto é do dia 19/6/2008. Já que estou usando o OpenOCD para Windowns (devido ao Ubuntu 8.04 não detectar direito o meu adaptador USB-to-JTAG), minhas instruções são relevantes para a versão do Yagarto. Como foi dito na introdução, a função e os parâmetros de comandos diferentes podem variar entre uma versão e outra do OpenOCD, logo, se você deseja utilizar a versão do Yagarto em seu sistema não-Windows, terá que montá-la a partir dos fontes (veja abaixo). A principal fonte de pequisa sobre como montar o OpenOCD a partir dos programa fontes é o site <a href="http://openfacts.berlios.de/index-en.phtml?title=Building_OpenOCD">OpenOCD build page</a> encontrado na wiki OpenOCD. Além desse site, existe um outro bom tutorial localizado em <a href="http://forum.sparkfun.com/viewtopic.php?t=11221">aqui</a>. Não irei fornecer as instruções para montagem, pois os dois links mencionados acima tratam muito bem do assunto, e além disso, o processo de montagem é relativamente simples. Entretanto, como os tutoriais explicam como montar baseados na última versão do OpenOCD, você precisará fazer uma pequena modificação para a versão do site Yagarto. A modificação se dá na etapa de verificação do SVN. Substitua este comando:</p>
|
|
|
|
<pre><code>$ svn checkout svn://svn.berlios.de/openocd/trunk<br></code></pre>
|
|
|
|
<p>Por este ('717' é uma revisão SVN do Yagarto OpenOCD):</p>
|
|
|
|
<pre><code>$ svn checkout -r 717 svn://svn.berlios.de/openocd/trunk<br></code></pre>
|
|
|
|
<p>Continue as instruções restantes, e ao final você terá o OpenOCD funcionando.</p>
|
|
|
|
<h2>CPUs suportadas</h2>
|
|
|
|
<p>Não encontrei nenhum site que mostrasse alguma lista de dispositivos suportados pelo OpenOCD. Logo, se você deseja verificar se sua CPU funciona com o OpenOCD, recomendo baixar os fontes mais recentes (como descrito na seção anterior) e faça uma listagem do diretório trunk/src/target/target:</p>
|
|
|
|
<pre><code>$ ls trunk/src/target/target<br> at91eb40a.cfg<br> at91r40008.cfg<br> cfi.c<br> ....<br> str9comstick.cfg<br> ....<br></code></pre>
|
|
|
|
|
|
<p>Caso esta listagem contenha algo que pareça com a sua CPU, você é um cara de sorte. OpenOCD funciona com o LPC da NXP, AT91SAM da Atmel, STR7/STR9 da ST, e muitos outros.</p>
|
|
|
|
<h2>Usando o OpenOCD</h2>
|
|
|
|
<p>Para usar o OpenOCD, você precisará de:</p>
|
|
|
|
<ul>
|
|
<li>o executável do OpenOCD, como descrito acima</li>
|
|
<li>uma placa com uma interface JTAG</li>
|
|
<li>um adaptador JTAG</li>
|
|
</ul>
|
|
|
|
<p>Em alguns casos, a placa da sua CPU já vem com um adaptador embutido. Por exemplo, a minha <a href="http://www.luminarymicro.com/products/lm3s8962_can_ethernet_evaluation_kit.html">LM3S8962</a> já vem com os adaptadores USB-JTAG e USB-serial, alternando-se automaticamente. O mesmo acontece com a minha <a href="http://www.hitex.com/index.php?id=383">STR9-comStick</a>. Entretanto, no caso da minha <a href="http://www.olimex.com/dev/sam7-ex256.html">SAM7-EX256</a>, só existe um conector JTAG, logo, preciso de um adaptador JTAG separado para conectá-lo. Estou usando o <a href="http://www.olimex.com/dev/arm-usb-tiny.html">ARM-USB-TINY</a> da Olimex, porém existem adaptadores USB-JTAG de outros fabricantes disponíveis no mercado, como o Amontec <a href="http://www.amontec.com/jtagkey-tiny.shtml">JTAGKey-Tiny</a>. Além disso, você pode <a href="http://www.hs-augsburg.de/%7Ehhoegl/proj/usbjtag/usbjtag.html">constuir seu próprio adptador</a>. Apesar de preferir trabalhar com a interface USB, você encontrará também adaptadores para portas LPT. O interessante é que, quando você compra um adaptador JTAG, muito provavelmente, este funcionará com muitas placas usando diferentes CPUs, pois o layout do conector JTAG é padrão e a maioria dos adpatadores JTAG estão prontos para funcionar em diferentes voltagens.
|
|
Na verdade, para usar o OpenOCD, você precisará de um arquivo de configuração. O arquivo de configuração serve para o OpenOCD conhecer a composição do seu hardware, tais como:</p>
|
|
|
|
<pre><code>* the kind of JTAG interface that you're using.<br>* the actual hardware platform you're using (ATM7TDMI, ARM966 and others).<br>* the memory configuration of your CPU (flash banks).<br>* the script used to program the flash memory.<br></code></pre>
|
|
|
|
|
|
<p>Apresentar uma lista com toda as opções de possíveis configurações e os seus respectivos significados, está muito além do escopo deste documento, logo não irei fazer isto, apresentarei exemplos. Para exemplificar, usarei trechos do meu arquivo de configuração da STR-comtick (comstick.cfg) adaptado da distribuição OpenOCD e de outros exemplos (não se preocupe, todos os links para os arquivos citados são fornecidos neste tutorial). Primeiramente, precisamos avisar ao OpenOCD que estamos usando um adaptador STR9-comstick USB-JTAG:</p>
|
|
|
|
<pre><code>interface ft2232<br>ft2232_device_desc "STR9-comStick A"<br>ft2232_layout comstick<br>ft2232_vid_pid 0x0640 0x002C<br>jtag_speed 4<br>jtag_nsrst_delay 100<br>jtag_ntrst_delay 100<br></code></pre>
|
|
|
|
<p>Além disso, o OpenOCD precisa ser informado sobre qual a arquitetura que será usada e o layout de memória:</p>
|
|
|
|
<pre><code>target arm966e little run_and_init 1 arm966e<br>run_and_halt_time 0 50<br><br>working_area 0 0x50000000 32768 nobackup<br><br>flash bank str9x 0x00000000 0x00080000 0 0 0<br>flash bank str9x 0x00080000 0x00008000 0 0 0 <br></code></pre>
|
|
|
|
<p>As instruções acima, dizem ao OpenOCD que a qrquitetura utilizada é a ARM966-E sendo executado no modo endian, com dois bancos de memória flash, o primeiro iniciando em 0x0 com 0x80000 bytes de tamanho e o outro iniciando em 0x80000 e com 0x80000 byte de tamanho. Finalmente, o OpenOCD deve saber qual o nome do arquivo de script (este é o arquivo usado para fisicamente programar a memória da CPU):
|
|
</p>
|
|
|
|
<pre><code>#Script used for FLASH programming<br>target_script 0 reset str91x_flashprogram.script<br></code></pre>
|
|
|
|
|
|
<p>O conteúdo do arquivo str91x_flashprogram.script é específico e depende diretamente da arquitetura utilizada:</p>
|
|
|
|
<pre><code>wait_halt<br>str9x flash_config 0 4 2 0 0x80000<br>flash protect 0 0 7 off<br>flash erase_sector 0 0 7<br>flash write_bank 0 main.bin 0<br>reset run<br>sleep 10<br>shutdown<br></code></pre>
|
|
|
|
<p>Também não vou tentar explicar os comandos acima :) Basicamente, eles desprotegem a memória flash, apaga-a, gravam nela o conteúdo do arquivo "main.bin" e em seguida reinicia a CPU. Caso você precise gravar um arquivo com um nome diferente, modifique apenas o "main.bin" na linha de comando "flash write_bank". Para realizar tudo isso, é necessário avisar ao OpenOCD para utilizar o nosso arquivo de configuração:
|
|
</p>
|
|
|
|
<pre><code>openocd-ftd2xx -f comstick.cfg<br></code></pre>
|
|
|
|
<p>(nota: no Windows, o nome do arquivo executável do OpenOCD é "openocd-ftd2xx". No Linux é simplesmente "openocd". Substitua-o pelo no do seu executável.) Este é o fim do seu curso relâmpago de OpenOCD. É claro que existe muito mais para se aprender, portanto aqui vai uma lista de links com mais informações sobre esta matéria:</p>
|
|
|
|
<ul>
|
|
|
|
<li><a href="http://www.hs-augsburg.de/%7Ehhoegl/proj/openocd/oocd-quickref.pdf">Cartela para consulta rápida do OpenOCD</a>. (pouco desatualizado)</li>
|
|
<li>Um tutorial muito bom.</li>
|
|
<li><a href="http://openfacts.berlios.de/index-en.phtml?title=OpenOCD_scripts">Exemplos de configuração</a> da página oficial da wiki do OpenOCD.</li>
|
|
<li>Uma página excelente sobre o uso do <a href="http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/openocd_intro/index.html">OpenOCD com controladores ARM</a>, contendo muitos exemplos práticos.</li>
|
|
<li>Um interessante <a href="http://forum.sparkfun.com/viewtopic.php?p=42079">tópico no fórum do SparkFun</a> sobre STR9 e OpenOCD.</li>
|
|
|
|
</ul>
|
|
|
|
<p><a name="str9files"></a></p>
|
|
<h2>Arquivos de configuração para o STR9-comStick</h2>
|
|
|
|
<p>Faça o download deles abaixo:</p>
|
|
|
|
<p><a href="http://elua.berlios.de/other/comstick.cfg">comstick.cfg</a></p>
|
|
|
|
<p><a href="http://elua.berlios.de/other/str91x_flashprogram.script">str91x_flashprogram.script</a></p>
|
|
|
|
<p><a href="http://elua.berlios.de/other/comrst.cfg">comrst.cfg</a></p>
|
|
|
|
<p><a href="http://elua.berlios.de/other/str91x_reset.script">str91x_reset.script</a></p>
|
|
|
|
<p>O arquivo de configuração comstick.cfg serve para programar o STR9-comStick. O comrst.cfg serve para resetá-lo. O comStick possui um hábito muito interessante: assim que você o liga (via USB) ele não inicia a execução do código da memória flash interna, para iniciá-lo é necessário executar o OpenOCD com o script comreset.cfg. Este script faz exatamente o que ele diz: executa um reset da CPU (já que a placa não possui um botão de RESET). Este é um comportamento bastante peculiar, e não tenho certeza se é algo genérico ou algum problema específico da minha comStick. Acredito que exista algum problema no tratamento do sinal de RESET da CPU pelo conversor USB-JTAG embutido na placa, e a única soluçõ foi executar este script toda vêz que você liga a placa ou precisa dar um RESET.</p>
|
|
|
|
<p><a name="lpc2888files"></a></p>
|
|
<h2>Arquivos de configuração para o LPC2888</h2>
|
|
|
|
<p>LPC2888 é algo bastante diferente. Não consegui encontrar um arquivo de configuração "oficial"
|
|
do LPC2888 para o OpenOCD, logo tive que aprender como criar o meu próprio arquivo. Ele funciona, porém acredito que possa ser melhorado. No momento, o arquivo de configuração é compatível com o última versão (SVN) do OpenOCD, logo leia este tutorial para entender como obter os mais recentes arquivo fontes do OpenOCD e como compilá-los (esta seção é baseada na verão 922 do repositório do OpenOCD). Então utilize o arquivo abaixo para gravar no chip o arquivo de imagem binária:</p>
|
|
|
|
<p><a href="http://elua.berlios.de/other/lpc2888.cfg">lpc2888.cfg</a></p>
|
|
|
|
<p>Se o nome da sua imagem binária não é main.bin modifique o arquivo alterando a linha correspondente (flash write_bank 0 main.bin 0), e enão chame o OpenOCD da eguinte forma:</p>
|
|
|
|
<pre><code>openocd -f lpc2888.cfg<br></code></pre>
|
|
|
|
|
|
<p>Estou usando <a href="http://www.olimex.com/dev/arm-usb-tiny.html">ARM-USB-TINY</a>
|
|
da Olimex, no entanto, deve ser fácil usar este script com qualquer outro adaptador JTAG (nã esqueça de alterar o script para se ajustar ao seu adaptador).</p>
|
|
|
|
<p><a name="str7files"></a></p>
|
|
<h2>Arquivos de configuração para o STR711FR2 (STR7 from ST)</h2>
|
|
|
|
<p>Faça o download deles abaixo:</p>
|
|
|
|
<p><a href="http://elua.berlios.de/other/str7prg.cfg">str7prg.cfg</a></p>
|
|
|
|
<p><a href="http://elua.berlios.de/other/str7_flashprogram.script">str7_flashprogram.script</a></p>
|
|
|
|
<p><a href="http://elua.berlios.de/other/str7rst.cfg">str7rst.cfg</a></p>
|
|
|
|
<p><a href="http://elua.berlios.de/other/str7_reset.script">str7_reset.scrip</a></p>
|
|
|
|
<p>Para o STR7, estou usando o Yagarto OpenOCD feito para Windows (repositório versão 717, como está descrito no início deste tutorial). O arquivo de configuração str7prg.cfg serve para programar o STR9-comStick. str7rst.cfg serve para resetá-lo. Estou usando a placa STR711FR2 da <a href="http://www.sctec.com.br/content/view/101/30/">ScTec</a> na qual conectei alguns LEDs e um conversor MAX3232TTL-R232 para comunicação serial. A placa vem com seu próprio adaptador JTAG, mas ele é usado para uma interface paralela, e como o meu computador não tem uma entrada paralela, usei o <a href="http://www.olimex.com/dev/arm-usb-tiny.html">ARM-USB-TINY</a> da Olimex. Para usá-los, chamei o OpenOCD da seguinte forma:</p>
|
|
|
|
<pre><code>openocd-ftd2xx -f str7prg.cfg<br></code></pre>
|
|
|
|
|
|
<p>(nota: no Windows, o nome do executável do OpenOCD chama-se normalmente "openocd-ftd2xx". No Linux chama-se simplesmente "openocd". Substitua-o com o nome do seu executá atual.) Além disso, certifique-e de alterar o arquivo str7_flashprogram.script caso o nome do seu arquivo imagem não seja main.bin.</p><p></p><p></p><p></p><p> </p>
|
|
$$FOOTER$$
|