Month: March 2015

Using OpenOCD to program the LPC1115 LPCXpresso board

Unfortunately NXP uses a built-in programmer in the LPCXpresso board called LPCLink that is not supported by OpenOCD and there is not (AFAIK) an option to replace its firmware.

Then I decided to cut the board to separate the “LPCXpresso LPC1115 REV A” from the LPCLink programmer.

So I used a simple and low cost STLink-v2 programmer board that is supported by OpenOCD. In order to use OpenOCD to reprogram the LPC1115 board we need to connect four wires from STLink-v2 to LPC1115 board:

STLink-v2    |   LPC1115 Board
------------------------------
GND              GND
3V3              3V3
IO               AD4
CLK              P0.10

Also we need to instruct OpenOCD to use SWD protocol. You can do it creating the following config openocd.cfg file:

# LPC1115 LPCXpresso Target

# Using stlink as SWD programmer
source [find interface/stlink-v2.cfg]

# SWD as transport
transport select hla_swd

# Use LPC1115 target
set WORKAREASIZE 0x4000
source [find target/lpc11xx.cfg]

Now execute OpenOCD using the created config file:

$ sudo openocd -f openocd.cfg 
Open On-Chip Debugger 0.9.0-dev-00251-g1fa4c72 (2015-01-28-20:08)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 10 kHz
adapter_nsrst_delay: 200
Info : Unable to match requested speed 10 kHz, using 5 kHz
Info : Unable to match requested speed 10 kHz, using 5 kHz
Info : clock speed 5 kHz
Info : STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 3.137636
Info : lpc11xx.cpu: hardware has 4 breakpoints, 2 watchpoints

Connect to OpenOCD server:

$ telnet 127.0.0.1 4444

Reset the CPU and flash the lpc1115_blink.bin file:

> reset halt
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0xc1000000 pc: 0x1fff0040 msp: 0x10000ffc

> flash probe 0
flash 'lpc2000' found at 0x00000000

> flash write_image erase blink_lpc1115.bin 0x00000000
auto erase enabled
target state: halted
target halted due to breakpoint, current mode: Thread 
xPSR: 0x01000000 pc: 0x10000108 msp: 0x100001b8
Verification will fail since checksum in image (0x00000000) to be written to flash is different from calculated vector checksum (0xefffebe9).
To remove this warning modify build tools on developer PC to inject correct LPC vector checksum.
wrote 4096 bytes from file blink_lpc1115.bin in 0.592621s (6.750 KiB/s)

> reset run

The checksum warning message could be removed if you add the checksum to binary, read this post: http://sigalrm.blogspot.com.br/2011/10/cortex-m3-exception-vector-checksum.html.

The blink LED sample I got from Frank Duignan’s page: http://eleceng.dit.ie/frank/arm/BareMetalLPC1114/index.html

Edit Makefile and configure LIBSPEC to point out to the right path:
LIBSPEC=-L /usr/lib/gcc/arm-none-eabi/4.8/armv6-m

$ make

To generate the final binary I used objcopy:

$ arm-none-eabi-objcopy -O binary main.elf blink_lpc1115.bin

Como ligar um motor de passo bipolar na placa TB6560-4V3

Conectar um motor de passo na placa TB6560-4V3 é uma tarefa simples, você só precisa tomar o cuidado de ligar os fios A, A-, B e B- nas posições certas.

No conector da placa existem as inscrições AP, AM, BP e BM, eles correspondem exatamente ao A, A-, B e B-, nesta ordem.

Portanto você deve ligar o fio Vermelho no AP, o Azul no AM, o Verde no BP e o Preto no BM. Este é o padrão para a maioria dos motores de passo bipolar, como vimos aqui.

The 2 out of 5 coding

Bell Labs developed during the half of last century a coding system dubbed “2 out of 5”.

The main idea was to reduce the ten wires used to represent digits 0-9 or just an improvement over bi-quinary coding that uses seven wires (two wires to indicate if it is higher or lower than 5 digit and five wires to represent a digit 0 to 4).

In the 2 out of 5 coding each wire represent one of these digits: 0, 1, 2, 4 or 7.

