Re: [CIAA-Firmware] Primera EDU-CIAA-NXP brickeada

59 views
Skip to first unread message

Juan Cecconi

unread,
Aug 6, 2015, 12:18:43 PM8/6/15
to ciaa-ide, ciaa-f...@googlegroups.com
Actualicé con parte de la respuesta de pablo la parte de FAQ de la wiki, para no tener que volver a contestarlo uno y otra vez, y algunos otros cambios menores.


2015-08-06 12:50 GMT-03:00 Pablo Ridolfi <pablor...@gmail.com>:
Reenvío a la lista para que quede documentado que funciona.
Saludos a todos.

---------- Forwarded message ---------
From: Rodrigo Pardo <asc...@gmail.com>
Date: jue., 6 ago. 2015 a las 12:38
Subject: Re: [CIAA-Firmware] Primera EDU-CIAA-NXP brickeada
To: Pablo Ridolfi <pablor...@gmail.com>


Funcionó! Gracias!!!

2015-08-06 12:26 GMT-03:00 Pablo Ridolfi <pablor...@gmail.com>:
Asumo que tenés una EDU-CIAA-NXP, un cable micro USB y algo metálico para puentear JP5.

- Asegurate que la CIAA esté desenchufada.
- Puenteá JP5.
- Conectá la CIAA.
- Soltá JP5.
- Ejecutá, parado en el raíz del Firmware, el comando 'make erase'
- Deberías ver algo así:

$ make erase
===============================================================================
Starting OpenOCD and erasing all...
(after downloading a new firmware please do a hardware reset!)
 
openocd -f ./modules/tools/openocd/cfg/cortexM4/lpc43xx/lpc4337/ciaa-nxp.cfg -c "init" -c "halt 0" -c "flash erase_sector 0 0 last" -c "shutdown"
Open On-Chip Debugger 0.9.0 (2015-06-15-20:05)
Licensed under GNU GPL v2
For bug reports, read
adapter speed: 2000 kHz                                                                                                                                                      
Using Edu-CIAA-NXP, qspi flash is not present!                                                                                                                               
none separate                                                                                                                                                                
cortex_m reset_config vectreset                                                                                                                                              
Info : clock speed 2000 kHz                                                                                                                                                  
Info : JTAG tap: lpc4337.m4 tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)                                                                                
Info : JTAG tap: lpc4337.m0 tap/device found: 0x0ba01477 (mfg: 0x23b, part: 0xba01, ver: 0x0)                                                                                
Info : lpc4337.m4: hardware has 6 breakpoints, 4 watchpoints                                                                                                                 
Info : lpc4337.m0: hardware has 2 breakpoints, 1 watchpoints                                                                                                                 
erased sectors 0 through 14 on flash bank 0 in 0.120510s                                                                                                                     
shutdown command invoked      

Luego deberías poder debuguear normalmente.



El jue., 6 ago. 2015 a las 12:09, Gustavo Muro (<gust...@gmail.com>) escribió:
Copio a ciaa-firmware

2015-08-06 11:56 GMT-03:00 Rodrigo Pardo <asc...@gmail.com>:
Bueno, cerrando JP5 con un destornillador, reseteo la CIAA con el botón e intento cargar el código. Sin éxito:

Open On-Chip Debugger 0.9.0 (2015-05-19-12:06)
Licensed under GNU GPL v2
For bug reports, read
adapter speed: 2000 kHz
Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'.
Using Edu-CIAA-NXP, qspi flash is not present!
none separate
cortex_m reset_config vectreset
Started by GNU ARM Eclipse
Info : clock speed 2000 kHz
Info : JTAG tap: lpc4337.m4 tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4337.m0 tap/device found: 0x0ba01477 (mfg: 0x23b, part: 0xba01, ver: 0x0)
Info : lpc4337.m4: hardware has 6 breakpoints, 4 watchpoints
Info : lpc4337.m0: hardware has 2 breakpoints, 1 watchpoints
Info : accepting 'gdb' connection on tcp/3333
undefined debug reason 7 - target needs reset
Info : JTAG tap: lpc4337.m4 tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4337.m0 tap/device found: 0x0ba01477 (mfg: 0x23b, part: 0xba01, ver: 0x0)
Warn : Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.
Warn : Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.
Info : Halt timed out, wake up GDB.
Error: timed out while waiting for target halted

