中级
30 分钟

使用S25HS512T和PIC18F57Q43优化数据检索,提高各类应用的效率

体验Semper Flash的极速性能

Semper Flash Click with Curiosity Nano with PIC18F57Q43

已发布 6月 24, 2024

点击板

Semper Flash Click

开发板

Curiosity Nano with PIC18F57Q43

编译器

NECTO Studio

微控制器单元

PIC18F57Q43

体验我们 Semper Flash 解决方案所提供的多种协议的强大功能,包括 Dual I/O、Quad I/O (QIO) 和 Quad Peripheral Interface (QPI),实现灵活的连接性。

A

A

硬件概览

它是如何工作的?

Semper Flash Click 基于 Infineon 的 S25HS512T,一种 512 Mbit SPI 闪存模块。它具有标准、双/四 SPI 接口上的正常和双倍数据速率,通过使用硬件错误纠正码 (ECC) 生成提高了存储信息的可靠性,1024 字节的一次性可编程 (OTP) 存储块,先进的扇区保护,自动启动等众多功能。这款 Click board™ 是各种嵌入式应用中大容量存储的理想解决方案。由于其快速性能,Semper Flash Click 还可用于代码影射、就地执行 (XIP)、数据记录和数据存储。一个额外的电平转换 IC 使 Semper Flash Click 能够与广泛的 MCU 一起使用。设备控制逻辑分为两个并行操作部分:主机接口控制器 (HIC) 和嵌入算法控制器 (EAC)。HIC 监控设备输入的信号电平并驱动输出,以完成与主机系统的读取、编程和写入数据传输。HIC 在读取传输时从当前输入的地址映射中传送数据,将写入传输地址和数据信息放入 EAC 命令存储器中,并通知 EAC 电源转换和写入传输。EAC 在程序或写入传输后查询命令存储器以获取合法的命令序列,并执行相关的嵌入算法。直接从闪存执行代码通常

称为就地执行 (XIP)。通过在更高的时钟速率下使用带有四路或 DDR 四路 SPI 事务的 XIP,数据传输速率可以匹配或超过传统的并行或异步 NOR 闪存,同时显著减少信号数量。先进的 MirrorBit® 技术允许在每个存储阵列晶体管(存储单元)中存储两个数据位,有效地将单个存储单元的容量加倍。Eclipse™ 架构使擦除和编程性能相比上一代闪存模块大大提高。由于速度更高,Semper Flash Click 允许就地执行 (XIP) 和数据影射。S25HS512T 的一个关键特性是 AutoBoot 功能。它允许模块在复位循环后自动从预定义位置启动内存传输(内存读取操作)。考虑典型的通信场景,其中 READ 命令后需要使用一个或多个地址字节,AutoBoot 允许主机 MCU 拉低 #CS(芯片选择)引脚并在 #CS 引脚保持低电平时通过 SPI 接口开始接收数据流,而无需任何浪费的周期。当 #CS 引脚释放时,S25HS512T 返回正常操作。高级扇区保护 (ASP) 是一种强大的保护模式,结合了各种软件和硬件方法,以在扇区或整个内存中打开或关闭编程或擦除操作。一个专用的 ASP

 OTP 寄存器提供密码保护或持久保护模式,允许在保护方面具有更大的灵活性。使用 OTP 内存允许保护模式在设备的整个生命周期内保持不变。SPI 接口引脚被路由到 mikroBUS™,使得与微控制器单元 (MCU) 的接口变得简单直接。路由到 mikroBUS™ 的其他引脚包括路由到 mikroBUS™ PWM 引脚并标记为 IO2 的 #WP/IO2 引脚,以及路由到 mikroBUS™ INT 引脚并标记为 IO3 的 #HOLD/IO3 引脚。还有复位引脚,路由到 mikroBUS™ 的 RST 引脚,执行闪存模块的复位,如果启用,将启动自动启动序列。EnduraFlex 架构允许系统设计人员根据特定应用自定义 NOR 闪存的耐用性和保留时间。主机定义用于高耐用性或长时间保留的分区,提供高达 1+ 百万次循环或 25 年的数据保留。Semper Flash 中的数据完整性检查事务在存储阵列的用户定义地址范围内执行硬件加速的循环冗余校验 (CRC) 计算。SafeBoot 功能允许状态寄存器轮询,通过错误签名检测嵌入式微控制器初始化失败或配置寄存器损坏。

