Autor Tema: Bootloader (flash) por usb en Kinetis K2  (Leído 3986 veces)

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

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Bootloader (flash) por usb en Kinetis K2
« en: 18 de Noviembre de 2015, 16:02:36 »
Hola,

estoy empezando con un proyecto sencillito con kinetis (MK22FN512VLH12): es mi primera experiencia con esta familia.

He visto que estos micros llevan un bootloader de fábrica en la flash (otros en ROM). Mi duda es ¿como se comporta el bootloader por usb?. Es decir: ¿tienes que activar algún gpio para que el bootloader se quede a la espera de que le envién el firmware a reprogramar o simplemente con conectándolo a un PC el bootloader se queda esperando?. Lo digo porque mi aplicación va a llevar un usb esclavo (cdc) y me da miedo que cada vez que enchufe la placa al PC esta se quede en el bootloader en vez de saltar al firmware.

La cosa es que para desarrollar/depurar el firmware utilizaré un programador (no sé si es mejor OpenSDA o Jtag), pero me gustaría que para programar el firmware final se hiciese desde el bootloader y así el cliente lo tiene mucho más sencillo.

Gracias.
Saludos.
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Bootloader (flash) por usb en Kinetis K2
« Respuesta #1 en: 18 de Noviembre de 2015, 17:36:17 »
Hola manu, donde has visto lo del bootloader de fábrica? Puedes pasarnos el documento para echarle un vistazo?


Es que puede ser que sea por uart, por msd, por cdc ect...
Incluso puede que lo que tenga sea un espacio reservado en la memoria para el bootloader y eres tu el que lo tiene que poner.

De todas formas ningún bootloader se inicia automáticamente, o por lo menos no debe.

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

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

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Bootloader (flash) por usb en Kinetis K2
« Respuesta #3 en: 18 de Noviembre de 2015, 18:32:37 »
Hola manu, lo he visto por encima solo porque estoy reinstalando el sistema operativo y desde el móvil es un coñazo y no puedo descargarme los códigos.

Pero tiene toda la pinta, que te lo venden así para que te ahorres el programador.
La primera vez que lo conectes por cdc, se va a meter en modo bootloader, y en cuanto le metas un programa con el linker apuntando a otra dirección, no volverá a entrar ahí, o lo sobreescribes, por lo tanto la primera vez entrara, luego ya hará dependiendo de lo que tu le metas, si bootloader o programa y punto.

Lo he mirado sólo por encima, así que no estoy seguro, luego lo miro mejor cuando tenga PC

Un saludo
« Última modificación: 18 de Noviembre de 2015, 19:35:01 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:Bootloader (flash) por usb en Kinetis K2
« Respuesta #4 en: 18 de Noviembre de 2015, 19:25:26 »
hola manu te lo confirmo:

ese bootloader es para que lo puedas programar por primera vez sin ningún programador externo.
Imagina: si tu quieres programar un micro con un bootloader, la primera vez necesitas de un programador externo para cargar el bootloader, y a partir de entonces ya puedes programar por bootloader con alguna técnica (por ejemplo mantener un pulsador y dar alimentación)

este kinetis, te permite hacer eso sin un programador externo.

Citar
me da miedo que cada vez que enchufe la placa al PC esta se quede en el bootloader en vez de saltar al firmware.

por esto no te preocupes, en cuanto lo programes por primera vez, vas a sobrescribir este bootloader y ya nunca mas volverá a entrar en él, es decir solo sirve para una vez:

Citar
After the user application is programmed into flash memory, the Kinetis flashloader is no longer available.

si lo quieres recuperar necesitaras de un programador externo y restaurarlo con el bootloader de fabrica (ya que los has pisado con tu programa):

Citar
Developers creating a manufacturing flow for their hardware and software implementations may find it necessary to restore
the Kinetis flashloader such that the device works as it did from the Freescale factory. To accomplish this, use an external
debugger to program the flashloader_loader.bin
file included in this package to the Kinetis on-chip flash. The exact method
for doing this varies depending on hardware design and available tools.

para tu aplicación, necesitas crear tu propio bootloader por USB-CDC, USB-HID, UART,... (o por el método que quieras) y ponerle una condición de entrada (la típica suele ser hacerle un reset o darle alimentación con un pulsador pulsado).

este bootloader que trae de fabrica no te sirve de nada a ti, bueno te sirve para cargar tu software por primera vez sin coger el programador, pero creo que eso no te sirve de mucho a ti.

