STM32F429 / STM32F439 de lectura mientras escribe desde dos bancos de memoria. Previene el bloqueo de la CPU?

1

He estado leyendo en la memoria flash STM32F429 (versión de 2MB). En el manual de referencia del STM32F4 me di cuenta que tenía dos bancos de memoria y admite lectura mientras escribe (RWW), lo que significa que puede leer desde un banco de memoria mientras escribe en el otro.

Mi aplicación tiene restricciones de tiempo real y quiero saber cuál es la peor situación posible.

Digamos que la aplicación del microcontrolador se está ejecutando desde el banco de memoria 1 y quiero escribir / borrar datos en el banco de memoria 2. Tengo algunas preguntas después de leer las secciones 3.4 a 3.6 en el manual de referencia.

  1. ¿Existe alguna situación en la que la aplicación del microcontrolador en el banco de memoria 1 deba escribir en flash durante la ejecución normal del código?

  2. En caso afirmativo a la pregunta 1. ¿Significa esto que la ejecución del código de la aplicación tiene que esperar hasta, por ejemplo? ¿Se realiza un borrado de sector en el banco de memoria 2 ya que no es compatible con la escritura mientras se escribe? ¿O es de alguna manera darle prioridad al banco de memoria 1 si es necesario el acceso de escritura / borrado?

pregunta iQt

1 respuesta

1
  1. Los flashes son dispositivos de memoria no volátiles, por lo que es posible que desee guardar algunas configuraciones del sistema o datos de calibración en él. Y STM32 le brinda la oportunidad de protegerlos de la lectura / escritura, por lo que esto puede salvarlo de otro EEPROM u otros dispositivos de memoria externos no volátiles.
  2. Según la sección 3.6.5
  

Esta función permite realizar una operación de lectura desde un banco mientras que   El borrado o la operación del programa se realiza en el otro banco.

Cuando está ejecutando / leyendo códigos / datos del banco1, puede ejecutar operaciones de borrado / programación en el banco2. Por ejemplo, su código se ejecuta en bank1, y ejecuta algunos códigos para iniciar una operación "earas" en bank2, una vez que comienza el "borrado", no necesita esperar a que se realice la operación, puede continuar haciendo otras cosas (pero no se pueden ejecutar códigos para hacer borrado / programación en bank2). Luego, después de un tiempo, verifica el bit BSY para ver si se ha realizado el borrado. Por lo tanto, la ejecución y el borrado de su código se realizan al mismo tiempo, sin necesidad de esperar.

Según "Leer del banco 1 al borrar el banco 2":

  

Mientras se ejecuta un código de programa del banco 1, es posible realizar   una operación de borrado en el banco 2 (y viceversa). Seguir el procedimiento   abajo:

     
  1. Compruebe que no haya ninguna operación de memoria Flash en curso al verificar el bit BSY en el registro FLASH_SR (BSY está activo cuando la operación de borrado / programa está en el banco 1 o banco 2) ...
  2.   

Por lo tanto, no hay "prioridad", no se pueden activar dos operaciones de "borrado / programación" al mismo tiempo. Los primeros despedidos siempre se servirán primero. Y debe esperar hasta que se realice una operación de borrado / programación, luego disparar una nueva.

    
respondido por el diverger

Lea otras preguntas en las etiquetas