Month: February 2012

Getting STLink with Versalon firmware working with OpenOCD

So you updated your STM32VLDISCOVER with Versalon firmware as I did here.

But, what next? Now you need get OpenOCD support.

First clone OpenOCD:

$ git clone http://repo.or.cz/r/openocd.git

Then go back OpenOCD tree to 6 Jun 2011:

$ cd openocd
$ git checkout e899fcaca0d207eadea569b9dd9b2d54afafcfd4

Apply this patch (openocd_stlink.patch.tar.gz) to add support the Versalon-STLink on OpenOCD:

$ patch -p1 < ../patch/openocd.patch

Execute bootstrap to create the configure:

$ ./bootstrap

Setup configure parameters:

$ ./configure --enable-maintainer-mode --enable-vsllink --enable-usbprog --enable-jlink --enable-ft2232_libftdi

Compile it:

$ make

Install it:

$ sudo make install

Use this stlink-versaloon config:

#
# OpenOCD configuration file for in-circuit debugging the stm32vldiscovery
# loaded with the versaloon firmware.
# To start debugging issue those commands:
#    arm-miosix-eabi-gdb main.elf
#    target remote :3333
#    monitor soft_reset_halt
#    monitor target_request debugmsgs enable
#    monitor trace point 1
# The last two commands are required to redirect printf inside the MCU
# through SWD, and make the output appear inside gdb
#

# Daemon configuration
telnet_port 4444
gdb_port 3333

# Interface (using versaloon)
interface vsllink
transport select swd
swd_mode 2
swd_delay 2

# This is a board with an STM32F100RBT6
# Use 2 kB instead of the default 16 kB
set WORKAREASIZE 0x800
source [find target/stm32.cfg]

Then start OpenOCD with this command:

# openocd -f stlinkversa.cfg
Open On-Chip Debugger 0.5.0-dev-00906-ge899fca-dirty (2012-02-21-17:04)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.berlios.de/doc/doxygen/bugs.html
Warn : must select a transport.
Info : OpenOCD runs in SWD mode
1000 kHz
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
cortex_m3 reset_config sysresetreq
Info : Versaloon(0x33)by Simon(compiled on Oct 25 2011)
Info : USB_TO_XXX abilities: 0x00000008:0x00000040:0xC0000006
Info : clock speed 1000 kHz
Info : stm32.cpu: hardware has 6 breakpoints, 4 watchpoints

Now open a new terminal e connect to openocd server by telnet:

$ telnet 127.0.0.1 4444

Execute these commands to erase stm32f100 internal flash:

> reset halt
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x08000b4c msp: 0x20000400
> stm32x unlock 0
stm32x unlocked.
INFO: a reset or power cycle is required for the new settings to take effect.
> flash probe 0
device id = 0x10016420
flash size = 128kbytes
flash 'stm32x' found at 0x08000000
> 
> stm32x mass_erase 0
stm32x mass erase complete

To flash your binary (i.e. blinky.bin) copy your .bin to directory where you ran openocd command and from telnet execute:

 
> flash write_bank 0 blinky.bin 0
wrote 132 bytes from file blinky.bin to flash bank 0 at offset 0x00000000 in 0.154993s (0.832 KiB/s)
> reset run
>

P.S.: If you receive the error message “`pkglibdir’ is not a legitimate directory for `DATA'” then read it: https://acassis.wordpress.com/2012/11/03/error-pkglibdir-is-not-a-legitimate-directory-for-data/

O jeito Microsoft de otimizar as coisas

Esta parte do código foi encontrada no código fonte do Windows que vazou em 2004:

__inline BOOL
SearchOneDirectory(
                  IN  LPSTR Directory,
                  IN  LPSTR FileToFind,
                  IN  LPSTR SourceFullName,
                  IN  LPSTR SourceFilePart,
                  OUT PBOOL FoundInTree
                  )
{
    //
    // This was way too slow. Just say we didn't find the file.
    //
    *FoundInTree = FALSE;
    return(TRUE);
}

Agora vocês sabem por que a Microsoft nunca quis abrir o código fonte do Windows…

Fonte: http://www.steike.com/code/useless/evil-c/

Descobrindo a raiz quadrada com metodo Newton Raphson

Hoje precisei relembrar o processo de achar raiz quadrada. Existem várias tecnicas, uma mais chata que a outra. Eu prefiro usar a aproximação de Newton Raphson:

Xi = (Xo² + N) / 2 * Xo

vamos calcular a raiz de 27:

Sei que o número elevado ao quadrado mais proximo de 27 é 5, pois (5 * 5) = 25 e (6 * 6) é 36.

Então nosso Xo é 5

Xi = (5² + 27) / 2 * 5

Xi = (25 + 27) / 10 => 52/10 => 5,2

Agora nosso Xi (5,2) se torna o Xo da próxima aproximação:

Xi = (5,2² + 27) / 2 * 5,2

Xi = (27,04 + 27) / 10,4 => 54,04/10,4 => 5,196

Assim 5,196 já é uma boa aproximação para a raiz de 27.

Adicionando um novo componente no KiCad

Continuando o post de ontem sobre como adicionar um novo componente no KiCad. Eu acabei não utilizando os recursos listados naquele post.

Eu precisava adicionar o chip STM32F102CBT6 no KiCad, então a solução que encontrei foi:

– Dentro do EESchema clique no botão “Library editor”;
– Uma vez no “Library editor” clique em “Select working library”;
– Selecione a biblioteca “microchip”, pois usaremos um PIC32 da Microchip como base;
– Clique no botao “Load component to edit from the current lib”;
– Escolha o componente “PIC32MX575F-TQFP64”, ele tem o tamanho adequado p/ o STM32F102;
– Clique no botao “Create a new component from the current one” e entre com o nome STM32F102CBT6;
– Apague todos os pinos originais do PIC32 e clique em “Add pins to the component”;
– Apos adicionar todos os pinos clique no botao “Save current component to new library”;

Para adicionar esta .lib no EESchema clique em Preference -> Library -> ADD e adiciona o nome da .lib que foi criado.

O KiCad não tem o “footprint” (encapsulamento) LQFP48 usado por este chip, felizmente não precisei cria-lo, pois encontrei ele disponivel no site do qi-hardware: http://projects.qi-hardware.com/index.php/p/xue/source/tree/16026245e7eb4ad70b623f25616fb27e278f71f1/kicad/modules/LQFP48.mod

Para adicionar este arquivo .mod no KiCad abra o PCBnew clique em Preferences -> Library -> ADD e escolha o arquivo LQFP48.mod.

Apos fazer isso o CVpcb exibira’ este encapsulamento para ser adicionado na netlist da placa.

Dica: um otimo tutorial para que esta’ comecando a usar o KiCad pode ser encontrado nesta pagina: http://teholabs.com/knowledge/kicad.html

P.S.: Tive problemas ao executar o autorouter (“Fast Access to the Web Based FreeROUTE advanced router”), pois ao executar o “Launch FreeRouter via Java Web Start” o Firefox tentava salvar o arquivo ao inves de executa-lo. Para resolver este problema no Firefox clique em Edit -> Preferences -> Applications -> Java Web Start application e clique em “User other …” e informe o caminho /usr/bin/javaws