Using OpenOCD and gdb to debug my NuttX port to LPC11xx

I’m porting NuttX to LPC11xx (using the LPCXpresso LPC1115 board) and these are the steps I used to get OpenOCD and GDB working to debug my firmware:

The openocd.cfg to use with STLink-v2 SWD programmer:

# 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]

You need to execute “reset halt” from OpenOCD telnet server to get “monitor reset halt” working on gdb:

$ telnet 127.0.0.1 4444Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Open On-Chip Debugger
> reset halt
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0xc1000000 pc: 0x1fff0040 msp: 0x10000ffc
> exit

Now execute the command arm-none-eabi-gdb (from Debian/Ubuntu package “gdb-arm-none-eabi”) passing the nuttx ELF file:

$ arm-none-eabi-gdb nuttx
GNU gdb (7.7.1+dfsg-1+6) 7.7.1
Reading symbols from nuttx...done.
(gdb) target remote localhost:3333
Remote debugging using localhost:3333
0x1fff0040 in ?? ()
(gdb) monitor reset halt
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0xc1000000 pc: 0x1fff0040 msp: 0x10000ffc
(gdb) load
Loading section .vectors, size 0xc0 lma 0x0
Loading section .text, size 0x9197 lma 0x410
Loading section .ARM.exidx, size 0x8 lma 0x95a8
Loading section .data, size 0x48 lma 0x95b0
Start address 0x410, load size 37543
Transfer rate: 9 KB/sec, 6257 bytes/write.
(gdb) b __start
Breakpoint 1 at 0x410: file chip/lpc11_start.c, line 109.
(gdb) step
Note: automatically using hardware breakpoints for read-only addresses.

