sábado, 22 de marzo de 2014

SWD

Jtag sin embargo no era el objetivo.
el objetivo es swd.

Como me comunico muy bien con la discovery usando jtag ahora quiero cambiar el protocolo a swd

 cambio dentro del

openocd.cfg

transport select swd

Y me retorna el siguiente error:





Open On-Chip Debugger 0.7.0 (2014-03-17-18:02)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.sourceforge.net/doc/doxygen/bugs.html
adapter speed: 1000 kHz
Error: BUG: current_target out of bounds



Obviamente el open ocd que tengo no tiene capacidades de swd. Puesto que el swd si se comunica con la tarjeta usando versaloon.


pero openocd retorna un error

martes, 25 de febrero de 2014

Bueno tratando de moverme de los buenos y venerables microcontroladores avr hacia los muy potentes cortex m3

Parecia una cosa de lo mas simple.
consegui unos lpc1313 y unos stm32

la soldada sobre una placa de cobre no parecio gran reto.
hice primero el lpc1313 y lo programe usando un simple cable serial ftdi y el software lpc2isp.
Cable ftdi para lpc1313

Todo parecia una maravilla solo tuve que soldar un cablecito al serial porque me hacia falta resetear automaticamente el chip para facilitar la programacion.

Programe el lpc1313

Desafortunadamente el pin no lanzo ningun parpadeo. No hizo absolutamente nada.

Revise infinidad de veces el codigo y el microprocesador no hacia nada.
Pese a todo cuando lo programaba respondia como si no hubiera ningun problema.

A googlear. Y acostumbrado como estaba a los sencillos avr. Me encontre con que los cortex son otro mundo y cada uno de ellos es diferente del otro totalmente y no hay discusion de grupos para el lpc1313


Necesitaba ver que ocurria dentro del microprocesador y para eso necesitaba un cable capaz de comunicarse con el.

El serial no servia para eso. El jtag tampoco. Para sorpresa mia que crei que todos los cortex tenian jtag este no tenia ese medio de comunicacion.
Tenia un extrano protocolo llamado swd.

                                                                               
Lpc1313
 Busque y al parecer tenia un par de opciones baratas (no quiero gastarme un dineral porque es para hobby)
Un adaptador para jtag de olimex que no ofrecia garantia de correr bajo linux y uno extrano llamado versaloon.


Me decidi por el ultimo porque tenia una pagina bonita con los comandos bien explicados. Ademas que parecia tener un grupo de discusion.

llego el adaptador y tambien un par de tarjetas discovery que a 9 dolares probablemente estaban mas baratas que lo que me gaste en acido, cobre y jarabe para la tos que me dio con la placa que hice.
Versalon conectado a la discovery que ya muestra al led parpadeando


                                       



Primero programe una de las tarjetas para estar seguro que estaba bien.
La tarjeta funciono de maravilla y el programador tambien. Con la exepcion de que no lo hice a traves de sus pines etiquetados con swd.
porque por mas que lo intente no logro comunicarse el programador.
Conecte directo a los pines PA13 y PA14 y finalmente pude programar via swd.
Vi el clasico led parpadeando.


Por cierto no me quisieron vender el discovery con sus sensores como el giroscopio porque era de venta restringida. Asi que solo compre el que no trae nada.




Desafortunadamente al tratar de hacer lo mismo con el lpc1313 comenzo bien pero al final el programador no logro programar el microcontrolador.

Solo me mando unos errores a los que no pude hallar solucion.
 Busque ayuda en la discusion de versaloon pero parece muerta.



 paco@paco:~/D-EABI/D-CMSIS-GIT/lpc13xx-cmsis-template$ sudo vsprog -s lpc1000 -ms -I blink.hex -C/dev/versaloon -A -W5 -K12000 -o ef -o wf -o vf
VSProg 1.0 svn:
CopyRight(c) 2008-2010 by SimonQian <SimonQian@SimonQian.com>

URL: http://www.SimonQian.com/en/Versaloon
mail: SimonQian@SimonQian.com

Info:   Chip name undefined, try auto-detecting.
Info:   Versaloon(0x15)by Simon(compiled on Feb 13 2013)
Info:   USB_TO_XXX abilities: 0x0000076E:0x010001EF:0xC0000007
Info:   Target runs at 0.159V
Info:   SWDID = 0x2BA01477
Info:   AHB-AP_ID = 0x24770011
Info:   ROM_ADDRESS = 0xE00FF003
Info:   CFG = 0x00000000, Little-endian
Info:   CORTEX-M3 r2p0 processor detected
Info:   CPUID = 0x412FC230
Info:   Bootloader version 5.5
Info:   Chip-id read is 0x1830102B.
Info:   Auto-detect signature is 0x1830102B
Error:  lpc1000 auto-detect failed.
Error:  Fail to initialize target.
Error:  Fail to run command: prepare.




