mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-02-04 08:34:33 +08:00
75a7cb6929
* [update] add fal component. * [update] format code. * [update] change PKG_USING_FAL to RT_USING_FAL * [update] format code. * [update] fal * [update] delete FAL_SW_VERSION
80 lines
1.8 KiB
C
80 lines
1.8 KiB
C
/*
|
|
* Copyright (c) 2006-2018, RT-Thread Development Team
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Change Logs:
|
|
* Date Author Notes
|
|
* 2018-05-17 armink the first version
|
|
*/
|
|
|
|
#include <fal.h>
|
|
#include <string.h>
|
|
|
|
/* flash device table, must defined by user */
|
|
#if !defined(FAL_FLASH_DEV_TABLE)
|
|
#error "You must defined flash device table (FAL_FLASH_DEV_TABLE) on 'fal_cfg.h'"
|
|
#endif
|
|
|
|
static const struct fal_flash_dev * const device_table[] = FAL_FLASH_DEV_TABLE;
|
|
static const size_t device_table_len = sizeof(device_table) / sizeof(device_table[0]);
|
|
static uint8_t init_ok = 0;
|
|
|
|
/**
|
|
* Initialize all flash device on FAL flash table
|
|
*
|
|
* @return result
|
|
*/
|
|
int fal_flash_init(void)
|
|
{
|
|
size_t i;
|
|
|
|
if (init_ok)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
for (i = 0; i < device_table_len; i++)
|
|
{
|
|
assert(device_table[i]->ops.read);
|
|
assert(device_table[i]->ops.write);
|
|
assert(device_table[i]->ops.erase);
|
|
/* init flash device on flash table */
|
|
if (device_table[i]->ops.init)
|
|
{
|
|
device_table[i]->ops.init();
|
|
}
|
|
log_d("Flash device | %*.*s | addr: 0x%08lx | len: 0x%08x | blk_size: 0x%08x |initialized finish.",
|
|
FAL_DEV_NAME_MAX, FAL_DEV_NAME_MAX, device_table[i]->name, device_table[i]->addr, device_table[i]->len,
|
|
device_table[i]->blk_size);
|
|
}
|
|
|
|
init_ok = 1;
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* find flash device by name
|
|
*
|
|
* @param name flash device name
|
|
*
|
|
* @return != NULL: flash device
|
|
* NULL: not found
|
|
*/
|
|
const struct fal_flash_dev *fal_flash_device_find(const char *name)
|
|
{
|
|
assert(init_ok);
|
|
assert(name);
|
|
|
|
size_t i;
|
|
|
|
for (i = 0; i < device_table_len; i++)
|
|
{
|
|
if (!strncmp(name, device_table[i]->name, FAL_DEV_NAME_MAX)) {
|
|
return device_table[i];
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|