Breakpoint 1, __start () at chip/lpc11_start.c:109
109	{
(gdb) 
115	  lpc11_clockconfig();
(gdb) 
lpc11_clockconfig () at chip/lpc11_clockconfig.c:93
93	  putreg32(SYSCON_SYSPLLCLKSEL_IRCOSC, LPC11_SYSCON_SYSPLLCLKSEL);
(gdb) 
96	  putreg32((SYSCON_SYSPLLCTRL_MSEL_DIV(4) | SYSCON_SYSPLLCTRL_PSEL_DIV2), LPC11_SYSCON_SYSPLLCTRL);
(gdb) p /x *0x40048008      <--- this is the LPC11_SYSCON_SYSPLLCTRL register address
$2 = 0x23
(gdb) 

You can use breakpoints, steps and many other GDB features.

That is it!

HTML5 visualization and graphic toolkit

I am looking for some HTML5 graphic toolkit for data visualization.

The idea is creating something similar to Freeboad, but more evolved, I mean: more type of data visualization and UI components.

Almost all data visualization are based on D3 or Graphite.

Dashing:
http://dashingdemo.herokuapp.com/sample
http://shopify.github.io/dashing/

GDash:
https://github.com/ripienaar/gdash

Graph-explorer:
https://github.com/vimeo/graph-explorer/wiki

Graphana:
http://grafana.org

Graphene:
http://jondot.github.io/graphene/
https://github.com/jondot/graphene

jCharFX:
https://github.com/softwarefx/jChartFX

justGauge:
https://github.com/toorshia/justgage

Limn:
https://github.com/wikimedia/limn

Node-RED: (used to create component relationship/integration)
http://nodered.org

Raphaël:
http://raphaeljs.com/chart.html

Tasseo:
https://github.com/obfuscurity/tasseo

Flashing NuttX on STM32F429i-Disco board

This is my openocd.cfg file:

# STM32F429i-Disco

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

# SWD as transport
transport select hla_swd

# Use STM32F4x target
set WORKAREASIZE 0x4000
source [find target/stm32f4x.cfg]

Just connect miniUSB cable to STM32F429i-Disco board and execute:

$ sudo openocd -f openocd.cfg

Now using telnet to connect on openocd server execute:

$ telnet 127.0.0.1 4444
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Open On-Chip Debugger

Previous state query failed, trying to reconnect
jtag status contains invalid mode value - communication failure
Polling target stm32f4x.cpu failed, GDB will be halted. Polling again in 6300ms

> reset halt
Previous state query failed, trying to reconnect
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x0800051c msp: 0x2000439c
Polling target stm32f4x.cpu succeeded again, trying to reexamine
stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints

> flash probe 0
device id = 0x10036419
flash size = 2048kbytes
flash 'stm32f2x' found at 0x08000000

> flash write_image erase nuttx.bin 0x08000000
auto erase enabled
target state: halted
target halted due to breakpoint, current mode: Thread 
xPSR: 0x61000000 pc: 0x20000042 msp: 0x2000439c
wrote 65536 bytes from file nuttx.bin in 2.970617s (21.544 KiB/s)

> reset run
jtag status contains invalid mode value - communication failure
Polling target stm32f4x.cpu failed, GDB will be halted. Polling again in 100ms

> exit

That is all!

Como criar parafusos no FreeCAD

Criar parafusos manualmente é algo muito trabalhoso, mas felizmente existe uma Macro disponível para o FreeCAD que permite criar parafusos de forma bem simples e rápida.

Esta macro chama-se Screw Maker, um nome bem sugestivo né?

http://www.freecadweb.org/wiki/index.php?title=Macro_screw_maker1_2

A versão 1.7 está disponível neste link:

http://forum.freecadweb.org/viewtopic.php?f=22&t=6558#p52887

Para instala-los basta iniciar o FreeCAD ir em Macro -> Macros em seguida clicar no botão Criar e informar o nome ScrewMaker. Será aberto um editor de texto dentro do FreeCAD, basta colar o conteúdo do arquivo “screw_maker1_7.py” dentro deste editor e salvar.

Finalmente p/ executar a Macro você pode ir em Macro -> Macros e dar duplo clique no nome ScrewMaker.FCMacro ou clicar apenas uma vez neste nome e em seguida clicar em Executar.

Finalmente as partes fresadas para o Meu Primeiro CNC chegaram

Como vocês sabem estou desenvolvendo um CNC p/ fazer placas de circuito impresso e p/ fresar madeira e metais macios, como por exemplo alumínio.

A maior parte deste CNC é desenvolvida com peças padronizadas de mercado (produto de prateleira), mas algumas partes como a base X(cama ou bed em inglês), a base Z (base do spindle) e o adaptador p/ acoplar no suporte da castanha são peças customizadas. Estas peças são feitas em alumínio fresado.

Eu mandei fabricar estas peças na Torneamentos Pontone (não tenho nenhum vínculo com eles e nem estou recebendo p/ fazer propaganda deles, só estou divulgando aqui porque gostei da qualidade do serviço que eles prestaram). As peças foram confeccionadas nas seguintes ligas de alumínio com seus respectivos preços:

- Suporte Castanha - Alumínio Liga 6351
- 01 peça -  Valor unitário: 95,00

- Mesa CNC - Alumínio Liga 5052
- 01 peça -  Valor unitário: 295,00

- Base Spindle - Alumínio Liga 5052
- 01 peça -  Valor unitário: 169,00

Estas foram umas das peças mais caras até agora (a lista completa com todas as peças e custo estão nesta planilha: https://docs.google.com/spreadsheets/d/1Cw12JK1nSOURXnkiu8UeDRuR-VCACQ6kpZGtEg_TR5Q), mas estou prezando pela qualidade antes do preço. Esta liga de alumínio (5052) por exemplo é usada na indústria naval o que assegura uma melhor resistência.

Antes de montar o CNC resolvi desenha-lo usando o FreeCAD. Eu nunca havia utilizado esta ferramenta, mas o fato de ter vários vídeos tutoriais sobre ele no Youtube facilitou muito meu aprendizado. Outra vantagem dele é o fato de permitir usar a “Navegação” do padrão Blender, assim eu não precisei aprender a como usar o mouse e teclado no padrão nativo CAD.

Se eu não tivesse criado o projeto do CNC no FreeCAD eu teria cometido muitos erros de montagem. E pior, eu teria mandado fabricar algumas peças com dimensões erradas, mas que felizmente puderam ser detectadas facilmente na visualização 3D. Por isso é importante medir e desenhar todas as peças do projeto, mesmo que isso dê um pouco de trabalho.

Bom, chega de conversa, vamos ao que interessa: as fotos e screenshot do projeto.

Design do CNC no FreeCAD (dica: clique com o botão direto sobre a imagem e mande visualizar a imagem para ver no tamanho original) :

CNC_FreeCAD

Base X (bed) do CNC:

base_x

Base Z (spindle holder) :

base_z

Adaptador p/ Castanha:

ballnut_adapter

A três peças empilhadas:

stack_base

Base Z com a Tupia DeWALT D26670 parafusada:

basez_spindle

Base X com Tupia visão traseira:

basez_spindle_backview

É isso pessoal, em breve postarei mais novidade sobre a montagem do CNC.

SNMP Walking in the raspi berry pieee

$ snmpwalk 192.168.0.15 -c public -v1
SNMPv2-SMI::mib-2.1.1.0 = STRING: "Linux raspberrypi 3.2.27+ #250 PREEMPT Thu Oct 18 19:03:02 BST 2012 armv6l"
SNMPv2-SMI::mib-2.1.2.0 = OID: SNMPv2-SMI::enterprises.8072.3.2.10
SNMPv2-SMI::mib-2.1.3.0 = Timeticks: (7542) 0:01:15.42
SNMPv2-SMI::mib-2.1.4.0 = STRING: "Me "
SNMPv2-SMI::mib-2.1.5.0 = STRING: "raspberrypi"
SNMPv2-SMI::mib-2.1.6.0 = STRING: "Sitting on the Dock of the Bay"
SNMPv2-SMI::mib-2.1.7.0 = INTEGER: 72
SNMPv2-SMI::mib-2.1.8.0 = Timeticks: (87) 0:00:00.87
SNMPv2-SMI::mib-2.1.9.1.2.1 = OID: SNMPv2-SMI::snmpModules.10.3.1.1
SNMPv2-SMI::mib-2.1.9.1.2.2 = OID: SNMPv2-SMI::snmpModules.11.3.1.1
SNMPv2-SMI::mib-2.1.9.1.2.3 = OID: SNMPv2-SMI::snmpModules.15.2.1.1
SNMPv2-SMI::mib-2.1.9.1.2.4 = OID: SNMPv2-SMI::snmpModules.1
SNMPv2-SMI::mib-2.1.9.1.2.5 = OID: SNMPv2-SMI::mib-2.49
SNMPv2-SMI::mib-2.1.9.1.2.6 = OID: SNMPv2-SMI::mib-2.4
SNMPv2-SMI::mib-2.1.9.1.2.7 = OID: SNMPv2-SMI::mib-2.50
SNMPv2-SMI::mib-2.1.9.1.2.8 = OID: SNMPv2-SMI::snmpModules.16.2.2.1
SNMPv2-SMI::mib-2.1.9.1.3.1 = STRING: "The SNMP Management Architecture MIB."
SNMPv2-SMI::mib-2.1.9.1.3.2 = STRING: "The MIB for Message Processing and Dispatching."
SNMPv2-SMI::mib-2.1.9.1.3.3 = STRING: "The management information definitions for the SNMP User-based Security Model."
SNMPv2-SMI::mib-2.1.9.1.3.4 = STRING: "The MIB module for SNMPv2 entities"
SNMPv2-SMI::mib-2.1.9.1.3.5 = STRING: "The MIB module for managing TCP implementations"
SNMPv2-SMI::mib-2.1.9.1.3.6 = STRING: "The MIB module for managing IP and ICMP implementations"
SNMPv2-SMI::mib-2.1.9.1.3.7 = STRING: "The MIB module for managing UDP implementations"
SNMPv2-SMI::mib-2.1.9.1.3.8 = STRING: "View-based Access Control Model for SNMP."
SNMPv2-SMI::mib-2.1.9.1.4.1 = Timeticks: (37) 0:00:00.37
SNMPv2-SMI::mib-2.1.9.1.4.2 = Timeticks: (39) 0:00:00.39
SNMPv2-SMI::mib-2.1.9.1.4.3 = Timeticks: (41) 0:00:00.41
SNMPv2-SMI::mib-2.1.9.1.4.4 = Timeticks: (69) 0:00:00.69
SNMPv2-SMI::mib-2.1.9.1.4.5 = Timeticks: (69) 0:00:00.69
SNMPv2-SMI::mib-2.1.9.1.4.6 = Timeticks: (69) 0:00:00.69
SNMPv2-SMI::mib-2.1.9.1.4.7 = Timeticks: (70) 0:00:00.70
SNMPv2-SMI::mib-2.1.9.1.4.8 = Timeticks: (87) 0:00:00.87
SNMPv2-SMI::mib-2.25.1.1.0 = Timeticks: (558841) 1:33:08.41
SNMPv2-SMI::mib-2.25.1.2.0 = Hex-STRING: 07 DF 04 1A 0F 01 0E 00 2B 00 00 
SNMPv2-SMI::mib-2.25.1.3.0 = INTEGER: 1536
SNMPv2-SMI::mib-2.25.1.4.0 = STRING: "dma.dmachans=0x7f35 bcm2708_fb.fbwidth=1824 bcm2708_fb.fbheight=984 bcm2708.boardrev=0xf bcm2708.serial=0xe5a84b19 smsc95xx.maca"
SNMPv2-SMI::mib-2.25.1.5.0 = Gauge32: 3
SNMPv2-SMI::mib-2.25.1.6.0 = Gauge32: 82
SNMPv2-SMI::mib-2.25.1.7.0 = INTEGER: 0
End of MIB