Bajo estas circustancias el stm resulto ser mucho mejor.
No muestra errores acepta jtag y swd.
Y hay mucho mas informacion y grupos de discusion.



Ahora intentar openocd.

Tengo un debugger olimex arm-usb-ocd
El cual despues de varios intentos no se comunico con la discovery. Sospecho que es porque tiene un voltaje de 5 volts y la discovery de 3.3

Regreso a versaloon
nunca habia hecho un file openocd.cfg
primero hay que agregar la velocidad a vsllink.cfg o retornara error
la velocidad no mas se pone asi:
adapter_khz 1000

Depues se regresa uno ha hacer openocd.cfg
Tras varios intentos logre hacer este:

source [find /home/paco/D-OPEN-OCD/openocd-0.7.0/tcl/interface/vsllink.cfg]
transport select jtag
gdb_flash_program enable
source [find /home/paco/D-OPEN-OCD/openocd-0.7.0/tcl/target/stm32f1x.cfg]

El cual parece estar comunicandose con discovery porque me retorno esto:

paco@paco:~/D-STM32-BOOK/STM32-Template/Blink$ sudo openocd -f openocd.cfg
Open On-Chip Debugger 0.7.0 (2014-03-17-18:02)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.sourceforge.net/doc/doxygen/bugs.html
adapter speed: 1000 kHz
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
cortex_m3 reset_config sysresetreq
Info : Versaloon(0x15)by Simon(compiled on Feb 13 2013)
Info : USB_TO_XXX abilities: 0x0000076E:0x010001EF:0xC0000007
Info : clock speed 1000 kHz
Info : JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3)
Info : JTAG tap: stm32f1x.bs tap/device found: 0x06420041 (mfg: 0x020, part: 0x6420, ver: 0x0)
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints


Estoy usando jtag porque primero lo hago en jtag y luego intentare swd.
Tampoco tengo idea de como decirle a openocd que mi configuracion del debugger esta en /dev/versaloon.  Asi que tengo que usar sudo.


Finalmente telnet
sudo telnet localhost 4444
[sudo] password for paco:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
> poll
background polling: on
TAP: stm32f1x.cpu (enabled)
target state: running
> reset halt
JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3)
JTAG tap: stm32f1x.bs tap/device found: 0x06420041 (mfg: 0x020, part: 0x6420, ver: 0x0)
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x080002a0 msp: 0x20002000
> flash probe
  flash probe bank_id
in procedure 'flash'
> flash probe 0
device id = 0x10016420
flash size = 128kbytes
device id = 0x10016420
flash size = 128kbytes
flash 'stm32f1x' found at 0x08000000





Parece que todo funciona bien incluyendo gdb


paco@paco:~/D-STM32-BOOK/STM32-Template/Blink$ /home/paco/D-EABI/arm-2013.05/bin/arm-none-eabi-gdb Blink.elf
GNU gdb (Sourcery CodeBench Lite 2013.05-23) 7.4.50.20120716-cvs
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-none-eabi".
For bug reporting instructions, please see:
<https://sourcery.mentor.com/GNUToolchain/>...
Reading symbols from /home/paco/D-STM32-BOOK/STM32-Template/Blink/Blink.elf...done.
(gdb) target remote localhost:3333
Remote debugging using localhost:3333
0x00000000 in ?? ()
(gdb) monitor reset halt
JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3)
JTAG tap: stm32f1x.bs tap/device found: 0x06420041 (mfg: 0x020, part: 0x6420, ver: 0x0)
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x080002a0 msp: 0x20002000
(gdb) load
Loading section .text, size 0x518 lma 0x8000000
Loading section .init, size 0xc lma 0x8000518
Loading section .fini, size 0xc lma 0x8000524
Loading section .eh_frame, size 0x4 lma 0x8000530
Loading section .data, size 0x18 lma 0x8000534
Loading section .init_array, size 0x4 lma 0x800054c
Loading section .fini_array, size 0x4 lma 0x8000550
Loading section .jcr, size 0x4 lma 0x8000554
Loading section vectors, size 0x10 lma 0x8000558
Start address 0x80002a0, load size 1384
Transfer rate: 2 KB/sec, 153 bytes/write.
(gdb)