Configuración y práctica de AutoSAR (en profundidad) 7.5 Arquitectura NVM, forma de almacenamiento y sincronización implícita y explícita

Arquitectura NVM, forma de almacenamiento y sincronización implícita y explícita.

->Volver al directorio general<-

1. La posición de NvM en la arquitectura de AUTOSAR

NvM está en la capa de Servicio en BSW. La pila de protocolos de Servicio de Memoria específica se divide en capas de la siguiente manera:

  1. Servicio de memoria (NvM)
  2. Abstracción de hardware de memoria(Memoria si和Tarifa/Ea)
  3. Controlador de memoria (controlador Fls/Eep)

inserte la descripción de la imagen aquí

Dos, NVM e interacción externa

inserte la descripción de la imagen aquíBreve introducción a las principales interacciones entre el módulo NvM y otros módulos:

inserte la descripción de la imagen aquí

3. Introducción a la interacción de varias capas dentro de NVM

inserte la descripción de la imagen aquíIntroducción al módulo:

NVM: nombre completo NVRAM Manager, módulo de gestión de servicios de almacenamiento. Proporciona principalmente almacenamiento de datos abstractos, lee y almacena datos durante el encendido y apagado, admite el almacenamiento inmediato de datos y asocia datos NV entre ROM y RAM.

MEMIF: el nombre completo es Memory Abstraction Interface, que almacena módulos de interfaz abstractos. Realice la operación de separación del almacenamiento del bloque de datos en Flash interno o EEP externo.

TARIFA: Nombre completo EMULACIÓN Flash EEPROM, módulo de simulación FLASH. FEE implementa la abstracción de bloques de datos Flash y el diseño de datos dinámicos.

FLS: el nombre completo es módulo Flash Driver, que proporciona principalmente la interfaz para operar Flash.

EA: Nombre completo EEPROM Abstraction, módulo abstracto EEPROM. Definir la abstracción de almacenamiento y el diseño de datos de la EEPROM externa;

EEP: El nombre completo es Módulo controlador EEPROM externo. Proporciona interfaz operativa EEPROM externa y controlador.

Flujo de datos interactivo interno:

Nvm implementa operaciones de lectura y escritura de Flash interno o EEP externo a través de MemIf_Read y MemIf_Write.

Cuando se utiliza FLASH interno , el flujo de datos es el siguiente:

NVM—>MemIF—>FEE—>FLS---->Flash internoRuta de acceso (rama roja en la figura)
a) MemIf llama a la interfaz Fee_Read/Fee_Write para operar el módulo FEE y abstrae el bloque de datos Flash antes de acceder a Flash;

b) El módulo FEE llama a la interfaz Fls_Read/Fls_Write para implementar operaciones de lectura y escritura en Flash.

c) El módulo controlador del módulo FlS interactúa con el hardware Flash interno.

Cuando se utiliza EEPROM externa , el flujo de datos es el siguiente:

NVM—>MemIF—>EA—>EEP---->EEPROM externaRuta de acceso (rama verde en la figura)
A. MemIf llama a EA (interfaz de abstracción de almacenamiento de EEPROM externa) para implementar la abstracción del bloque de datos EEPROM antes de acceder a la EEPROM;

B. El módulo EA llama al módulo controlador EEPROM externo para implementar operaciones de lectura y escritura en la EEPROM externa.

C. El módulo controlador del módulo EEP interactúa con el hardware EEPROM externo.

4. Objetos de almacenamiento NvM Basic y tipos de bloques NvM

4.1 Clasificación de objetos de almacenamiento básicos de NvM

inserte la descripción de la imagen aquí
Diagrama de estructura de propiedad de objetos de almacenamiento básico

inserte la descripción de la imagen aquí
Si ya tienes NV BLock, ¿por qué necesitas RAM Block?

Para decirlo sin rodeos, el objeto de almacenamiento básico es la forma de almacenamiento, es decir, en qué forma se almacenan los datos, ya sea en RAM, ROM o espacio NV.

Algunos estudiantes dijeron que si ya tiene NV BLock, ¿para qué necesita RAM Block? La función de RAM Block es que antes de escribir en NV Block, los usuarios pueden escribir datos en RAM Block primero y luego finalmente escribirlos en NV BLOCK. .
Escenarios de escritura: a veces los usuarios quieren escribir durante el sueño y, a veces, los usuarios quieren escribir después de un retraso de ciclo específico. Para las necesidades anteriores, RAM BLOCK puede satisfacer mejor las necesidades del usuario.

El mismo principio se aplica al leer: primero, lea los datos del NV Block a la RAM. Todos los usuarios pueden obtener los datos de manera uniforme a través de la RAM en lugar de leerlos del NV Block cada vez (lo cual lleva mucho tiempo).

4.2 Tipos de bloques NvM

inserte la descripción de la imagen aquí

Bloque nativo:

Tipo de bloque estándar, la forma de bloque más común;

inserte la descripción de la imagen aquí
Entre ellas, Nv block Header y CRC son configuraciones opcionales.

