Autor Tema: Bootloader SD card encriptado, para ARM STM32  (Leído 22775 veces)

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

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #15 en: 23 de Febrero de 2015, 21:09:50 »
Citar
The Keil MDK-ARM can be used with the GNU Compiler Collection (GCC). GCC is an open-source development effort with numerous contributors, it is widely available and supports many devices.

http://www.keil.com/arm/gnu.asp

Y la aplicacion para eso:
http://m8051.blogspot.com.ar/2012/10/using-gcc-in-keil-best-of-both-worlds.html
« Última modificación: 23 de Febrero de 2015, 21:14:47 por KILLERJC »

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #16 en: 23 de Febrero de 2015, 22:50:04 »
Citar
The Keil MDK-ARM can be used with the GNU Compiler Collection (GCC). GCC is an open-source development effort with numerous contributors, it is widely available and supports many devices.

http://www.keil.com/arm/gnu.asp

Y la aplicacion para eso:
http://m8051.blogspot.com.ar/2012/10/using-gcc-in-keil-best-of-both-worlds.html


Eso parece interesante, pero ¿ esa combinación de IDE MDK-ARM de Keil con el compilador GCC, tiene limitaciones ?, porque si sigue limitado a 32K no tiene ninguna utilidad, y lo que me parecería raro es que Keil permita que se use su IDE de manera gratuita, combinándolo con otro compilador también gratuito, como es GCC.

Me acabo de descargar de la web de Keil su última versión, la 5.14, y me deja configurar GCC como compilador, voy a ver si consigo algún proyecto que supere los 32K del objeto compilado, a ver si me deja.




Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #17 en: 23 de Febrero de 2015, 22:54:28 »
Yo imagino que si ya que el articulo que pase al ultimo habla de sobre querer superar el limite de los 32kb y que por eso se encaminaba a Coocox, CCS de TI o el Keil con GCC.

Citar
voy a ver si consigo algún proyecto que supere los 32K del objeto compilado, a ver si me deja.

Sino create un proyecto con mucha basura xD, por ejemplo que asigne a un registro un valor y repetilo, sacale las optimizaciones por las dudas que quiera optimizarlo.. es lo unico que se me ocurre.. y si queres algun proyecto medio grande podes buscar los que tiene FreeRTOS se que hay varios ejemplos para ST. Por ejemplo hay un ejemplo que dice:

CORTEX_STM32F107_GCC_Rowley
« Última modificación: 23 de Febrero de 2015, 23:05:22 por KILLERJC »

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #18 en: 23 de Febrero de 2015, 23:12:03 »


Es un poco raro que Keil permita que se use su IDE de manera gratuita, además la versión lite también tiene limitaciones de 32k con el Debug, y eso ya no creo que esté relacionado con el compilador. Tal vez la limitación esté en el proceso de enlazado, en ese caso dará igual usar GCC, los objetos los crearía GCC sin limites, pero el enlazador no permitiría crear un ejecutable mayor de 32k si no pagas la licencia de uso.

Lo probaré a ver que sale, pero no creo que sea tan sencillo.


MDK-ARM Lite Edition

Programs that generate more than 32 Kbytes of code and data will not compile, assemble, or link.
The debugger supports programs that are 32 Kbytes or smaller.
The compiler does not generate a disassembly listing of the machine code generated. The -S, --asm, and --interleave compiler command-line options are disabled. Projects will not compile with Target -> Listing -> C Compiler Listing enabled.
The compiler and assembler do not generate position-independent code or data. The --apcs /ropi /rwpi /pic/ pid compiler and assembler command line options are disabled.
The assembler and linker create Symbolic Output Format objects which cannot be linked with third-party linker utilities. Fully licensed tools generate standard ELF/DWARF files which may be used with third-party utilities.
The linker does not accept scatter-loading description files for sophisticated memory layouts. The --scatter command line option is disabled.



Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #19 en: 24 de Febrero de 2015, 04:06:36 »
no te ha convencido del todo entonces el Emblock?, de todas formas si se puediera utilizar el keil uvision de manera gratuita, sin ninguna limitación no estaria nada mal, esperando tus pruebas y veredictos
Visita mi canal para aprender sobre electrónica y programación:

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

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #20 en: 24 de Febrero de 2015, 04:10:09 »
por cierto KILLERJC, que de que articulo hablas puedes poner un enlace? me interesa lo del ccs de TI tambien
Visita mi canal para aprender sobre electrónica y programación:

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

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #21 en: 24 de Febrero de 2015, 11:21:11 »
no te ha convencido del todo entonces el Emblock?, de todas formas si se puediera utilizar el keil uvision de manera gratuita, sin ninguna limitación no estaria nada mal, esperando tus pruebas y veredictos