If you wants to indicate number 1 then wire 0 and wire 1 needs to be ON. If you wants to indicate number 3 wires 1 and 2 needs to be ON, and so on.

This is the complete sequence:
1 = 11000
2 = 10100
3 = 01100
4 = 10010
5 = 01010
6 = 00110
7 = 10001
8 = 01001
9 = 00101
10 = 00011

Did you notice 10 is wrong? (4 + 7 = 11), don’t worry, this is a special case used to represent the 0 digit.

Source: http://ibm-1401.info/qui-binary.html

Usando senhas aleatorias

Quase todo mundo acaba usando uma senha padrão p/ acessar vários sites ou apenas muda parte da senha misturando com as iniciais do nome do site.

O risco é que se sua senha for descoberta, em pouco tempo todas as senhas dos demais sites também poderão ser deduzidas.

Uma forma mais segura é criar senhas randomicas e únicas para cada site, usando por exemplo através da saída do comando sha1:

$ dd if=/dev/random of=entropy.bin bs=1 count=64
$ sha1sum entropy.bin
0f22d241e22654e745db05ce3a2bd87365b5c42b  entropy.bin

Muito provavelmente você não vai lembrar de cabeça da senha “0f22d241e22654e745db05ce3a2bd87365b5c42b”, mas poderá salva-las num arquivo contendo a senha e o site onde ela é utilizada.

Não é seguro deixar este arquivo desprotegido, então por segurança você deve criptografar seu arquivo usando por exemplo o comando ccrypt (que usa AES256) com uma senha que você nunca tenha usado antes:

### Encrypt ###
$ ccrypt -e password.txt

### Decrypt ###
$ ccrypt -d password.txt.cpt

#

FreeCAD: Adicionando o modulo “Drawing Dimensioning”

Se você usa o FreeCAD para desenhos mecânicos, então você sabe que o ponto fraco dele é a criação do desenho técnico (Blueprint) para fabricação da peça.

Felizmente existe um módulo escrito em Python que tenta resolver este problema, trata-se do Drawing Dimensioning.

Para utiliza-lo basta clonar o repositório do github:

$ git clone https://github.com/hamish2014/FreeCAD_drawing_dimensioning.git

E copia a pasta FreeCAD_drawing_dimensioning para dentro da pasta Mod/ do FreeCAD, mas só funciona com a versão 0.15. Isto significa que você terá que compilar o FreeCAD a partir do código fonte do projeto: http://www.freecadweb.org/wiki/?title=CompileOnUnix

Como podemos ajudar a criar um Brasil melhor?

Os protestos do dia 15/03/2015 mostraram que os brasileiros estão realmente irritados com a corrupção.

Infelizmente a grande maioria dos brasileiros, se fossem políticos, estaria fazendo a mesma coisa ou mesmo fazendo coisas piores. A corrupção no Brasil é algo praticamente enraizado na nossa cultura.

Portanto, antes de querer acabar com a corrupção devemos mudar as nossas ações. Trata-se de uma mudança cultural, uma mudança de mentalidade. Deixar de lado aquele sentimento mesquinho de querer levar vantagem em tudo (lei de Gerson) e simplesmente fazer a coisa certa.

Resolvi listar aqui algumas coisas que devemos deixar de fazer e outras que precisamos começar a fazer. Eu queria listar pelo menos 101 dicas, mas confesso que listar 31 já deu um bom trabalho. Quem sabe com a sua ajuda e sugestão eu não consiga atingir as 101 dicas?