Semper Flash Click top side image
Semper Flash Click bottom side image

功能概述

开发板

PIC18F57Q43 Curiosity Nano 评估套件是一款尖端的硬件平台,旨在评估 PIC18-Q43 系列内的微控制器。其设计的核心是包含了功能强大的 PIC18F57Q43 微控制器(MCU),提供先进的功能和稳健的性能。这个评估套件的关键特点包括一个黄 色用户 LED 和一个响应灵敏的机械用户开关,提供无

缝的交互和测试。为一个 32.768kHz 水晶振荡器足迹提供支持,确保精准的定时能力。套件内置的调试器拥有一个绿色电源和状态 LED,使编程和调试变得直观高效。此外,增强其实用性的还有虚拟串行端口 (CDC)和一个调试 GPIO 通道(DGI GPIO),提供广泛的连接选项。该套件通过 USB 供电,拥有由

 MIC5353 LDO 调节器提供支持的可调目标电压功能,确保在 1.8V 至 5.1V 的输出电压范围内稳定运行,最大输出电流为 500mA,受环境温度和电压限制。

PIC18F57Q43 Curiosity Nano double side image

微控制器概述 

MCU卡片 / MCU

default

建筑

PIC

MCU 内存 (KB)

128

硅供应商

Microchip

引脚数

48

RAM (字节)

8196

你完善了我!

配件

Curiosity Nano Base for Click boards 是一款多功能硬件扩展平台,专为简化 Curiosity Nano 套件与扩展板之间的集成而设计,特别针对符合 mikroBUS™ 标准的 Click 板和 Xplained Pro 扩展板。这款创新的基板(屏蔽板)提供了无缝的连接和扩展可能性,简化了实验和开发过程。主要特点包括从 Curiosity Nano 套件提供 USB 电源兼容性,以及为增强灵活性而提供的另一种外部电源输入选项。板载锂离子/锂聚合物充电器和管理电路确保电池供电应用的平稳运行,简化了使用和管理。此外,基板内置了一个固定的 3.3V 电源供应单元,专用于目标和 mikroBUS™ 电源轨,以及一个固定的 5.0V 升压转换器,专供 mikroBUS™ 插座的 5V 电源轨,为各种连接设备提供稳定的电力供应。

Curiosity Nano Base for Click boards accessories 1 image

使用的MCU引脚

mikroBUS™映射器

NC
NC
AN
Reset
PA7
RST
SPI Chip Select
PD4
CS
SPI Clock
PC6
SCK
SPI Data OUT/SO1
PC5
MISO
SPI Data IN/SO0
PC4
MOSI
Power Supply
3.3V
3.3V
Ground
GND
GND
Write Protect/IO2
PB0
PWM
Data Transfer Pause/IO3
PA6
INT
NC
NC
TX
NC
NC
RX
NC
NC
SCL
NC
NC
SDA
NC
NC
5V
Ground
GND
GND
1

“仔细看看!”

Click board™ 原理图

Semper Flash Click Schematic schematic

一步一步来

项目组装

Curiosity Nano Base for Click boards front image hardware assembly

从选择您的开发板和Click板™开始。以Curiosity Nano with PIC18F57Q43作为您的开发板开始。

Curiosity Nano Base for Click boards front image hardware assembly
Charger 27 Click front image hardware assembly
PIC18F47Q10 Curiosity Nano front image hardware assembly
Prog-cut hardware assembly
Board mapper by product8 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
PIC18F57Q43 Curiosity MCU Step hardware assembly
Necto No Display image step 8 hardware assembly
Necto image step 9 hardware assembly
Necto image step 10 hardware assembly
Debug Image Necto Step hardware assembly

软件支持

库描述

此库包含Semper Flash Click驱动程序的API。

关键功能:

  • semperflash_write_memory - 这个函数将数据写入闪存

  • semperflash_read_memory - 这个函数从闪存读取数据

  • semperflash_erase_memory - 这个函数擦除闪存中的数据

开源

代码示例

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

