Rango de los registros de protección contra escritura en STM32 (WRP1AR, etc.)

0

Quiero habilitar la protección contra escritura en las páginas flash ocupadas por el cargador de arranque en un chip STM32L4. Entiendo que debo establecer el registro WRP1AR en 0xFFXXFFYY, donde XX es la página final y YY es la página de inicio.

Mi pregunta es bastante simple, pero la documentación no está muy clara. ¿La página final también está incluida en la protección o no? Entonces, si escribo 0 como inicio y 4 final obtengo 5 páginas protegidas (0, 1, 2, 3, 4) o solo 4 (0, 1, 2, 3)? La forma en que está redactada la documentación me hace pensar que es el primer caso, pero la segunda es más habitual en la programación (al menos en C).

    
pregunta Bitgamma

1 respuesta

3

No veo cómo el manual de referencia no está claro, por lo que mi respuesta es básicamente una cita:

  

El área de usuario en la memoria Flash puede protegerse contra escritura no deseada   operaciones Se pueden definir dos áreas protegidas contra escritura (WRP), con página   (2 KByte) granularidad. El área está definida por un desplazamiento de página de inicio y   un desplazamiento de página final relacionado con la dirección base de la memoria Flash física.   Estas compensaciones se definen en los registros de direcciones WRP: área de Flash WRP   Un registro de direcciones (FLASH_WRP1AR), registro de direcciones del área B de Flash WRP   (FLASH_WRP1BR).

     

El área "y" de WRP (y = A, B) se define a partir de la dirección:

     

Dirección base de la memoria flash + [WRP1y_STRT x 0x800] (incluida) a la   dirección: memoria flash dirección base + [(WRP1y_END + 1) x 0x800]   (excluido).

     

Por ejemplo, para proteger por WRP de la dirección 0x0806   2800 (incluido) a la dirección 0x0807 07FF (incluido):

     

• si arranca   Flash está seleccionado, el registro FLASH_WRP1AR debe programarse con:

     

- WRP1A_STRT = 0xC5.

     

- WRP1A_END = 0xE0.

     En su lugar, se pueden usar

WRP1B_STRT y WRP1B_END en FLASH_WRP1BR (área "B" en la memoria Flash).

Así se incluye la página final. Para su ejemplo:

Dirección de inicio = 0x800 0000 + 0 * 0x800 = 0x800 0000

Dirección final = 0x800 0000 + (4 + 1) * 0x800 = 0x800 2800

Entonces, el flash de 0x800 0000 a 0x800 27FF estará protegido.

Tal vez lo que es confuso es la palabra "excluido" lo que se excluye es la dirección final, ya que sería el byte al comienzo de la página siguiente. Así que su fórmula probablemente debería leer algo como:

El flash está protegido de: Dirección base de la memoria flash + [WRP1y_STRT x 0x800] a la dirección: Dirección base de la memoria flash + [(WRP1y_END + 1) x 0x800 - 1]  (incluido).

¿Eso sería más claro? No lo sé.

    
respondido por el Arsenal

Lea otras preguntas en las etiquetas