Info : JTAG tap: lpc4337.m4 tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4337.m0 tap/device found: 0x0ba01477 (mfg: 0x23b, part: 0xba01, ver: 0x0)
Warn : Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.
Warn : Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x10403e00 msp: 0x10089ff0
Error: timed out while waiting for target halted
TARGET: lpc4337.m0 - Not halted
in procedure 'reset' 
in procedure 'ocd_bouncer'



Error: timed out while waiting for target halted
Error: timed out while waiting for target halted
Warn : target not halted
Warn : lpc2000 prepare sectors returned 13881200
Error: failed erasing sectors 0 to 11
Error: flash_erase returned -902
Info : Halt timed out, wake up GDB.
Info : dropped 'gdb' connection

El 6 de agosto de 2015, 11:39, Rodrigo Pardo <asc...@gmail.com> escribió:

Justo lo encontré, comparando esquemáticos. Voy a probar. Gracias


El jue., 6 de agosto de 2015 11:33, Gustavo Muro <gust...@gmail.com> escribió:
(JP5 para la EDU-CIAA-NXP)

El 6 de agosto de 2015, 11:31, Rodrigo Pardo <asc...@gmail.com> escribió:
Gracias por el link. Igual estoy viendo y no encuentro ese JP15 en la EDU-CIAA. ¿Cuál sería para este PCB?

Gracias nuevamente.

El 6 de agosto de 2015, 11:19, Gustavo Muro <gust...@gmail.com> escribió:
Hola Rodrigo.
Revisá:
¿Cómo hago para reprogramar la CIAA-NXP cuando no responde?
(JP5 para la EDU-CIAA-NXP)
Saludos
Gustavo


El 6 de agosto de 2015, 10:33, Rodrigo Pardo <asc...@gmail.com> escribió:
Buenos días, vuelvo a molestar. Esta vez con algo que seguramente no voy a poder solucionar mirando números de canal.
La CIAA me quedó como en estado de reset: todos los LEDs prendidos y no responde por openOCD.
La reconecté varias veces. Reinicié la pc, cambié de USB, cambié de PC y nada. 
Por cygwin al poner make openocd tengo la siguiente respuesta:

$ make openocd
===============================================================================
Starting OpenOCD...

openocd -f ./modules/tools/openocd/cfg/cortexM4/lpc43xx/lpc4337/ciaa-nxp.cfg
Open On-Chip Debugger 0.9.0 (2015-05-19-12:06)
Licensed under GNU GPL v2
For bug reports, read
adapter speed: 2000 kHz
Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'.
Using Edu-CIAA-NXP, qspi flash is not present!
none separate
cortex_m reset_config vectreset
Info : clock speed 2000 kHz
Info : JTAG tap: lpc4337.m4 tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4337.m0 tap/device found: 0x0ba01477 (mfg: 0x23b, part: 0xba01, ver: 0x0)
Info : lpc4337.m4: hardware has 6 breakpoints, 4 watchpoints
Info : lpc4337.m0: hardware has 2 breakpoints, 1 watchpoints
Error: lpc4337.m4 -- clearing lockup after double fault
Polling target lpc4337.m4 failed, trying to reexamine
Info : lpc4337.m4: hardware has 6 breakpoints, 4 watchpoints
Error: lpc4337.m4 -- clearing lockup after double fault
Polling target lpc4337.m4 failed, trying to reexamine

Las últimas tres líneas se repiten infinitamente.

Por consola de ECLIPSE al intentar hacer debug me dice lo siguiente:

Open On-Chip Debugger 0.9.0 (2015-05-19-12:06)
Licensed under GNU GPL v2
For bug reports, read
adapter speed: 2000 kHz
Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'.
Using Edu-CIAA-NXP, qspi flash is not present!
none separate
cortex_m reset_config vectreset
Started by GNU ARM Eclipse
Info : clock speed 2000 kHz
Info : JTAG tap: lpc4337.m4 tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4337.m0 tap/device found: 0x0ba01477 (mfg: 0x23b, part: 0xba01, ver: 0x0)
Info : lpc4337.m4: hardware has 6 breakpoints, 4 watchpoints
Info : lpc4337.m0: hardware has 2 breakpoints, 1 watchpoints
Info : accepting 'gdb' connection on tcp/3333
undefined debug reason 7 - target needs reset
Info : JTAG tap: lpc4337.m4 tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4337.m0 tap/device found: 0x0ba01477 (mfg: 0x23b, part: 0xba01, ver: 0x0)
Warn : Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.
Warn : Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.
target state: halted
target halted due to debug-request, current mode: Handler HardFault
xPSR: 0x01000003 pc: 0x1a000200 msp: 0x10007fdc
Info : JTAG tap: lpc4337.m4 tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4337.m0 tap/device found: 0x0ba01477 (mfg: 0x23b, part: 0xba01, ver: 0x0)
Warn : Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.
Warn : Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 00000000 pc: 0x1a002200 msp: 0x10008000
Error: timed out while waiting for target halted
TARGET: lpc4337.m0 - Not halted
in procedure 'reset' 
in procedure 'ocd_bouncer'

Error: timed out while waiting for target halted
Error: lpc4337.m4 -- clearing lockup after double fault
Warn : lpc2000 prepare sectors returned 13880968
Error: failed erasing sectors 0 to 11
Error: flash_erase returned -902
Info : Halt timed out, wake up GDB.
Info : dropped 'gdb' connection

Al tacto está a temperatura normal, apenas más caliente que la yema del dedo.

Como dije en el post anterior, estaba probando el ADC, esto pasó cuando cambiaba el cablecito que sale del DAC y entra al ADC, de un canal a otro, al mismo tiempo que estaba programando con el Eclipse para leer de ese nuevo canal.

No sé si esta es la lista de correos correcta. Espero me puedan ayudar.
Muchas gracias.

--
Has recibido este mensaje porque estás suscrito al grupo "CIAA-Firmware" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-firmwar...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.




--
Has recibido este mensaje porque estás suscrito al grupo "CIAA-Firmware" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-firmwar...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "CIAA-Firmware" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-firmwar...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

martin ribelotta

unread,
Aug 6, 2015, 10:14:27 PM8/6/15
to Juan Cecconi, ciaa-ide, ciaa-f...@googlegroups.com
Gente... ¿que onda esto?
Warn : Verification will fail since checksum in image (0x00000000) to be written to flash is different from calculated vector checksum (0x53ff4386).
Estoy con la 0.5.0 (la 0.6.0 tiene el error de que directamente no arranca, alguna referencia al programar a 0x1A0000 -donde esta la SPIFI????-)

Por supuesto, al hacer make download anda, pero el bootloader, al arrancar en frio (sin openocd ni gdb) no reconoce como firmware valido el codigo ya que no logra hacer el checksum correctamente

En un rato veo como lo arreglan los de libopencm3 y lo posteo...



Has recibido este mensaje porque estás suscrito al grupo "CIAA-IDE" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-ide+u...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a ciaa...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/ciaa-ide/CAD79Vyp5R-Gm%2BZ2WyRr%2Bbe%3D3LdwiHpqxxSPe1muAZ%3DPvD7gjpA%40mail.gmail.com.

Juan Cecconi

unread,
Aug 6, 2015, 10:59:02 PM8/6/15
to martin ribelotta, ciaa-f...@googlegroups.com, ciaa-ide

Martín,
   El warn del checksum esta desde siempre, y aún así funciona en frío. De hecho en el sase anterior lo usamos con el tablero con modbus, o la aplicación de los trenes de Pablo, etc.
   Seguramente el chequeo se habilite desde algo similar a como se programa el CRP, o se ignore si es cero...pero por algo es sólo un warn y funcionó.
  Por otro lado... Que es lo que no te anda de la 0.6.0??? Acordate de definir BOARD como edu, si lo haces como nxp el cfg del nxp te incluye el banco de la qspi y te da un error porque no la encuentra
Saludos

martin ribelotta