NV Block Header
almacena información de ID de bloque estático. El encabezado existirá solo si la función Comprobar ID de bloque estático está configurada.

NV BLOCK CRC
La parte CRC solo existirá si la función de verificación CRC está configurada.

Bloque NVRAM redundante:

Este tipo puede lograr un almacenamiento de respaldo de datos redundante.
inserte la descripción de la imagen aquí
Si un dato es incorrecto, puede utilizar la pieza de respaldo

inserte la descripción de la imagen aquí
Este tipo está destinado a aumentar la disponibilidad de los datos en caso de errores, es decir, no pretende proporcionar una detección de errores adicional.
La atención se centra principalmente en los abortos de escritura, específicamente los restablecimientos debido a condiciones de apagón. Los datos del usuario se almacenan dos veces en el área NV.
NVM se basa en la detección subyacente (FEE/EA) de anulaciones de acceso de escritura para garantizar que los bloques de datos legibles sigan siendo legibles incluso cuando se anula el acceso de escritura.

NVRAM del conjunto de datos:

inserte la descripción de la imagen aquí

Compuesto por múltiples bloques de datos iguales, cada bloque de datos es un BLOQUE independiente

1. El índice del bloque de datos correspondiente se puede obtener mediante Bloques Administrativos (NvM_GetDataIndex() y NVM_SetDataIndex)

2. Este método de almacenamiento facilita la gestión de la configuración. Si hay varios bloques de variantes, los datos almacenados tienen el mismo significado, pero los valores de las diferentes variantes son diferentes.

4.3 Bloques de RAM persistentes y no persistentes

Bloque de RAM permanente:

La dirección del bloque de RAM es fija y almacenada en la configuración del NVM. Una aplicación puede acceder a un bloque NV o varias aplicaciones pueden acceder al mismo bloque NV.

Bloques de RAM no permanentes:

Cada aplicación utiliza su propio bloque de RAM. En este caso, el bloque de RAM se denomina bloque no persistente. Dado que las direcciones de RAM no se almacenan (y pueden cambiar), se debe proporcionar un puntero para leer y escribir bloques no permanentes.

5. Mecanismo de sincronización NVM: sincronización implícita y sincronización explícita

5.1 Una breve introducción a la sincronización implícita y la sincronización explícita

Hay dos mecanismos de sincronización durante la operación de datos de NvM: sincronización implícita y sincronización explícita.

Introducción a la sincronización implícita:

  • La aplicación llama directamente a la interfaz NVM para operar los datos. No se recomienda este método para utilizar operaciones de bloque RAM compartido para garantizar la coherencia de los datos del bloque RAM en NVM (principalmente implementación del mecanismo CRC sincronizado).
    inserte la descripción de la imagen aquí
    Introducción a la sincronización explícita:

  • NVM define un espejo RAM para el intercambio de datos con la aplicación. Cuando la aplicación llama a NvM_WriteBlock, escribe datos en el bloque RAM. En este momento, los datos aún se pueden modificar.

  • Debido a que los datos aún no se han escrito en el bloque Nv final, cuando se llama a la operación de datos NVM NvMWriteRamBlockToNvM, los datos se copian en el espejo interno y, finalmente, los datos se escriben en el bloque Nv.

  • NVM llama a la API para leer datos de NvM_ReadBlock durante la lectura. En realidad, los datos se copian de RAM Mirror a RAM Block después de que NvM llama a NvMReadRamBlockFromNvM. NvM proporciona enrutamiento de devolución de llamada de control bidireccional para realizar la transmisión de datos de la aplicación.
    inserte la descripción de la imagen aquí

5.2 Explicación detallada de la sincronización implícita y el proceso de ejecución de sincronización explícita

El flujo de datos de escritura (lectura) de SWC de sincronización implícita es el siguiente:

  1. La aplicación SWC llama a la interfaz de tipo NV a través de RTE para activar la solicitud NvSwc para un evento de operación de escritura (lectura) y pasa el parámetro RAMBlock a NVM para escribir datos de usuario (o leer desde NVM).

  2. NvSwc llama a NvM_WriteBlock((o NvM_ReadBlock)) para solicitar que los datos del bloque RAM se escriban en el NvBlock (o se lean desde el NvBlock).

  3. Desde el momento en que se inicia la solicitud hasta que se completa la lectura y escritura del módulo NvM, otros SWC no pueden cambiar el valor en el bloque RAM (aunque se puede leer, otras operaciones de lectura y escritura de SWC generalmente están prohibidas durante este período para el conveniencia de la gestión)

  4. SWC puede usar el sondeo para verificar periódicamente si la operación de escritura (lectura) de NvM se completa, y NvM también puede usar una función de devolución de llamada para notificar a SWC que la operación se completa.

  5. Cuando se completa la operación NvM, cada SWC puede leer y escribir el bloque nuevamente.