001 – Não leve vantagem sobre as outras pessoas. Seja justo, não haja como um espertalhão;
002 – Não tente subornar policiais ou servidores público;
003 – Não aceite suborno;
004 – Não altere medidores de água ou eletricidade p/ reduzir o valor pago;
005 – Não altere equipamentos eletrônicos p/ receber sinal de TV ou Internet sem pagar mensalidade;
006 – Não “crackeie” software pago para utiliza-los sem pagar à empresa que o desenvolveu;
007 – Não compre itens usados se você não conhece a procedência. Você pode acabar comprando um produto que foi roubado e estará alimentando este tipo de crime;
008 – Trate as pessoas com respeito e educação;
009 – Não jogue lixo na rua;
010 – Respeite as filas e a ordem de chegada;
011 – Atravesse na faixa;
012 – Espere o sinal verde para atravessar;
013 – Quando estiver dirigindo, dê prioridade ao pedestre;
014 – Se encontrar algum objeto perdido (carteira, celular, óculos, etc), procure o dono para devolver ou entregue no achados e perdidos;
015 – Pesquise sobre o político antes de votar;
016 – Acompanhe as ações do político que você votou; (O Portal da Transparência fornece muitas informações sobre o que os políticos estão fazendo)
017 – Exija dos políticos mais comprometimento com o que eles prometeram antes de serem eleitos;
018 – Não use a Internet do seu vizinho ou de qualquer pessoa sem a autorização dele;
019 – Não sonegue impostos. Infelizmente o Brasil é um dos países com a carga tributária mais pesada, mas lembre-se: “dê a Cesar o que é de Cesar”;
020 – Pesquise sobre as empresas das quais você é cliente. Ela respeita o meio ambiente? ela trata bem seus funcionários? Do contrário troque a marca do produto que você usa;
021 – Não dirija após beber bebidas alcoólicas, você pode colocar a sua vida e a vida de outras pessoas em perigo;
022 – Se você foi lesado, procure seus direitos, não adianta ficar reclamando e não fazer nada para mudar o que está errado;
023 – Não mije nas árvores e postes (você não é cachorro). Tente segurar mais um pouco até chegar em casa ou procure um estabelecimento que tenha banheiro;
024 – Não estacione nas calçadas ou em locais proibidos apenas porque vários carros já estão estacionados, provavelmente todos serão multados, inclusive você;
025 – Seja positivo em todas suas ações, principalmente no meio virtual onde os Brasileiros são considerados uma praga que destruem tudo à sua volta. Antes de fazer comentários negativos e de baixo calão, tente se colocar no lugar da pessoa que receberá seus comentários;
026 – Denuncie casos de maus tratos às pessoas e animais;
026 – Denuncie pessoas corruptas ou qualquer pessoa que esteja lesando o patrimônio público;
027 – Não “mate” aula, você foi à escola p/ estudar então aproveite a oportunidade que está tendo;
028 – Se ao receber o troco você notou que veio a mais, devolva ao caixa;
029 – Se o preço de uma mercadoria no estabelecimento comercial estiver errado quando você passar no Caixa, informe ao atendente, mesmo se o valor do caixa estiver menor que o valor da prateleira, seja justo e correto;
030 – Ajude os políticos propondo leis que melhorem a vida das pessoas e/ou a infraestrutura da sua cidade;
031 – Quando receber uma carta ou encomenda destinada a outra pessoa não abra, procure o destinatário da mesma ou devolva aos Correios;
032 – Não buzinar, não gritar e não xingar quando o motorista da frente demora a perceber que o sinal abriu;
033 – Não venda seu voto, não aceite dinheiro de político. Você pode achar que está
sendo beneficiado, mas no “fim do dia” todos saem perdendo;
034 – Não falsifique carteirinha de estudante para conseguir meia entrada;
035 – Se estiver viajando pela empresa, não peça ao motorista do Taxi ou ao dono do restaurante para dar uma nota fiscal com valor mais alto. Eu trabalhei numa empresa onde um funcionário pediu uma notinha num posto de combustível com uma quantidade de litros de gasolina à mais que a capacidade do tanque do veículo. Pouco tempo depois ele foi demitido.
036 – Se você é dono de estabelecimento comercial, não coloque mesas e cadeiras na calçada, isso atrapalha a passagem dos pedestres.

Como ignorar dependencias dos pacotes deb

Provavelmente você já passou por este problema: ao tentar instalar um pacote .deb o programa insiste em depender de uma versão antiga de uma biblioteca ou outro programa, mesmo funcionando perfeitamente com a versão mais nova desta dependencia.

