打印
[应用相关]

RT-Thread基于AT32单片机的Flash应用

[复制链接]
508|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-1-21 14:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1 硬件电路


2 RT-Thread配置
RT-Thread内置FAL(flash抽象层),支持MCU内置Flash和SPI Flash,使用SFUD(串行 Flash 通用驱动库)。

JEDEC SFDP标准可以自动探测芯片的参数,目前市场上的SPI Flash芯片一般都支持。如果不支持的话,可以通过查表的方式进行配置。

FAL配置



SPI和SFUD配置



3 软件编写
在drivers目录下添加

分区配置文件fal_cfg.h

#ifndef _FAL_CFG_H_
#define _FAL_CFG_H_

#include <rtthread.h>
#include <board.h>

#include "drv_flash.h"
#include "fal.h"

#ifdef __cplusplus
extern "C" {
#endif


extern const struct fal_flash_dev at32_onchip_flash;
extern struct fal_flash_dev nor_flash0;

/* flash device table */
#ifdef FAL_USING_NOR_FLASH_DEV_NAME
#define FAL_FLASH_DEV_TABLE                                          \
{                                                                    \
    &at32_onchip_flash,                                              \
    &nor_flash0,                                                     \
}
#else
#define FAL_FLASH_DEV_TABLE                                          \
{                                                                    \
    &at32_onchip_flash,                                              \
}
#endif


/* ====================== Partition Configuration ========================== */
#ifdef FAL_PART_HAS_TABLE_CFG

#ifdef BSP_USING_AT_SPIM

/* partition table */
#define FAL_PART_TABLE                                                                       \
{                                                                                            \
    {FAL_PART_MAGIC_WROD,        "param", "onchip_flash",       0,           128 * 1024, 0}, \
    {FAL_PART_MAGIC_WROD,        "log",   "onchip_flash",       128 * 1024,  SPIM_FLASH_SIZE_MB * 1024 * 1024, 0}, \
}

#else
/* partition table */
#define FAL_PART_TABLE                                                                       \
{                                                                                            \
    {FAL_PART_MAGIC_WROD,        "app",   "onchip_flash",       0,           250 * 1024, 0}, \
    {FAL_PART_MAGIC_WROD,        "param", "onchip_flash",       250 * 1024,    6 * 1024, 0}, \
    {FAL_PART_MAGIC_WORD,      "flashdb", FAL_USING_NOR_FLASH_DEV_NAME,         0,           512 * 1024, 0}, \
    {FAL_PART_MAGIC_WORD,     "download", FAL_USING_NOR_FLASH_DEV_NAME,         512 * 1024,  512 * 1024, 0}, \
}


#endif


#endif /* FAL_PART_HAS_TABLE_CFG */

#ifdef __cplusplus
extern "C" {
#endif


#endif /* _FAL_CFG_H_ */


SPI/SFUD和FAL初始化 component_init.c

#include <rtthread.h>
#include <rtdbg.h>

/******************************************************************************
SPI_FLASH
*/
#ifdef BSP_USING_SPI_FLASH
#include "spi_flash.h"
#include "spi_flash_sfud.h"
#include "drv_spi.h"

static int rt_hw_spi_flash_init(void)
{
    rt_hw_spi_device_attach(SPI_FLASH_BUS_NAME, SPI_FLASH_DEVICE_NAME, GPIOB, GPIO_PINS_12);  // CS 脚:PB12

    /* 使用 SFUD 探测 spix 从设备,并将 spix0 连接的 flash 初始化为块设备,名称 */
    if (RT_NULL == rt_sfud_flash_probe(FAL_USING_NOR_FLASH_DEV_NAME, SPI_FLASH_DEVICE_NAME))
    {
        LOG_E("find sfud_flash failed!...\n");
        return -RT_ERROR;
    }

    return RT_EOK;
}
INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);
#endif

#ifdef RT_USING_FAL
#include "fal.h"

static int rt_hw_onchip_flash_init(void)
{
#ifdef BSP_USING_AT_SPIM
    at32_msp_spim_init();
#endif
    return fal_init();
}
INIT_COMPONENT_EXPORT(rt_hw_onchip_flash_init);
#endif


4 测试结果


fal bench测试结果

msh >fal probe flashdb
Probed a flash partition | flashdb | flash_dev: norflash0 | offset: 0 | len: 524288 |.
msh >fal bench
Usage: fal bench <blk_size>             - benchmark test with per block size.
msh >fal bench 1024
DANGER: It will erase full chip or partition! Please run 'fal bench 1024 yes'.
msh >fal bench 1024 yes
Erasing 524288 bytes data, waiting...
Erase benchmark success, total time: 0.665S.
Writing 524288 bytes data, waiting...
Write benchmark success, total time: 2.048S.
Reading 524288 bytes data, waiting...
Read benchmark success, total time: 0.730S.
————————————————
版权声明:本文为CSDN博主「lg28870983」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lg28870983/article/details/135393930

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1899

主题

15571

帖子

11

粉丝