El proceso explícito de escritura (lectura) sincrónica es el siguiente:

  1. Aplique SWC para llamar a la interfaz de tipo NV Interface a través de RTE para activar NvSwc para realizar eventos de operación de escritura (lectura). Si es una operación de escritura, los datos se pasarán a RAMBlock al mismo tiempo.

  2. NvSWC detecta un evento de operación de escritura (lectura), llama a NvM_WriteBlock (o NvM_ReadBlock) e inicia una solicitud de datos de escritura (lectura). El puntero de datos de la función de lectura y escritura está vacío y el propósito es iniciar una solicitud para escribir (leer) datos.

  3. Cuando el módulo NvM detecta una solicitud para leer o escribir datos, llamará a la función de devolución de llamada configurada aquí en Write Ram Block To Nv Callback (o Read Ram Block From Nv Callback). La aplicación puede modificar el valor en el bloque RAM antes de llamar. esta función de devolución de llamada. En la devolución de llamada de escritura,
    la RAM del usuario se transfiere a la RAM reflejada de NVM (la lectura es en la dirección opuesta) y luego se llama a la pila de protocolo subyacente de NVM para completar la operación de escritura real (la operación de lectura debe entenderse como la ejecución del protocolo). apilar primero y luego copiar los datos).

  4. Cuando el módulo NvM llama a la devolución de llamada de lectura y escritura, el estado del bloque NV se establece automáticamente en Ocupado y no se permiten otras operaciones de solicitud SWC.

  5. Si ocurre un problema durante el proceso de copia, la pila de protocolos NvM llamará automáticamente a la función de devolución de llamada y volverá a intentarlo.
    inserte la descripción de la imagen aquí

  6. Se recomienda que NvM utilice una función de devolución de llamada para notificar a la aplicación los resultados de la operación. (Es posible que el método de sondeo no se active como pendiente, lo que hace que el resultado de lectura correcta sea el último valor).

  7. Una vez completada la ejecución anterior, cada SWC puede leer y escribir el bloque nuevamente.

5.3 Comparación de las principales diferencias entre sincronización implícita y sincronización explícita

A continuación se resumen las diferencias entre los dos desde varias dimensiones:

Sobrecarga de RAM:

–> Sincronización implícita: no es necesario asignar más RAM

–> Sincronización explícita:

En la sincronización explícita, el mecanismo Mirror se utiliza para prevenir mejor el daño a la coherencia de los datos, pero requiere una sobrecarga de RAM adicional y tiene una relación de mapeo con el caché (Bloque Mirror) abierto por NVM.

Ya sea para compartir RAM:

–> Sincronización implícita: la RAM (local o global) es utilizada exclusivamente por el SWC que accede a NVM;

–> Sincronización de pantalla: la RAM puede ser utilizada individualmente o compartida por cada SWC que accede a NVM.

La coherencia de los datos garantiza:

–> Sincronización implícita:
es difícil garantizar la coherencia de los datos cuando acceden varios usuarios.
La aplicación es responsable de garantizar la coherencia de los datos y hay muchos escenarios a considerar:

  • Por ejemplo, el trabajo de borrado del bloque no se puede poner en cola hasta que se complete el trabajo de lectura;

  • Por otro ejemplo, si se está procesando una solicitud de borrado, el bloque de RAM se puede leer y escribir sin ningún impacto en el resultado del trabajo de borrado;

    Por lo tanto, el enfoque más seguro para el acceso al bloque sincronizado implícitamente es no usarlo mientras el bloque de RAM esté pendiente.

–> Sincronización de pantalla:
el acceso multiusuario facilita garantizar la coherencia de los datos.

  • Garantizado principalmente por el mecanismo NVM Mirror, excepto durante una pequeña parte del tiempo al copiar datos, el bloque RAM se puede modificar y operar el resto del tiempo;

  • Durante la copia de devolución de llamada, el bloque de datos está ocupado (como se muestra a continuación en Especificaciones), por lo que la aplicación necesita leer el estado de operación de NvM para determinar si el bloque RAM se puede usar actualmente.

inserte la descripción de la imagen aquí

Tiempo de operacion:

–> Sincronización implícita:

  • Ya que con la sincronización implícita la forma más segura de bloquear el acceso es no usarlo mientras el bloqueo de RAM esté pendiente. Por tanto, la operación de sincronización implícita lleva mucho tiempo.

–> Sincronización explícita:

  • Después de que la aplicación emite NvM_WriteBlock, solo las dos etapas de copia de datos de la función de devolución de llamada (en realidad, lectura y escritura de datos) no pueden usar el bloque RAM, y se puede acceder al resto del tiempo.

Notificación de devolución de llamada:

–> Sincronización implícita:

  • Dado que el bloque de RAM está en estado suspendido, se recomienda no realizar ningún otro acceso. Las operaciones de acceso individuales corresponden a devoluciones de llamada individuales.

–> Sincronización explícita:

  • Se fusionarán varias solicitudes fuera del tiempo de copia de datos, NvM solo las procesará una vez y la función de devolución de llamada solo se llamará una vez.

Finalmente, las diferencias entre sincronización implícita y sincronización explícita se organizan en una tabla de la siguiente manera:
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/nihaoljq2010/article/details/131446175
Recomendado
Clasificación