la primera vez que lo enciedas con el usb conectado, no necesitaras ninguna condición, entrara directamente a modo bootloader esperando tu software y una vez lo programes se acabo ese bootloader.


La verdad es que es buena idea, la gente no necesitaria comprarse ninguna programadora (si no necesitas debug) compras el micro y con el bootloader que trae de fabrica, le programas tu propio bootloader con la condición que quieras y ala, ya tienes una plataforma que puedes programar todas las veces que quieras.

No había visto esto nunca, es el primer micro que veo que trae un bootloader de fabrica, cada vez me gusta mas freescale  :D :D :-/.


por otra parte pone:

Citar
The bootloader is delivered in two ways: as full source code that is highly configurable; or pre-programmed by Freescale into ROM or flash on select Kinetis devices. Host-side command line and GUI tools are available to communicate with the bootloader. Users can utilize host tools to upload/download application code via the bootloader.

Tienes el código fuente y lo tendrás que modificar a tu gusto y para tu aplicación, y si no es muy complicado, tienes casi todo el trabajo hecho en lo referente a la creación del bootloader.

espero que tus dudas se hayan aclarado.

un saludo
« Última modificación: 18 de Noviembre de 2015, 19:46:07 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

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


Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:Bootloader (flash) por usb en Kinetis K2
« Respuesta #6 en: 19 de Noviembre de 2015, 05:15:20 »
Gracias a los dos.

Juanjo: ¿cómo que en mi caso no vale?. Si yo diseño el firmware con una placa y luego tengo claro que quiero ese firmware (lleve bootloader o no), entiendo que me sirve para programar el proyecto final sin necesidad de programador, valga la redundancia, en todas las placas finales. ¿me equivoco?.

Por cierto, 3 cositas más:

1. ¿qué me recomendais, jtag u openSDA para depurar? He visto que de hay varias versiones de openSDA y me lio.
2. ¿Habrá fuses para que no me puedan leer el hexadecimal, no?. ¿Esos los puede programar el bootloader o necesito un programador?
3. Sobre USB. He visto que no hay pin de Vbus, ni de OTG: ¿va todo por firmware?. También he visto que el micro lleva un regulador interno de 5V a 3.3V que sirve para alimentar la PHY de USB y/o el micro entero (supongo que dependerá de la carga del micro). ¿Me equivoco?. Yo le he puesto un jumper por si acaso me puedo ahorrar el LDO externo...


Saludos!
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Bootloader (flash) por usb en Kinetis K2
« Respuesta #7 en: 19 de Noviembre de 2015, 06:31:54 »
De nuevo no tengo el ordenador delante, te respondo a lo que pueda y luego te confirmo:

Citar
Juanjo: ¿cómo que en mi caso no vale?. Si yo diseño el firmware con una placa y luego tengo claro que quiero ese firmware (lleve bootloader o no), entiendo que me sirve para programar el proyecto final sin necesidad de programador, valga la redundancia, en todas las placas finales. ¿me equivoco?.

Si, para si que te sirve, me refería a que no podrías usarlo como bootloader propio, pero para eso que comentas si que te sirve.

Citar
1. ¿qué me recomendais, jtag u openSDA para depurar? He visto que de hay varias versiones de openSDA y me lio.

Pues es casi como preguntar, que uso pickit3 o la icd3? openSDA, si no me equivoco es un SDW, yo usaría ese, es lo mismo con menos hilos.

Citar
2. ¿Habrá fuses para que no me puedan leer el hexadecimal, no?. ¿Esos los puede programar el bootloader o necesito un programador?

Sería el primer microcontrolador que no los tuviera,   :? :?
Y si los tiene, si, se pueden programar desde el bootloader.

Citar
3. Sobre USB. He visto que no hay pin de Vbus, ni de OTG: ¿va todo por firmware?. También he visto que el micro lleva un regulador interno de 5V a 3.3V que sirve para alimentar la PHY de USB y/o el micro entero (supongo que dependerá de la carga del micro). ¿Me equivoco?. Yo le he puesto un jumper por si acaso me puedo ahorrar el LDO externo...


Saludos!

