Gracias a la información de los foros de ST, voy entendiendo algunas cosas, y considerando otras que desconocía.
Resumiento, sobre mis últimas dudas:
La dirección de
salto a la aplicación de usuario, debe de ser la
Primera dirección de la aplicación + 4, ya que en la dirección inicial está la Tabla de Vectores, no el código ejecutable. Así que la llamada a la aplicación de usario podría quedar así, donde ApplicationAdress en mi caso estaría en 0x08010000:
pFunction Start = *(__IO uint32_t*) (ApplicationAddress + 4);
__set_MSP(*(__IO uint32_t*)ApplicationAddress);
Start();
En la aplicación de usuario (firmware), además de modificar el
Linker Script para que la
ROM ORIGIN apunte a la dirección 0x08010000, también hay que
añadir esto dentro del main(), para reubicar la Tabla de Vectores (desconozco el porqué, pero hay que hacerlo).
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x10000);
Y cuando uno está de suerte, está de suerte, en los foros de ST, alguien publicó hace 3 años un bootloader para tarjetas SD con un STM32F103VC, no incluye encriptación, y requiere cambiar unas cuantas cosillas para adaptarlo a los STM32F4xx, pero el 80% del trabajo ya está hecho. El enlace de la descarga es este:
http://www.mediafire.com/?2748w3w5kraifsv . Gracias Benjamin
. Y si alguien lo quiere para los pequeñitos SMT32F1xx, pues ya lo tiene al 100%, solo falta añadirle las rutinas de desencriptación y arreando (XTEA, DES, AES...).
Y aquí algunos post interesantes de los foros de ST, sobre estas cuestiones:
Post 1Post 2Post 3