2010-08-10 25 views
7

Sur le STM32F103, l'effacement d'une page flash prend 20ms durant lesquels le core se bloque pour moi. Le manuel de programmation du flash ST PM00042 n'indique pas clairement si le noyau bloquera toujours lors de l'effacement d'une page flash ou si elle s'arrête simplement parce que le flux d'instructions est lui-même en mémoire flash (dans mon projet) et le FPEC) est occupé et ne peut pas aller chercher plus d'instructions.Est-ce que le noyau STM32F103 de Cortex-M3 bloque pendant l'effacement d'une page flash parce que le FPEC est occupé et ne peut plus extraire d'instructions du flash?

Une autre façon de poser cette question est: "est-ce que l'exécution de mon code de programmation flash à partir de la RAM évite le décrochage de la page flash?".

Merci,

Répondre

6

je crois que pendant la programmation flash, toute tentative d'accès à clignoter calera la CPU. Donc, ce que vous voulez faire est de vous assurer que le code critique (peut-être des gestionnaires d'interruption, watchdog kicker, etc) peut être à court de RAM pendant une opération de programme. La dernière fois que j'ai utilisé le STM32 (probablement ~ 2 ans), c'est exactement ce que j'ai fait.

Donc, juste pour être clair, pour répondre à la question à la fin de votre message:

Une autre façon de poser cette question est « serait en cours d'exécution ma programmation flash le code de RAM éviter la page flash effacement de décrochage? ".

Je crois que la réponse est "non". Peu importe où se trouve le pilote de programmation Flash, ce qui compte, c'est ce que fait votre code alors que l'opération d'effacement/programme est en cours. Si la CPU essaye d'accéder au flash pendant une opération, même pour lire les instructions pour votre programme ou lire une table de constantes, je crois qu'elle va caler.

Je sais pertinemment que c'est ainsi que fonctionne le flash NXP sur leurs uMs ARM, mais je voulais aussi citer le verset & pour le STM32. Pour une raison quelconque, le manuel de programmation flash semble être disponible pour le moment, mais je trouve la langue suivante dans un document similaire (PM0068, je crois):

Une opération de mémoire Flash en cours ne bloque pas la CPU tant car la CPU n'a pas accès à la mémoire flash.

et

Si une opération de lecture/écriture [à flash] est initiée lors de la programmation, (BSY bit set), les stalles du CPU jusqu'à ce que la principale programmation de la mémoire Flash en cours est terminée.

+0

Génial, merci. Ce que je fais en ce moment est d'essayer de charger le code incriminé dans la RAM pour l'essayer. Je vous ferai savoir comment je vais. Je souhaite juste PM00042 était aussi clair que le PM que vous citez ... –

+0

PM00042 a disparu - essayez de chercher PM0056 ou PM0063. Vous pouvez également aller sur le site web de ST, trouver la section STM32 et chercher la documentation "Programming Manual". –