Eso, si no te lo contesta nadie antes, te lo miro cuando tenga el ordenador delante,

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:Bootloader (flash) por usb en Kinetis K2
« Respuesta #8 en: 19 de Noviembre de 2015, 06:41:01 »
Citar
3. Sobre USB. He visto que no hay pin de Vbus, ni de OTG: ¿va todo por firmware?. También he visto que el micro lleva un regulador interno de 5V a 3.3V que sirve para alimentar la PHY de USB y/o el micro entero (supongo que dependerá de la carga del micro). ¿Me equivoco?. Yo le he puesto un jumper por si acaso me puedo ahorrar el LDO externo...


Saludos!

De todas formas, yo te recomendaría que vieras esto en el esquemático de la freedom, ahi el USB esta bien puesto y con todos sus pines y eso seguro que esta bien y así no te equicocas.

Lo del regulador interno, puede ser porque tenga pines compatibles a 5 voltios, pero cuidado que dudo que sean todos, y también dudo que den salidas a 5 voltios.

Quizá el pin de Vbus, es remapeable, y por eso no te aparece en los pines.

Lo dicho cuando tenga un PC delante te lo confirmo.

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

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

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:Bootloader (flash) por usb en Kinetis K2
« Respuesta #9 en: 19 de Noviembre de 2015, 08:27:55 »
Juanjo,

no me refiero a pines compatibles con 5V. Me refiero a que lleva un LDO interno para que no tengas que poner tu uno externo:

Up to 5 V regulator input typically provided by USB VBUS power with 3.3 V
regulated output that powers on-chip USB subsystem, capable of sourcing 120 mA
to external board components.


Lo que no tengo claro es si con los 120mA te da para alimentar el micro entero a 120Mhz. Por eso he puesto un jumper (R0805) para probar. Voy a poner también una resistencia de 0.01ohm para sensar la corriente y si no pasa de 120mA alimento desde el LDO interno y le pongo otro jumper en vez de la de 0.01ohm. El datasheet me dice que Idd max es 169mA (la parte analógica no la cuento porque no voy a utilizar ADC). Habrá que ver lo que consume el micro + la PHY de USB a 120Mhz: todo es probar.

Al final me dice el cliente que sí que necesita un nuevo bootloader. Lo que no me convence es lo de poner un switch para ver por dónde se arranca. Espero que se pueda modificar el bootloader para que según lo que se le envíe desde el PC haga una cosa u otra...

¿Estás seguro de que los fuses se pueden programar desde bootloader, no lo veo en el manual?

Saludos,






Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Bootloader (flash) por usb en Kinetis K2
« Respuesta #10 en: 19 de Noviembre de 2015, 08:43:37 »
bueno, en la Freedom tenemos esto:


* USB.png
(120.54 kB, 1062x509 - visto 360 veces)


El dispositivo NCP380 suele ser el típico que se utiliza para USB-OTG.

si colocamos el jumper J22, cerramos el mosfet y solo tendriamos USB HOST, poniendo el ID a la misma tensión que Vbus en el ID del USB

el pin que indica que hay algún problema en el dispositivo conectado (esta demandando mas intensidad de la cuenta) es FLAG que va al pin numero 43 que como vemos se puede remapear a USB_SOF_OUT (que supongo que sera utilizado por las librerias de USB de freescale para detectar un problema).


* USB2.png
(8.06 kB, 841x52 - visto 341 veces)


la tensión Vbus, que debe coincidir con la tensión OUT del dispositivo NCP380:


* USB3.png
(12.98 kB, 562x229 - visto 382 veces)


Esta puesta en el pin numero 8, que ese es tu pin Vbus, solo que en kinetis lo llaman VREGIN (USB regulator input)


* USB4.png
(46.87 kB, 837x299 - visto 356 veces)


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:Bootloader (flash) por usb en Kinetis K2
« Respuesta #11 en: 19 de Noviembre de 2015, 08:50:49 »
hemos escrito los dos al mismo tiempo:

Citar
¿Estás seguro de que los fuses se pueden programar desde bootloader, no lo veo en el manual?

un bootloader es un programa cualquiera solo que se carga a una direccion de memoria distinta para no borrar el bootloader, es lo único que cambia, por lo tanto no veo cual es el problema de cambiar los fuses.

quizá hay algún requirimiento, como por ejemplo existe en algun pic32 que te dice que los fuses deben ser iguales en el programa bootloader y el software programado o los fuses los tienes que poner en el bootloader solo y no en el del software programado, pero nada que no se pueda solucionar, o lo pones en los dos sitios o solo en uno.

