中级
30 分钟

使用AS3001204和STM32L496AG在磁域中存储数据

激活您的记忆

MRAM 3 Click with Discovery kit with STM32L496AG MCU

已发布 7月 22, 2025

点击板

MRAM 3 Click

开发板

Discovery kit with STM32L496AG MCU

编译器

NECTO Studio

微控制器单元

STM32L496AG

快速且非易失性的磁阻随机存取存储器。

A

A

硬件概览

它是如何工作的?

MRAM 3 Click 基于 Avalanche Technology 的 AS3001204,这是一款具有 SPI 接口和写保护功能的 1Mb MRAM 存储器。AS3001204 组织为 128K 个 8 位字,具有 1,000,000 年的数据保留时间,结合了前所未有的数据存储和卓越的能效。它具有高度的可靠性,能够承受 10^14 次完整内存读/写/擦除周期,使此 Click board™ 适用于高可靠性应用,作为非易失性存储介质或临时 RAM 扩展,用于存储任何嵌入式应用中的数据。AS3001204 是一种精确的随机存取存储器,允许随机读写操

作。它提供低延迟、低功耗和可扩展的非易失性存储技术。MRAM 技术类似于具有 SRAM 兼容读/写时序的 Flash 技术(持久性 SRAM,P-SRAM),数据始终是非易失性的。MRAM 3 Click 使用支持 Dual/Quad SPI 和两种最常见模式(SPI 模式 0 和 3)的 SPI 串行接口与 MCU 通信,最大 SPI 频率为 108MHz。除了 SPI 兼容总线接口外,AS3001204 还具有执行位置 (XIP) 功能,允许在不必单独加载每条指令的读或写命令的情况下完成一系列读写指令,以及硬件/软件数据

保护机制。硬件写保护功能,标记并连接到 mikroBUS™ 插座的 WP 引脚,允许用户冻结整个内存区域,从而保护其免受写入指令的影响。mikroBUS™ 插座的 IO3 引脚是双向 I/O,在 Dual 和 Quad SPI 模式下传输数据。此 Click board™ 只能在 3.3V 逻辑电压水平下运行。因此,在使用不同逻辑电平的 MCU 之前,板必须执行适当的逻辑电压转换。然而,该 Click board™ 配备了包含函数和示例代码的库,可作为进一步开发的参考。

MRAM 3 Click top side image
MRAM 3 Click bottom side image

功能概述

开发板

32L496GDISCOVERY Discovery 套件是一款功能全面的演示和开发平台,专为搭载 Arm® Cortex®-M4 内核的 STM32L496AG 微控制器设计。该套件适用于需要在高性能、先进图形处理和超低功耗之间取得平衡的应用,支持无缝原型开发,适用于各种嵌入式解决方案。STM32L496AG 采用创新的节能架构,集成

了扩展 RAM 和 Chrom-ART 图形加速器,在提升图形性能的同时保持低功耗,使其特别适用于音频处理、图形用户界面和实时数据采集等对能效要求较高的应用。为了简化开发流程,该开发板配备了板载 ST-LINK/V2-1 调试器/编程器,提供即插即用的调试和编程体验,使用户无需额外硬件即可轻松加载、调

试和测试应用程序。凭借低功耗特性、增强的内存能力以及内置调试工具,32L496GDISCOVERY 套件是开发先进嵌入式系统、实现高效能解决方案的理想选择。

Discovery kit with STM32L496AG MCU double side image

微控制器概述 

MCU卡片 / MCU

STM32L496AG Image

建筑

ARM Cortex-M4

MCU 内存 (KB)

1024

硅供应商

STMicroelectronics

引脚数

169

RAM (字节)

327680

使用的MCU引脚

mikroBUS™映射器

NC
NC
AN
QSPI IO3
PB2
RST
SPI Chip Select
PG11
CS
SPI Clock
PI1
SCK
SPI Data OUT / QSPI IO1
PD3
MISO
SPI Data IN / QSPI IO0
PI3
MOSI
Power Supply
3.3V
3.3V
Ground
GND
GND
Write Protect / QSPI IO2
PA0
PWM
NC
NC
INT
NC
NC
TX
NC
NC
RX
NC
NC
SCL
NC
NC
SDA
NC
NC
5V
Ground
GND
GND
1

“仔细看看!”

Click board™ 原理图

MRAM 3 Click Schematic schematic

一步一步来

项目组装

Discovery kit with STM32H750XB MCU front image hardware assembly

从选择您的开发板和Click板™开始。以Discovery kit with STM32L496AG MCU作为您的开发板开始。

Discovery kit with STM32H750XB MCU front image hardware assembly
Thermo 21 Click front image hardware assembly
Prog-cut hardware assembly
Board mapper by product7 hardware assembly
Necto image step 2 hardware assembly
Necto image step 3 hardware assembly
Necto image step 4 hardware assembly
Necto image step 5 hardware assembly
Necto image step 6 hardware assembly
Discovery kit with STM32H750XB MCU NECTO MCU Selection Step hardware assembly
Necto No Display image step 8 hardware assembly
Necto image step 9 hardware assembly
Necto image step 10 hardware assembly
Necto image step 11 hardware assembly

软件支持

库描述