EmBlocks de momento es fantástico, cada vez descubro cosas nuevas de los más interesantes, como la posibilidad de guardar un proyecto como Template, para reutilizarlo en proyectos nuevos, o el potentísimo gestor de Scripts que tiene, el producto es MUY BUENO, definitivamente me quedo con EmBlocks para el desarrollo del Bootloader y proyectos futuros.

No parece que haya problema con abrir y compilar proyectos de Keil en EmBlocks, porque si Keil permite usar GCC en su IDE es porque los fuentes son compatibles con ambos compiladores, así tenemos con Emblocks un producto de lo más versátil, que puede abrir proyectos propios, y tambien importar proyectos creados con Coocox o MDK-ARM de Keil.

Lo que estaba probando es lo que comentó KILLERJC, de usar Keil con GCC, más que nada por curiosidad, porque incluso aunque sea posible, el IDE de EmBlocks no tiene nada que envidiarle al de Keil, es más, creo que lo supera con su gestor de Scripts y Templates.

« Última modificación: 24 de Febrero de 2015, 11:26:08 por planeta9999 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #22 en: 24 de Febrero de 2015, 15:01:19 »
por cierto KILLERJC, que de que articulo hablas puedes poner un enlace? me interesa lo del ccs de TI tambien

Del mismo que puse... el segundo link..
Aunque no esta completo el articulo, lo dejaron como que se iba a hacer pronto pero quedo ahi...

Yo de igual manera espero ver los resultados de planeta sobre le keil y el emblocks. Hasta me gustaria tener una plaquita con un ST :)

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #23 en: 24 de Febrero de 2015, 15:19:21 »
Citar
Lo que estaba probando es lo que comentó KILLERJC, de usar Keil con GCC, más que nada por curiosidad, porque incluso aunque sea posible, el IDE de EmBlocks no tiene nada que envidiarle al de Keil, es más, creo que lo supera con su gestor de Scripts y Templates.

Es mas a mi el keil tampoco es que me guste mucho, no facilita mucho las cosas del programador no chiva nada, y tuve una mala experiencia una vez con el keil uvision 4 y un proyecto con el stm32f407, el compilador se tragaba un fallo de código y hasta que encontre el problema....pufff, era un registro del microcontrolador que esta mal en las definiciones que se incluian en el proyecto.
Visita mi canal para aprender sobre electrónica y programación:

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

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #24 en: 25 de Febrero de 2015, 14:46:37 »


He tenido suerte, con la placa de Waveshare me vino un DVD con un montón de ejemplos, entre ellos un proyecto completo para manejar tarjetas SD FAT/FAT32 con las librerías FATFS. Como es de esperar los proyectos de ejemplos, todos para Keil, pero afortunadamente ya he resuelto como importarlos a Emblocks, sin que den un montón de errores en la compilación, ya documentaré eso más adelante con detalle, porque no basta con usar el menú de importación de Emblocks, si se compila así da un capazo de errores.

Básicamente para importar un proyecto de Keil a Emblocks, hay que crear un proyecto limpio en Emblocks, y desde ahí AÑADIR los directorios del proyecto original que contienen las librerías que nos falten, y el main.c, el resto incluido la definición de los parámetros del compilador, linkador, el linker script (stm32f407vg_flash.ld) y el archivo en asembler (startup_stm32f4xx.S) tienen que ser de un proyecto limpio creado en Emblocks, NO valen los del proyecto de Keil.

En cuanto al IDE a usar, definitivamente Emblocks es el mejor con diferencia.