tu piensa que lo que le quieres meter por bootloader es un software como otro cualquiera, no cambia nada, excepto la dirección donde se guarda el programa.

en cuanto a esto:

Citar
Up to 5 V regulator input typically provided by USB VBUS power with 3.3 V
regulated output that powers on-chip USB subsystem, capable of sourcing 120 mA
to external board components.

creo que es para alimentar componentes externos desde el usb, es decir, por ejemplo si le poner un pendrive, es recomentado alimentarlo con al menos 100mA, pues gracias a esto te ofrece 120 para alimentar el pendrive o lo que le conectes al usb host, pero nunca mas de eso.

es decir, siguiendo el ejemplo de antes para ahorrarte el NCP380. pero de eso no estoy seguro pero me suena a eso, mas que a alimentar el micro con 5 voltios directamente.

un saludo
« Última modificación: 19 de Noviembre de 2015, 09:12:44 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:Bootloader (flash) por usb en Kinetis K2
« Respuesta #12 en: 19 de Noviembre de 2015, 09:05:23 »
Eso que me comentas para alimentar el micro con un regulador interno no me cuadra, creo que es para dispositivos externos como te he dicho antes, pero no estoy seguro.

si miramos la freedom tenemos:


* Alimentacion.png
(58.62 kB, 1275x252 - visto 342 veces)


como ves toda alimentación de 5voltios pasa por el regulador para bajarla a 3v3 y el jumper J15 da alimentación al micro (P3v3_K22F) no veo alimentación directa de 5 voltios sobre el micro.

Como te digo creo que es mas bien para ahorrase un dispositivo para alimentar desde el USB (el NCP380) un dispositivo externo, y el LDO interno es para bajar los 5V, que le pongas a VREGIN a 3v3, es decir, eso de lo que hablas serviría para alimentar por ejemplo, un pendrive con 3,3V hasta 120mA a través del microcontrolador, puedo estar equivocado por supuesto.

un saludo.
« Última modificación: 19 de Noviembre de 2015, 09:09:48 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

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

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:Bootloader (flash) por usb en Kinetis K2
« Respuesta #13 en: 19 de Noviembre de 2015, 09:57:52 »
Cuanta info....

A ver de USB esta es la tabla:

Chip signal name Module signal
name
Description I/O
USB0_DM usb_dm USB D- analog data signal on the USB bus. I/O
USB0_DP usb_dp USB D+ analog data signal on the USB bus. I/O
USB_CLKIN — Alternate USB clock input I
USB_SOF_OUT — USB start of frame signal. Can be used to make the USB start of
frame available for external synchronization.
O


Por lo que me da a mí que no hace falta ni pin de Vbus ni pin de otg: todo software. Mejor porque yo voy a esclavo.

En cuanto a lo del bootloader: tendrás 100% razón. Hace tanto tiempo que no toco PICs que se me olvidaba que se pueden poner en el código (de hecho yo siempre lo hacía así).

En cuanto a lo de los 5V. Esto es lo que dice el RM:

3.9.1.2 USB Power Distribution
This chip includes an internal 5 V to 3.3 V USB regulator that powers the USB
transceiver or the MCU (depending on the application).


Por eso sobreentendí que también te vale para alimentar el propio micro.

Juanjo, no le des más vueltas: ya me apaño yo sólo. Muchas gracias y sigue estudiando.
Un abrazo!
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Bootloader (flash) por usb en Kinetis K2
« Respuesta #14 en: 19 de Noviembre de 2015, 10:07:25 »
Citar
  USB Power Distribution
This chip includes an internal 5 V to 3.3 V USB regulator that powers the USB
transceiver or the MCU (depending on the application).

La verdad es que eso da a enterder lo que tu dices, quizá si que exista alguna manera de hacerlo, pero la verdad es que no se como puede ir eso, supongo que habría que probarlo, o si existe alguien que lo haya probado que lo diga :D

Si vas a esclavo, pasa 3 kilos del ID y esas cosas mucho mas fácil que usar el OTG no?

Citar
Juanjo, no le des más vueltas: ya me apaño yo sólo. Muchas gracias y sigue estudiando.

No te preocupes lo hago en mis ratos libres y así desconecto, porque lo que tengo que estudiar no es nada relacionado con la electronica :(

Además a mi también me interesa aprender de esto, ya que voy a migrar a freescale.

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

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


 

anything