2017-08-18 2 views
0

Maintenant, j'essaie de comprendre la séquence de démarrage de STM32F103x. Comme vous le savez déjà, ceci est basé sur le cortex-m3. Donc j'essayais de trouver ce concept de démarrage tel que STM32F103x .. Mais je ne trouve nulle part dans le document Où puis-je trouver la séquence de démarrage comme STM32 sur ARM memory map? Parce que je veux savoir ce que fonctionne réellement la mémoire système?Qu'est-ce que la mémoire système fonctionne réellement dans STM32F103 sur la carte mémoire ARM?

Actuellement. J'essaie de comprendre la mémoire système dans la carte d'adressage cortex m3. la plupart des exemples sont dit « il y a 2 région comme 0x08000000 zone de mémoire Flash et zone de mémoire 0x1FFFF000 système.

et je compris que la zone de mémoire flash épargne pour le fichier exécuter et de la mémoire système sauvegarde pour bootloader.

par exemple, je peux faire un fichier binaire hexadécimal de build qui utilise startup_CMSDK_CM3.s et startup_CMSDK_CM3.c dans Keil uVision Ensuite, je mets un fichier binaire hexadécimal dans le MCU STM32 en utilisant JTEG à 0x0800_0000 de la zone de mémoire flash pas la mémoire système Je ne suis pas sûr de la différence entre la mémoire système d'une mémoire flash et je veux savoir "Qu'est-ce que la mémoire système et la zone a ctually work? "

+1

Oublier la mémoire du système. C'est la zone avec le bootloader d'usine. Pour vous suffit juste de vous rappeler que vous pouvez démarrer en mode bootloader, et flasher votre programme. Tout le reste c'est trop tôt pour vous je suppose. –

Répondre

1

Si vous lisez les documents de bras, vous verrez où se trouve la table de vecteurs et quel est le contenu. le strict minimum est à l'adresse 0x00000004 vous avez besoin du (pouce) ADDRESS du gestionnaire de réinitialisation. Si vous lisez les documents stm32, vous verrez que sur la base des broches de démarrage, diverses choses se produisent, le cas d'utilisation typique est 0x08000000 qui est le flash qui contient votre programme, est mappé à 0x00000000. Vous pouvez choisir de lier pour 0x00000000 ou vous pouvez choisir de lier pour 0x08000000 comme le font la plupart des gens, l'adresse (pouce) au décalage 0x00000004 (et 0x00000008 et ainsi de suite) pointerait alors quelque part dans 0x08000000. La mémoire est juste pour lire des choses d'écriture, des instructions, .text, est en lecture seule, vous n'avez pas besoin d'écrire, et pour un microcontrôleur, vous avez besoin de l'application pour être en stockage non volatile, et ils sont conçus pour le flash (ces jours-ci ce n'est pas une bonne idée, sauf pour but flash construit comme ceux-ci).

Donc, votre programme .text et toutes les autres données en lecture seule vont en flash. Tout fichier .data que vous avez est conservé en flash mais le bootstrap le copie en RAM et les zéros bootstrap .bss, puis une fois démarré et dans votre point d'entrée en C (souvent main() mais ce n'est qu'un nom de fonction arbitraire) cas est votre programme est en lecture seule flash et vos données sont en lecture/écriture ram. Comme cela devrait être.

Accordé en tant que programmeur vous êtes responsable de tout ce qui précède, la table de vecteur, le bootstrap, la liaison, ainsi que l'écriture du programme pour faire les choses. Le schéma de démarrage de cortex-m est très typique, les deux les plus communs sont juste exécutés à une certaine adresse, ou ont une table de vecteur d'adresses où vivent les gestionnaires. Les bras de taille complète sont l'exécution de cette adresse, les cortex-m sont une liste d'adresses, une table de vecteur. Lorsque vous lisez sur un nxp ou un atmel samd ou d'autres implémentations de cortex-ms, vous trouverez qu'ils placent tous votre flash dans l'espace de démarrage comme ils le devraient, mais peuvent le faire de différentes façons. Certains ont des chargeurs d'amorçage d'usine qui peuvent être invoqués de diverses manières et le noyau ne change pas comme par magie, ils mappent simplement le chargeur de démarrage d'usine dans l'espace d'adressage nul du cortex-m.

son tout là dans le bras et st et nxp et atmel et d'autres documents.

EDIT

mémoire système

est pour vos données, lecture/articles d'écriture, des variables, des structures de données qui changent, etc. si vous choisissez de ne pas utiliser le déjà construit dans bootloader, vous pouvez choisir d'écrire votre propre Dans le cadre de votre application et en tant que bootloader vous êtes les bienvenus et en fait vous devez télécharger le nouveau programme en RAM, mais cela ne veut pas dire que vous devez le lancer à partir de là (vous pouvez malgré le mot harvard) ou plus il est probable que vous l'utilisiez simplement comme zone d'attente pour le brûler pour clignoter. Le but typique d'un microcontrôleur est d'exécuter le firmware sur flash et d'utiliser sram pour toutes les données de lecture/écriture qui peuvent changer. Radio-réveil, grille-pain, télécommandes et une myriade d'autres choses.

2

old_timer réponse est bonne, donc j'élaborer un peu plus sur la partie STM32:

De là, nous pouvons voir les différentes broches de démarrage pour STM32:

https://electronics.stackexchange.com/questions/206521/how-to-use-external-st-link-to-debug-program-stm32f103-mcu

enter image description here

Le bootloader pour STM32 La mémoire système est décrite en profondeur ici:

http://www.st.com/content/ccc/resource/technical/document/application_note/b9/9b/16/3a/12/1e/40/0c/CD00167594.pdf/files/CD00167594.pdf/jcr:content/translations/en.CD00167594.pdf

En particulier l'emplacement du firmware du bootloader (pour STM32F1xxx, à la page 54):

enter image description here

Et la séquence de démarrage (page 55):

enter image description here

Et ceci est l'implémentation du bootloader dans Mémoire flash Mode (F103):

http://blog.myelectronics.com.ua/stm32-usb-mass-storage-bootloader/

Et je trouve cela utile (début 1.40):

https://www.youtube.com/watch?v=3brOzLJmeek

enter image description here

+0

Merci de m'avoir informé à ce sujet. –