该库包含 MRAM 3 Click 驱动程序的 API。

关键功能:

  • mram3_memory_write - 此函数从选定的内存地址开始写入所需数量的数据字节。

  • mram3_memory_read - 此函数从选定的内存地址开始读取所需数量的数据字节。

  • mram3_aug_memory_write - 此函数从选定的增强内存地址开始写入所需数量的数据字节。

开源

代码示例

完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio 应用程序代码也可以在MIKROE的GitHub账户中找到。

/*!
 * @file main.c
 * @brief MRAM3 Click example
 *
 * # Description
 * This example demonstrates the use of MRAM 3 Click board by writing specified data to
 * the memory and reading it back.
 *
 * The demo application is composed of two sections :
 *
 * ## Application Init
 * Initializes the driver and performs the Click default configuration.
 *
 * ## Application Task
 * Writes a desired number of bytes to the memory and then verifies if it is written correctly
 * by reading from the same memory location and displaying the memory content on the USB UART.
 *
 * @author Stefan Filipovic
 *
 */

#include "board.h"
#include "log.h"
#include "mram3.h"

static mram3_t mram3;
static log_t logger;

#define DEMO_TEXT_MESSAGE_1         "MikroE"
#define DEMO_TEXT_MESSAGE_2         "MRAM 3 Click"
#define STARTING_ADDRESS            0x01234

void application_init ( void )
{
    log_cfg_t log_cfg;  /**< Logger config object. */
    mram3_cfg_t mram3_cfg;  /**< Click config object. */

    /** 
     * Logger initialization.
     * Default baud rate: 115200
     * Default log level: LOG_LEVEL_DEBUG
     * @note If USB_UART_RX and USB_UART_TX 
     * are defined as HAL_PIN_NC, you will 
     * need to define them manually for log to work. 
     * See @b LOG_MAP_USB_UART macro definition for detailed explanation.
     */
    LOG_MAP_USB_UART( log_cfg );
    log_init( &logger, &log_cfg );
    log_info( &logger, " Application Init " );

    // Click initialization.
    mram3_cfg_setup( &mram3_cfg );
    MRAM3_MAP_MIKROBUS( mram3_cfg, MIKROBUS_1 );
    if ( SPI_MASTER_ERROR == mram3_init( &mram3, &mram3_cfg ) )
    {
        log_error( &logger, " Communication init." );
        for ( ; ; );
    }
    
    if ( MRAM3_ERROR == mram3_default_cfg ( &mram3 ) )
    {
        log_error( &logger, " Default configuration." );
        for ( ; ; );
    }
    
    log_info( &logger, " Application Task " );
}

void application_task ( void )
{
    uint8_t data_buf[ 128 ] = { 0 };
    memcpy ( data_buf, DEMO_TEXT_MESSAGE_1, strlen ( DEMO_TEXT_MESSAGE_1 ) );
    if ( MRAM3_OK == mram3_memory_write ( &mram3, STARTING_ADDRESS, 
                                          data_buf, sizeof ( data_buf ) ) )
    {
        log_printf ( &logger, "Data written to address 0x%.5LX: %s\r\n", ( uint32_t ) STARTING_ADDRESS, 
                                                                                      data_buf );
    }
    memset ( data_buf, 0, sizeof ( data_buf ) );
    if ( MRAM3_OK == mram3_memory_read ( &mram3, STARTING_ADDRESS, 
                                         data_buf, sizeof ( data_buf ) ) )
    {
        log_printf ( &logger, "Data read from address  0x%.5LX: %s\r\n", ( uint32_t ) STARTING_ADDRESS, 
                                                                                      data_buf );
        Delay_ms ( 1000 );
        Delay_ms ( 1000 );
        Delay_ms ( 1000 );
    }
    memcpy ( data_buf, DEMO_TEXT_MESSAGE_2, strlen ( DEMO_TEXT_MESSAGE_2 ) );
    if ( MRAM3_OK == mram3_memory_write ( &mram3, STARTING_ADDRESS, 
                                          data_buf, sizeof ( data_buf ) ) )
    {
        log_printf ( &logger, "Data written to address 0x%.5LX: %s\r\n", ( uint32_t ) STARTING_ADDRESS, 
                                                                                      data_buf );
    }
    memset ( data_buf, 0, sizeof ( data_buf ) );
    if ( MRAM3_OK == mram3_memory_read ( &mram3, STARTING_ADDRESS, 
                                         data_buf, sizeof ( data_buf ) ) )
    {
        log_printf ( &logger, "Data read from address  0x%.5LX: %s\r\n\n", ( uint32_t ) STARTING_ADDRESS, 
                                                                                        data_buf );
        Delay_ms ( 1000 );
        Delay_ms ( 1000 );
        Delay_ms ( 1000 );
    }
}

int main ( void ) 
{
    /* Do not remove this line or clock might not be set correctly. */
    #ifdef PREINIT_SUPPORTED
    preinit();
    #endif
    
    application_init( );
    
    for ( ; ; ) 
    {
        application_task( );
    }

    return 0;
}

// ------------------------------------------------------------------------ END

额外支持

资源

喜欢这个项目吗?

'购买此套件' 按钮会直接带您进入购物车,您可以在购物车中轻松添加或移除产品。