Provavelmente você sabe que é possível ignorar a depencia acrescentando a opção “–no-deps=nomedadependencia” como argumento junto ao “apt-get install” ou usando “–ignore-depends=nomedadependencia” como argumento junto ao “dpkg -i”, porém ao tentar instalar outro programa o dpkg ou apt-get irão reclamar do problema da dependência.

Felizmente existem algumas formas de resolver este problema. A primeira e mais complicada é esta opção:

Decompacte o deb:

$ ar x youpackage-linux.deb (serão criados 3 arquivos: debian-binary control.tar.gz data.tar.gz)

Descompacte o arquivo control:

$ tar xzf control.tar.gz (serão criados: postinst postrm preinst prerm md5sums control)

Remova as dependencias editando o arquivo control.

Reempacote control.tar.gz:

$ tar c {post,pre}{inst,rm} md5sums control | gzip -c > control.tar.gz

Compacte o pacote deb:

$ ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz

Fonte: http://serverfault.com/questions/250224/how-do-i-get-apt-get-to-ignore-some-dependencies

A segunda opção é bem mais simples, use o equivs p/ criar um pacote vazio ( fake debian package ) :

$ sudo aptitude install equivs
$ mkdir /tmp/tl-equivs && cd /tmp/tl-equivs
$ equivs-control nome_pacote_depencia
Edite o arquivo "nome_pacote_depencia" e coloque o nome do pacote e versão
$ equivs-build texlive-local
$ sudo dpkg -i nome_pacote_depencia_versao-1_all.deb

Fonte: http://askubuntu.com/questions/74523/how-can-i-install-a-package-without-installing-some-dependencies

Updating the LPC-Link of LPCXpresso LPC1115

This is the dmesg log from original NXP LPCXpresso LPC1115:

[40022.046785] usb 3-3: new high-speed USB device number 11 using xhci_hcd
[40022.175426] usb 3-3: New USB device found, idVendor=0471, idProduct=df55
[40022.175433] usb 3-3: New USB device strings: Mfr=0, Product=0, SerialNumber=0

After downloading the “Installer_LPCXpresso_7.6.2_326_Linux-x86.tar.gz” and installing it (read the INSTALL.txt) execute the firmware update using dfu-util:

$ dfu-util -d 0x471:0xdf55 -c 0 -t 2048 -R -D LPCXpressoWIN.enc

dfu-util 0.8

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2014 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to dfu-util@lists.gnumonks.org

dfu-util: Invalid DFU suffix signature
dfu-util: A valid DFU suffix will be required in a future dfu-util release!!!
Deducing device DFU version from functional descriptor length
Opening DFU capable USB device...
ID 0471:df55
Run-time device DFU version 0100
Claiming USB DFU Runtime Interface...
Determining device status: state = dfuIDLE, status = 0
dfu-util: WARNING: Runtime device already in DFU state ?!?
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 0100
Copying data from PC to DFU device
Download	[=========================] 100%        29192 bytes
Download done.
state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present
Done!
dfu-util: can't detach
Resetting USB to switch back to runtime mode

Then reset the board and you will see it:

[40022.046785] usb 3-3: new high-speed USB device number 11 using xhci_hcd
[40022.175426] usb 3-3: New USB device found, idVendor=0471, idProduct=df55
[40022.175433] usb 3-3: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[40100.106369] usb 3-3: USB disconnect, device number 11
[40100.562631] usb 3-3: new high-speed USB device number 12 using xhci_hcd
[40100.691493] usb 3-3: New USB device found, idVendor=1fc9, idProduct=0009
[40100.691500] usb 3-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[40100.691504] usb 3-3: Product: LPC-Link Probe v1.3
[40100.691506] usb 3-3: Manufacturer: Code Red Technologies
[40100.691509] usb 3-3: SerialNumber: WIN64HS12
[40130.923946] usb 3-3: USB disconnect, device number 12
[40133.320956] usb 3-3: new high-speed USB device number 13 using xhci_hcd
[40133.449483] usb 3-3: New USB device found, idVendor=0471, idProduct=df55
[40133.449490] usb 3-3: New USB device strings: Mfr=0, Product=0, SerialNumber=0