Autor Tema: bug grave en PIC32MX2xx  (Leído 3886 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
bug grave en PIC32MX2xx
« en: 20 de Mayo de 2015, 11:23:46 »
Bueno nuevo bug para la colección de microchip, y no uno pequeño, uno muy grave,

si utilizas la uart 1 por interrupcion, olvidate de usar la memoria flash, ya que en cuanto utilizas la función de borrado de pagina, la UART muere hasta que no hagas un reset por hardware, olvidate de volver a configurarla, ni por librerías ni directamente por registros, el flag de interrupción nunca mas vuelve a ponerse a uno, recibas lo que recibas por la uart, y por mucho que lo configures no vuelve ha arrancar hasta que no lo reinicies, y funcionara hasta que vuelvas a usar otra vez un borrado de pagina.


Es curioso ya que el micro cuenta con 44 vectores de interrupción y las demás interrupciones no parecen verse afectadas por eso, los timer y demás interrupciones siguen funcionando sin problemas.

Un saludo.

PD: cada vez mas decepcionado con microchip. No pienso empezar ningún nuevo diseño mas con pic32.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: bug grave en PIC32MX2xx
« Respuesta #1 en: 20 de Mayo de 2015, 13:17:27 »
"PD: cada vez mas decepcionado con microchip. No pienso empezar ningún nuevo diseño mas con pic32."

bueno, veo que de a poco algunos se van dando cuenta....
-
Leonardo Garberoglio

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: bug grave en PIC32MX2xx
« Respuesta #2 en: 20 de Mayo de 2015, 13:24:42 »
Yo llego hasta PIC24 y DSPic, ni pienso meterme con los PIC32...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re: bug grave en PIC32MX2xx
« Respuesta #3 en: 20 de Mayo de 2015, 13:31:41 »
Citar
bueno, veo que de a poco algunos se van dando cuenta....

no me he dado cuenta ahora, llevo denunciandolo desde que entre en el foro  :( cuando me pase a los microcontroladores de ARM ya empece a usar los PIC32 poco y cuando empece con los procesadores de freescale, menos todavia, pero los seguia usandolos para los proyectos simples por su facilidad de uso y programación, ya que tengo mucha destreza con estos micros, y los desarrollos software los hacia muy rapido, hasta hice un "OS en tiempo real" para los PIC32 (lo llame JJOS  :D), pero esto ya es de cachondeo..... ha llegado el punto que ya no soporto los bug y las malas artes de microchip con los compiladores que cada vez comen mas menoria.


a tomar por saco, paso ya de usarlos.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: bug grave en PIC32MX2xx
« Respuesta #4 en: 20 de Mayo de 2015, 16:30:16 »
Hola

En la errata del PIC32MX2XX figura esto:

http://ww1.microchip.com/downloads/en/DeviceDoc/80000531F.pdf

Citar
UART Synchronization
19.
On a RX FIFO overflow, shift registers stop receiving data,
which causes the UART to lose synchronization.

¿Te son de utilidad los 2 workarounds que ofrece la errata?

Saludos.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re: bug grave en PIC32MX2xx
« Respuesta #5 en: 20 de Mayo de 2015, 16:47:53 »
Buenas migsantigo,

Lo primero gracias por tu preocupación, si me ayuda, no se exactamente si es lo que me pasa, ya que no me ocurre por un overflow, me pasa siempre que borro una pagina de la memoria para escribirla.

de todas formas quizá me sirva de ayuda para corregirlo aunque lo dudo, ya que por mas que vuelvo a configurar la UART no vuelve a responder y me parece un poco chapuza hacer varias tandas de ON OFF a ver si funciona, vaya solocion ofrece microchip, lo del checksum es imposible, ya que no llegan nunca interrupciones ni datos, no es que lleguen los datos incorrectos, es que el flag que indica que hay una interrupcion o que ha llegado un dato nunca mas vuelve a ser escrito, cuando borras una pagina de la flash :S

de todas formas mañana probare y te comento.

muchas gracias y un saludo.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: bug grave en PIC32MX2xx
« Respuesta #6 en: 20 de Mayo de 2015, 21:48:33 »
Confirma la causa raíz mejor.

Prueba otra interrupción cuando hagas eso. Puede que el problema sea otro... hay que desconfiar de Microchip... pero con la razón en las manos.  ;-)

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re: bug grave en PIC32MX2xx
« Respuesta #7 en: 21 de Mayo de 2015, 02:19:51 »
No migsantiago, quizá no me he explicado bien

No he acusado sin razón, se cual es la causa, es simple, cuando se borra una pagina de memoria, la UART 1 muere,  esa es la causa, el borrado de memoria, el porque me lo debe decir microchip,  claro que he probado otra interrupción y solo afecta a la uart, he hecho varios programas y el resultado siempre es el mismo, he usado otro prototipo por si el micro estaba mal, le he pedido a un compañero que me lo confirme y me lo ha confirmado, he avisado al servicio técnico y esta consultando a microchips directamente con los ejemplos, lo único que me han dicho es que van a estudiar la causa y me contestan.

Esto es una imperdonable ya que le va a hacer perder mucho dinero a la compañía, y tiempo, ahora solo puedo rezar para poder hacer algo por software o rediseñar todo.

Pasen las librerías malas, pasen los documentos llenos de erratas, pero este tipo de fallos es imperdonable ya que cuestan el dinero, debido al tiempo que se pierde al tener que arreglar estas cosas. Por mi parte PIC32 ha muerto para nuevos diseños (por lo menos mios propios)la empresa que haga lo que quiera  :D.

Un saludo
« Última modificación: 21 de Mayo de 2015, 03:14:46 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re: bug grave en PIC32MX2xx
« Respuesta #8 en: 21 de Mayo de 2015, 03:12:11 »
Bueno migsantiago, lo que me has pasado me ha ayudado pero hay que hacer algo mas, pongo lo que hay que hacer por si a alguien le puede ayudar.


1º Bajar todas las interrupciones por debajo de la interrupción de la UART, en el caso de que se necesite una interrupcion mas prioritaria...te fastidias. (por cierto, para el que no lo sepa en PIC32 la interrupcion mas alta es la 7 no la 0).
2º Olvidarse de mirar los registros, y comprobaciones a traves de las librerías.
3º Checkear el flag de interrupción por pulling en el while(1), nada de poner una función de interrupción.

por lo tanto me lleva a pensar en que es un problema parecido al que dice la errata de overflow, pero no que pierda la sincronización, si no que no vuelve a entrar en la interrupción.

de esta manera, se evita que ocurra el error, si el error llega a suceder, no funciona ni siquiera haciendo una tanda de ON/OFF de la UART como dice la errata.

Un saludo, y gracias migsantiago.

Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: bug grave en PIC32MX2xx
« Respuesta #9 en: 21 de Mayo de 2015, 13:00:00 »
No he acusado sin razón, se cual es la causa, es simple, cuando se borra una pagina de memoria, la UART 1 muere,  esa es la causa, el borrado de memoria, el porque me lo debe decir microchip,  claro que he probado otra interrupción y solo afecta a la uart, he hecho varios programas y el resultado siempre es el mismo, he usado otro prototipo por si el micro estaba mal, le he pedido a un compañero que me lo confirme y me lo ha confirmado, he avisado al servicio técnico y esta consultando a microchips directamente con los ejemplos, lo único que me han dicho es que van a estudiar la causa y me contestan.

Perfecto. Ya habiendo probado pues está confirmado. Qué mala suerte.

Ya en proyectos nuevos me está interesando la familia Kinetis... no he podido estrenarla  :( Tal vez ahí está el perfecto reemplazo a los PIC32. Kinetis ya opera a 32 bits desde los modelos más sencillos.

Por nuestra cuenta... estamos viendo si el PIC32MZ que nos quedó mal sea reemplazado por un Kinetis. Yo escogí el PIC32MZ por rápido y por sus 6 SPIs simultáneos... pero pues el cristal y los SPIs son lo primero que falló.

Un error no haber visitado la errata al elegirlo. Me dejé llevar por el prestigio de Microchip con sus otras familias.

Pero ya aprendimos.  :mrgreen:

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re: bug grave en PIC32MX2xx
« Respuesta #10 en: 21 de Mayo de 2015, 14:06:40 »
Antes de nada cambiar mi post anterior, despues de haberlo probado para reducir aun mas los fallos:

1º Bajar todas las interrupciones por debajo de la interrupción de la UART, en el caso de que se necesite una interrupcion mas prioritaria...te fastidias.Es obligatorio poner la prioridad numero 7 a la interrupcion de la UART, en la funcion de interrupcion te sera imposible poner que mire el vector de la UART con prioridad 7, por eso debes de desactivar la interrupcion de la UART. ( si si no estoy loco, hay que darle prioridad maxima pero no activar la interrupcion).
2º Olvidarse de mirar los registros y comprobaciones a traves de las librerías o definiciones del PIC, hay que mirar los registros a pelo.
3º Checkear el flag de interrupción por pulling en el while(1), nada de poner una función de interrupción.
4º Cada vez que se borre una pagina de memoria, las dos lineas siguientes deben ser, un DISABLE UART, y un ENABLE UART.


Esto esta ya puesto en conocimiento de microchip.

Citar
Ya en proyectos nuevos me está interesando la familia Kinetis

buena opción migsantiago, no te vas a arrepentir si usas estos micros son muy buenos, ademas freescale te ofrece un IDE gratuito para la familia kinetis, la documentacion de la mejor (si no la mejor de todos los fabricantes).

y los perifericos estan en la mayoria de los casos muy por encima de sus competidores, flexCAN, adc de 16 bits, PGA, control de DDR....

muy buena opción. Lo unico que hecho en falta es una herramienta de programacion propia de freescale para no recurrir a un tercero.

Yo tambien estoy pensando en migrar a kinetis para los microcontroladores.

voy a abrir otro post con las erratas que he encontrado en otro aparato de microchip el MCP39F501 para que otra persona no tenga que darse tantos cabezazos como yo con este IC

un saludo.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re: bug grave en PIC32MX2xx
« Respuesta #11 en: 29 de Julio de 2015, 10:03:40 »
Hace un tiempo, publique una solución para esta "cagad.." bug de microchip.

Pero no dejaba de ser un apaño chapucero.

Bueno ahOra ya tenemos otra solución, para mi no, porque paso de usar de nuevo un pic32 en un diseño, en todos los que lo he usado me han dado problemas de bug, pero bueno lo dejo aquí por que seguro que a alguien le viene bien.

Ya no hace falta hacer la solución que puse hace un tiempo, ahora simplemente cambia el micro por la nueva versión A2 donde el bug ha sido arreglado. Ya se puede usar la UART por interrupción y la memoria flash en el mismo programa.

Ya sabéis, si OS venden un A1 de esta familia lo tirais a la basura o lo devolveis, o lo que querais...pero no lo uséis.

Un saludo.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw


 

anything