Dejo otra dirección web MUY interesante, para encontrar librerías para los STM32, hay prácticamente de todo, una maravilla:
http://stm32f4-discovery.com/2014/05/all-stm32f429-libraries-at-one-place/
Y un buen tutorial de Emblocks: http://www.emblocks.org/wiki/


Aquí el proyecto con las librerías FATFS, importado de Keil a Emblocks, para gestionar tarjetas SD con FAT/FAT32, y compilado sin problemas, ahora voy a probarlo sobre la placa. Si todo va bíen paso a la gestión de la memoria Flash, para eso también hay un proyecto en el CD de Waveshare, creo que todo va a ir más rápido de lo que pensaba.





« Última modificación: 25 de Febrero de 2015, 17:35:05 por planeta9999 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #25 en: 25 de Febrero de 2015, 14:57:42 »
Excelente. Y que buena suerte la tuya :).

Con respecto a lo que decis si yo pasara del CCS de TI a Eclipse con GCC tambien deberia cambiar todas las definiciones de memoria / startup / vectores, etc.


Pregunta de novato planeta..

En un bootloader basicamente reservas un espacio de memoria flash para el mismo y no tocas esa memoria mientras grabas la otra. imagino que en eso estara el fatfs para manejar la SD etc.
Estoy en lo correcto?

Tambien me encontre que en el micro que tengo de TI (TM4C1294NCPDT) la memoria flash esta "dividida" en 4 bancos asi hay un buffer que toma de a varios bytes ( y usa un LRU ) para seguir la velocidad del micro, puedo borrar de 16kB y escribir 32 palabras de 32bytes a la ves, pero si tengo que escribir en el mismo banco que esta mi bootloader deberia mudar el bootloader a la RAM, y ejecutarla de ahi. Ya que dice que mientras esta grabando se vuelve inacceesible el acceso al banco para otras cosas. Te ocurre algo parecido a vos con el de ST?

Y por ultimo en tu definicion de memoria lo dividis en bootloader y programa a toda la flash o le das una direccion especifica ? por ejemplo definis una seccion llamada bootloader. me explico con el codigo que poseo:

Código: [Seleccionar]
SECTIONS
{
    .intvecs:   > 0x00000000
    .text   :   > FLASH
    .const  :   > FLASH
    .cinit  :   > FLASH
    .pinit  :   > FLASH
    .init_array : > FLASH
    // Aca agregaria un .bootloader : > FLASH

    .vtable :   > 0x20000000
    .data   :   > SRAM
    .bss    :   > SRAM
    .sysmem :   > SRAM
    .stack  :   > SRAM
}

__STACK_TOP = __stack + 512;

Aunque eso signifique poner algo en ASM :/, o como indicas que se almacene en cierto lugar.. me quede con los ORG 0x00 de los pics :/
« Última modificación: 25 de Febrero de 2015, 15:04:36 por KILLERJC »

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #26 en: 25 de Febrero de 2015, 15:34:48 »
he entrado para colgar la pagina de las librerias que has colgado tu y me has adelantado xd, la he encontrado esta mañana en el curro.

el CD que supongo que no esta disponible para descargar por internet verdad?, por cierto, no te vendrá un esquematico con la referencia del joystick que te trae la placa whaveshare? estoy buscando uno para mi proyecto pero todos los que encuentro están obsoletos.


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

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

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #27 en: 25 de Febrero de 2015, 15:58:24 »
Pregunta de novato planeta..

En un bootloader basicamente reservas un espacio de memoria flash para el mismo y no tocas esa memoria mientras grabas la otra. imagino que en eso estara el fatfs para manejar la SD etc.
Estoy en lo correcto?

La clave está en el archivo Linker Script con el que compilas el programa, ahí le dices al enlazador en que dirección debe de empezar a colocar el programa. Eso hay que configurarlo cuando compilas el firmware, no cuando compilas el bootloader. Hay que ver cuanto ocupa el bootloader, cual es la última dirección de flash usada, y coger la primera dirección libre de la siguiente página para compilar el firmware.

Por ejemplo en el linker script que estoy usando para hacer el bootloader, el fichero stm32f407vg_flash.ld, nos encontramos entre muchas otras cosas con esto:

/* Memory Spaces Definitions */
MEMORY
{
    ROM  (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
    RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 128K
  CCRAM (rwx) : ORIGIN = 0x10000000, LENGTH = 64K
}


El parámetro ROM ORIGIN nos está diciendo la primera dirección de la flash donde el enlazador debe de ubicar el programa, en este caso en la  0x08000000, también le dice al enlazador que el tamaño de la flash es de 1024K. Todo esto no lo tocamos para compilar el bootloader, pero si que habrá que tocarlo para compilar el firmware. Por ejemplo si el bootloader ocupa 40960 bytes, en  hexadecimal 0xA000, el firmware tendría que ir al principio de la siguiente página de esa dirección, mirando el mapa de direcciones de la flash, eso sería la dirección 0x0800C000 (Sector o página 3), y el linker script para compilar el firmware quedaría así.

/* Memory Spaces Definitions */
MEMORY
{
    ROM  (rx) : ORIGIN = 0x0800C000, LENGTH = 1024K
    RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 128K
  CCRAM (rwx) : ORIGIN = 0x10000000, LENGTH = 64K
}


Bueno, el tamaño de la flash disponible ya no serían 1024K, sino 1024K menos el tamaño del bootloader.

Citar
Tambien me encontre que en el micro que tengo de TI (TM4C1294NCPDT) la memoria flash esta "dividida" en 4 bancos asi hay un buffer que toma de a varios bytes ( y usa un LRU ) para seguir la velocidad del micro, puedo borrar de 16kB y escribir 32 palabras de 32bytes a la ves, pero si tengo que escribir en el mismo banco que esta mi bootloader deberia mudar el bootloader a la RAM, y ejecutarla de ahi. Ya que dice que mientras esta grabando se vuelve inacceesible el acceso al banco para otras cosas. Te ocurre algo parecido a vos con el de ST?

En un STM32F407 (1Mega de flash), la flash está dividida en 11 SEctores o páginas, y todos no son del mismo tamaño. Nunca escribo o reescribo sobre el bootloader, ni utilizo una página o sector ocupada por el Bootloader, porque si se está ejecutando en ese momento, se quedará bloqueado. Cuando el bootloader graba el firmware, lo hace a partir de la siguiente página o sector libre, y el borrado de la flash también lo hace a partir de la página que ocupa el firmware, el bootloader siempre queda intacto.




Citar
Y por ultimo en tu definicion de memoria lo dividis en bootloader y programa a toda la flash o le das una direccion especifica ? por ejemplo definis una seccion llamada bootloader. me explico con el codigo que poseo:
Aunque eso signifique poner algo en ASM :/, o como indicas que se almacene en cierto lugar.. me quede con los ORG 0x00 de los pics :/

El programa o firmware, como he indicado arriba, va en la primera página libre de la flash una vez cargado el bootloader, y eso se indica en el linker script, cuando compilas, para que el enlazador lo ubique en esa dirección, sino machacaría al propio booloader. No hay que escribir nada en ensamblador.




« Última modificación: 25 de Febrero de 2015, 17:15:02 por planeta9999 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #28 en: 25 de Febrero de 2015, 16:18:57 »
Ahora entiendo.. nunca tuviste que actualizar tu bootloader por alguna razon ?.


Y desde ya gracias planeta...

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Bootloader SD card encriptado, para ARM STM32
« Respuesta #29 en: 25 de Febrero de 2015, 16:36:27 »
el CD que supongo que no esta disponible para descargar por internet verdad?, por cierto, no te vendrá un esquematico con la referencia del joystick que te trae la placa whaveshare? estoy buscando uno para mi proyecto pero todos los que encuentro están obsoletos.



El CD, es realmente un DVD con casi 4Gb de información, tutoriales, esquemas, datasheet, y ejemplos.
He sacado los programas ejemplo para todos los F407, y los he colgado en Mega, en un RAR que ocupa 180 megas. Hay más ejemplos para otros STM32 F1, F2, F3.
El esquema está, pero no pone la referencia del joystick.

Ahí van los enlaces, para las descargas de Mega:
Esquema Waveshare Open407V-D
Proyectos Ejemplo para STM32F407
« Última modificación: 25 de Febrero de 2015, 17:27:30 por planeta9999 »


 

anything