跳到主要内容

tkl_flash | Flash 驱动

tkl_flash API 提供内核层(TKL)的片上 Flash 存储操作:读取、写入、擦除、加锁、解锁,以及分区布局查询。每个函数成功时返回 OPRT_OK,失败时返回 tuya_error_code.h 中定义的错误码。

tkl_flash.c 实现由移植工具自动生成。你在 BEGINEND 注释标记之间添加平台相关代码,重新生成时这部分代码会保留。

tkl_flash_read

OPERATE_RET tkl_flash_read(uint32_t addr, uint8_t *dst, uint32_t size);

从 Flash 读取数据。

参数方向说明
addr输入要读取的 Flash 地址。
dst输出接收数据的缓冲区指针。
size输入要读取的字节数。

成功时返回 OPRT_OK,其他值表示发生错误,详见 tuya_error_code.h

tkl_flash_write

OPERATE_RET tkl_flash_write(uint32_t addr, const uint8_t *src, uint32_t size);

向 Flash 写入数据。

参数方向说明
addr输入要写入的 Flash 地址。
src输入存放待写入数据的缓冲区指针。
size输入要写入的字节数。

成功时返回 OPRT_OK,其他值表示发生错误,详见 tuya_error_code.h

备注

写入前请先擦除目标区域。Flash 比特位只能通过擦除清零,因此向未擦除的数据区写入会得到错误的结果。

tkl_flash_erase

OPERATE_RET tkl_flash_erase(uint32_t addr, uint32_t size);

擦除一段 Flash 区域。

参数方向说明
addr输入要擦除的 Flash 地址。
size输入要擦除的 Flash 块大小。

成功时返回 OPRT_OK,其他值表示发生错误,详见 tuya_error_code.h

tkl_flash_lock

OPERATE_RET tkl_flash_lock(uint32_t addr, uint32_t size);

锁定一段 Flash 区域,使其不可写入和擦除。

参数方向说明
addr输入要锁定区域的起始地址。
size输入要锁定区域的大小。

成功时返回 OPRT_OK,其他值表示发生错误,详见 tuya_error_code.h

tkl_flash_unlock

OPERATE_RET tkl_flash_unlock(uint32_t addr, uint32_t size);

解锁之前已锁定的 Flash 区域。

参数方向说明
addr输入要解锁区域的起始地址。
size输入要解锁区域的大小。

成功时返回 OPRT_OK,其他值表示发生错误,详见 tuya_error_code.h

tkl_flash_get_one_type_info

OPERATE_RET tkl_flash_get_one_type_info(TUYA_FLASH_TYPE_E type, TUYA_FLASH_BASE_INFO_T *info);

查询指定 Flash 类型的分区布局。

参数方向说明
type输入要查询的 Flash 类型,参见 TUYA_FLASH_TYPE_E
info输出指向 TUYA_FLASH_BASE_INFO_T 的指针,用于接收分区布局。

成功时返回 OPRT_OK,其他值表示发生错误,详见 tuya_error_code.h

TUYA_FLASH_TYPE_E

标识要查询的逻辑存储区。部分取值如下:

枚举值含义
TUYA_FLASH_TYPE_BTL0Bootloader 区 0。
TUYA_FLASH_TYPE_BTL1Bootloader 区 1。
TUYA_FLASH_TYPE_APP应用固件区。
TUYA_FLASH_TYPE_OTAOTA 下载区。
TUYA_FLASH_TYPE_KV_DATA键值数据区。
TUYA_FLASH_TYPE_UF用户文件区。
TUYA_FLASH_TYPE_ALL全部分区。

完整枚举请参见 tuya_cloud_types.h

TUYA_FLASH_BASE_INFO_T

typedef struct {
uint32_t block_size;
uint32_t start_addr;
uint32_t size;
} TUYA_FLASH_PARTITION_T;

typedef struct {
uint32_t partition_num;
TUYA_FLASH_PARTITION_T partition[TUYA_FLASH_TYPE_MAX_PARTITION_NUM];
} TUYA_FLASH_BASE_INFO_T;
字段说明
partition_numpartition 数组中有效条目的数量。
partition分区描述符数组,每项包含 block_sizestart_addrsize