unread,
Aug 6, 2015, 11:05:08 PM8/6/15
to Juan Cecconi, ciaa-ide, ciaa-f...@googlegroups.com
Bueno, aca encontre el tema de como generar el checksum. Copio y pego el diff para la version 0.5.0

diff --git a/externals/base/cortexM4/lpc43xx/linker/ciaa_lpc4337.ld b/externals/base/cortexM4/lpc43xx/linker/ciaa_lpc4337.ld
index 9f456cb..9fcb9e4 100644
--- a/externals/base/cortexM4/lpc43xx/linker/ciaa_lpc4337.ld
+++ b/externals/base/cortexM4/lpc43xx/linker/ciaa_lpc4337.ld
@@ -261,4 +261,13 @@ SECTIONS
     
     PROVIDE(_pvHeapStart = .);
     PROVIDE(_vStackTop = __top_RamLoc32 - 0);
+    PROVIDE(__valid_user_code_checksum = 0 - 
+             (_vStackTop 
+             + (ResetISR + 1) 
+             + (NMI_Handler + 1) 
+             + (HardFault_Handler + 1)
+             + (( DEFINED(MemManage_Handler) ? MemManage_Handler : 0 ) + 1)   /* MemManage_Handler may not be defined */ 
+             + (( DEFINED(BusFault_Handler) ? BusFault_Handler : 0 ) + 1)     /* BusFault_Handler may not be defined */ 
+             + (( DEFINED(UsageFault_Handler) ? UsageFault_Handler : 0 ) + 1) /* UsageFault_Handler may not be defined */ 
+             ) );
 }

Igual esto no soluciona nada mas que mi paranoia por los warnings

Ok, ahora que lo pruebo bien, el boton de reces sigue colgandolo. Lo extraño es que no es consistente entre un reset y otro.
Me explico.

* Grabo y blinkea
* Le doy reset y anda
* Lo desenchufo y todos los leds quedan prendidos
* Lo desenchufo otra vez y ahi si anda.
* Repito la operación diez veces y cuatro andan (inicia el blinking) y seis no (se queda con todos los leds prendidos)

Ahora que lo pienso ¿no habia algun problema con el pin de vbat al aire?????

Mañana le pongo una bateria o le puenteo el pin forro ese a ver si anda jejejeje. Ahora me voy a dormir porque tengo PCB nuevo (aparte de la EDU y si no estoy bien fresco mañana no se va a montar solo -solo para entendidos-)

martin ribelotta

unread,
Aug 6, 2015, 11:19:00 PM8/6/15
to Juan Cecconi, ciaa-ide, ciaa-f...@googlegroups.com
Ok, como ya dije, evidentemente, no es este el problema pero aca va la segunda parte del parche (aplicado a modules/rtos)

diff --git a/gen/src/cortexM4/Os_Internal_Arch_Cfg.c.php b/gen/src/cortexM4/Os_Internal_Arch_Cfg.c.php
index 643f7ec..2bf804e 100644
--- a/gen/src/cortexM4/Os_Internal_Arch_Cfg.c.php
+++ b/gen/src/cortexM4/Os_Internal_Arch_Cfg.c.php
@@ -88,7 +88,7 @@
 #elif (CPU == lpc4337)
 /* ResetISR is defined in cr_startup_lpc43xx.c */
 extern void ResetISR(void);
-
+__attribute__ ((weak)) extern void __valid_user_code_checksum();
 /** \brief External declaration for the pointer to the stack top from the Linker Script */
 extern void _vStackTop(void);
 #else