/*!
 * \file 
 * \brief SemperFlash Click example
 * 
 * # Description
 * This example showcases how to initialize and use the Semper Flash Click. The Click
 * is a 512 Mbit SPI Flash memory module. Data can be stored in and read from the flash
 * memory. There's also the option of erasing it's contents. Here's how to do it.
 *
 * The demo application is composed of two sections :
 * 
 * ## Application Init 
 * This function initializes and configures the Click and logger modules. Additional con-
 * figuring is done in the default_cfg(...) function. The device ID should appear in the 
 * UART console if the setup finishes successfully.
 * 
 * ## Application Task  
 * This function first erases the contents of the flash memory and then writes, reads and
 * prints two strings in the UART console. It does so every 2 seconds.
 * 
 * \author MikroE Team
 *
 */
// ------------------------------------------------------------------- INCLUDES

#include "board.h"
#include "log.h"
#include "semperflash.h"

// ------------------------------------------------------------------ VARIABLES

static semperflash_t semperflash;
static log_t logger;

uint8_t id_data[ 8 ];
uint8_t txt_flag;
uint8_t COMPANY_FLAG = 2;
uint8_t CLICK_FLAG = 3;
uint32_t ADRESS_MEMORY = 0x00001111;

// ------------------------------------------------------- ADDITIONAL FUNCTIONS

void error_handler ( uint8_t stat )
{
    if ( SEMPERFLASH_ID_ERROR == stat )
    {
        log_printf( &logger, "ID ERROR!" );
        for ( ; ; );
    }
    else if ( SEMPERFLASH_SIZE_ERROR == stat )
    {
        log_printf( &logger, "BUF SIZE ERROR!" );
        for ( ; ; );
    }
}

void id_check ( )
{
    uint8_t cnt;

    error_handler( semperflash_check_manufacturer_id( &semperflash ) );
    error_handler( semperflash_get_device_id( &semperflash, id_data ) );

    log_printf( &logger, "DEVICE ID: 0x" );
    for ( cnt = 0; cnt < SEMPERFLASH_DEVICE_ID_BYTE_SIZE; cnt++ )
    {
        log_printf( &logger, "%x", ( uint16_t )id_data[ cnt ] );
    }
    log_printf( &logger, "\r\n\r\n" );
    txt_flag = COMPANY_FLAG;
}

// ------------------------------------------------------ APPLICATION FUNCTIONS

void application_init ( )
{
    log_cfg_t log_cfg;
    semperflash_cfg_t cfg;

    /** 
     * 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 ----" );
    Delay_ms ( 100 );

    //  Click initialization.

    semperflash_cfg_setup( &cfg );
    SEMPERFLASH_MAP_MIKROBUS( cfg, MIKROBUS_1 );
    semperflash_init( &semperflash, &cfg );
    
    semperflash_default_cfg( &semperflash );
    
    id_check( );
    Delay_ms ( 500 );
}

void application_task ( )
{
    char write_data_com[ 7 ] = "MikroE";
    char write_data_clk[ 13 ] = "Semper Flash";
    char read_buf_data[ 13 ] = { 0 };

    semperflash_send_cmd( &semperflash, SEMPERFLASH_WRITE_ENABLE );
    semperflash_erase_memory( &semperflash, ADRESS_MEMORY );
    
    if ( COMPANY_FLAG == txt_flag )
    {
       semperflash_send_cmd( &semperflash, SEMPERFLASH_WRITE_ENABLE );
       error_handler( semperflash_write_memory( &semperflash, ADRESS_MEMORY, write_data_com, 6 ) );
       error_handler( semperflash_read_memory( &semperflash, ADRESS_MEMORY, read_buf_data, 6 ) );
       log_printf( &logger, "%s\r\n", read_buf_data );
       txt_flag = CLICK_FLAG;       
    }
    else if ( CLICK_FLAG == txt_flag )
    {
       semperflash_send_cmd( &semperflash, SEMPERFLASH_WRITE_ENABLE );
       error_handler( semperflash_write_memory( &semperflash, ADRESS_MEMORY, write_data_clk, 12 ) );
       error_handler( semperflash_read_memory( &semperflash, ADRESS_MEMORY, read_buf_data, 12 ) );
       log_printf( &logger, "%s\r\n", read_buf_data );
       txt_flag = COMPANY_FLAG;
    }

    log_printf( &logger, "....................\r\n" );
    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

额外支持

资源

喜欢这个项目吗?

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