@@ -355,7 +355,7 @@ void (* const g_pfnVectors[])(void) = {
    MemManage_Handler,              /* The MPU fault handler      */
    BusFault_Handler,               /* The bus fault handler      */
    UsageFault_Handler,             /* The usage fault handler    */
-   0,                              /* Reserved                   */
+   __valid_user_code_checksum,     /* Reserved                   */
    0,                              /* Reserved                   */
    0,                              /* Reserved                   */
    0,                              /* Reserved                   */

Pablo Ridolfi

unread,
Aug 7, 2015, 1:30:58 AM8/7/15
to martin ribelotta, Juan Cecconi, ciaa-ide, ciaa-f...@googlegroups.com
Buenísimo lo del checksum Martín! Por qué no hacés el commit?
Abrazo!


martin ribelotta

unread,
Aug 7, 2015, 10:54:30 AM8/7/15
to Pablo Ridolfi, Juan Cecconi, ciaa-ide, ciaa-f...@googlegroups.com
El 7 de agosto de 2015, 2:30, Pablo Ridolfi <pablor...@gmail.com> escribió:
Buenísimo lo del checksum Martín! Por qué no hacés el commit?
Abrazo!

Oka, a la tarde me hago un clon del repo en mi github y envio un pull-request.

De todas formas ¿esto que me esta pasando es común? (es decir, mal arranque en caliente y mal reset)
Tambien pruebo con ponerle una pilita a ver si deja de joder y les comento.

Gustavo Muro

unread,
Aug 21, 2016, 9:01:15 AM8/21/16
to martin ribelotta, Pablo Ridolfi, Juan Cecconi, ciaa-ide, ciaa-f...@googlegroups.com
Hola todos.

Antes que nada, pido disculpas por lo extenso, pero amerita la explicación.

Retomo este hilo porque se había estado hablando sobre el "tilde" de la placa al momento de arrancar.
Bueno, estuve viendo el tema porque quería ver la configuración del oscilador y encontré que en el startup, se configura el oscilador interno RC y no el cristal:
https://github.com/ciaa/Firmware/blob/b4e4331c033709501b5dabc9ed5e64e847ae57b6/externals/drivers/cortexM4/lpc43xx/src/sysinit_18xx_43xx.c#L161
Así que reemplacé esa línea por:
Chip_SetupXtalClocking();
Para que en lugar de configurar el clock con el IRC, lo haga con el Cristal externo.
Función, pero, volvió el problema de que a veces, luego del reset, el placa no arranca.
Así que me puse a ver qué estaba pasando y llegué a la siguiente conclusión: cuando la placa "no arranca" en realidad, el micro está corriendo pero no se configuró correctamente el systick, por lo que el OS no funciona.
Entonces, por qué no se configura el systick de manera correcta?, y llegué a comprobar que en esas ocasiones la siguiente función devolvía 0 en lugar de devolver la frecuencia del sistema:
https://github.com/ciaa/Firmware/blob/b4e4331c033709501b5dabc9ed5e64e847ae57b6/externals/drivers/cortexM4/lpc43xx/src/chip_18xx_43xx.c#L116
Seguí buscando y encontré que eso se debía a que el micro pasaba por acá:
https://github.com/ciaa/Firmware/blob/b4e4331c033709501b5dabc9ed5e64e847ae57b6/externals/drivers/cortexM4/lpc43xx/src/clock_18xx_43xx.c#L409
esto significa que el PLL no está encanchado, así que dije, esperemos a que se enganche el PLL antes de llamar a esta función:
while (!(LPC_CGU->PLL1_STAT & 1));
y el problema seguía. Que pasa? el bit de que el PLL está enganchado, cambia entre 0 y 1 durante un tiempo luego de configurar el Oscilador externo. Posible solución agregar un bruto delay:
delay = 5000;
while (delay--);
para que este bit se estabilice.
Con esto funciona, pero no me parece muy elegante.
Envié la consulta al foro de NXP y no me contestaron, no se que opinan ustedes, pero por el momento, podemos poner el delay ese, para poder hacer funcionar la placa con el oscilador a cristal.
Saludos!
Gustavo



Saludos a todos.

(JP5 para la EDU-CIAA-NXP)

Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-firmware+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "CIAA-Firmware" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-firmware+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "CIAA-Firmware" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-firmware+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "CIAA-IDE" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-ide+unsubscribe@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a ciaa...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/ciaa-ide/CAD79Vyp5R-Gm%2BZ2WyRr%2Bbe%3D3LdwiHpqxxSPe1muAZ%3DPvD7gjpA%40mail.gmail.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "CIAA-IDE" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-ide+unsubscribe@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a ciaa...@googlegroups.com.

--
Has recibido este mensaje porque estás suscrito al grupo "CIAA-IDE" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-ide+unsubscribe@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a ciaa...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages