From cc432b761c884a0bd8e9d83db0a4e26109fc08b1 Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期五, 08 十一月 2024 15:35:38 +0800 Subject: [PATCH] 安邦手环GPS删除部分无用数据和修改4G波特率9600出厂测试固件 --- keil/include/drivers/mk_flash.h | 256 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 256 insertions(+), 0 deletions(-) diff --git a/keil/include/drivers/mk_flash.h b/keil/include/drivers/mk_flash.h new file mode 100644 index 0000000..5b65ab2 --- /dev/null +++ b/keil/include/drivers/mk_flash.h @@ -0,0 +1,256 @@ +/* + * Copyright (c) 2019-2023 Beijing Hanwei Innovation Technology Ltd. Co. and + * its subsidiaries and affiliates (collectly called MKSEMI). + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into an MKSEMI + * integrated circuit in a product or a software update for such product, + * must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * 3. Neither the name of MKSEMI nor the names of its contributors may be used + * to endorse or promote products derived from this software without + * specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * MKSEMI integrated circuit. + * + * 5. Any software provided in binary form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY MKSEMI "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL MKSEMI OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef MK_FLASH_H_ +#define MK_FLASH_H_ + +#include "mk_common.h" +#include "mk_dma.h" +#include "mk_misc.h" + +#ifndef FLASH_INT_MODE_EN +#define FLASH_INT_MODE_EN (1) +#endif + +#ifndef FLASH_DMA_MODE_EN +#define FLASH_DMA_MODE_EN (1) +#endif + +#ifndef FLASH_WRITE_EN +#define FLASH_WRITE_EN (1) +#endif + +/** + * @addtogroup MK8000_Flash + * @{ + */ + +#define FLASH_PAGE_SIZE 0x100U +#define FLASH_SECTOR_SIZE 0x1000U +#define FLASH_BLOCK_SIZE 0x10000U + +#define FLASH_OP_ERASE 1 +#define FLASH_OP_WRITE 2 +#define FLASH_OP_READ 3 + +// Flash status check timeout +#define FLASH_OP_ERASE_SECTOR_TIMEOUT __MS_TO_TICKS(600) +#define FLASH_OP_ERASE_BLOCK_TIMEOUT __MS_TO_TICKS(4000) +#define FLASH_OP_WRITE_PAGE_TIMEOUT __MS_TO_TICKS(6) +#define FLASH_OP_WRITE_STATUS_TIMEOUT __MS_TO_TICKS(40) + +/** FLASH device instance */ +enum FLASH_DEV_T +{ + FLASH_ID0 = 0, + FLASH_MAX_NUM +}; + +/** FLASH operation code */ +enum FLASH_OPCODE_T +{ + FLASH_OPCODE_READ = 0, + FLASH_OPCODE_PROGRAM_PAGE, + FLASH_OPCODE_GET_STATUS, + FLASH_OPCODE_GET_STATUS1, + FLASH_OPCODE_ERASE_SECTOR, + FLASH_OPCODE_ERASE_BLOCK, + FLASH_OPCODE_WRITE_ENABLE, + FLASH_OPCODE_WRITE_REGISTER, + FLASH_OPCODE_RDID, + FLASH_OPCODE_POWER_DOWN, + FLASH_OPCODE_RELEASE_POWER_DOWN, + FLASH_OPCODE_NUM, +}; + +/** FLASH operation state */ +enum FLASH_STATE_T +{ + FLASH_STATE_RESET = 0, + FLASH_STATE_READY, + FLASH_STATE_BUSY_READ, + FLASH_STATE_BUSY_ERASE, + FLASH_STATE_BUSY_WRITE, + FLASH_STATE_TIMEOUT, + FLASH_STATE_ERROR +}; + +/*! @brief FLASH data direction */ +enum FLASH_DATA_DIR_TYPE_T +{ + FLASH_DATA_IN = 0x0U, /*!< Data input from serial flash. */ + FLASH_DATA_OUT = 0x1U /*!< Data output to serial flash. */ +}; + +/*! @brief FLASH command opcode format */ +enum FLASH_CMD_FORMAT_T +{ + FLASH_CMD_ALL_SERIAL = 0x0, /*!< All fields of command are serial. */ + FLASH_CMD_DATA_QUAD_DUAL = 0x1U, /*!< Only data field is dual/quad, others are serial. */ + FLASH_CMD_OP_SERIAL = 0x2U, /*!< Only opcode field is serial, others are quad/dual. */ + FLASH_CMD_ALL_QUAD_DUAL = 0x3U /*!< All fields of command are dual/quad mode. */ +}; + +/*! @brief FLASH command type */ +enum FLASH_CMD_TYPE_T +{ + FLASH_CMD_OP_ONLY = 0x1U, /*!< Command only have opcode, no address field */ + FLASH_CMD_OP_ADDR_1B = 0x2U, /*!< Command have opcode and also one byte address field */ + FLASH_CMD_OP_ADDR_2B = 0x3U, /*!< Command have opcode and also two bytes address field */ + FLASH_CMD_OP_ADDR_3B = 0x4U, /*!< Command have opcode and also three bytes address field. */ + FLASH_CMD_OP_ADDR_4B = 0x5U, /*!< Command have opcode and also four bytes address field */ + FLASH_CMD_NO_OP_ADDR_3B = 0x6U, /*!< Command have no opcode and three bytes address field */ + FLASH_CMD_NO_OP_ADDR_4B = 0x7U /*!< Command have no opcode and four bytes address field */ +}; + +/*! @brief FLASH command structure */ +struct FLASH_CMD_T +{ + uint32_t polling_mode; /*!< For command need to read data from serial flash */ + enum FLASH_DATA_DIR_TYPE_T data_dir; /*!< Data direction of this command. */ + enum FLASH_CMD_FORMAT_T format; /*!< Command format */ + enum FLASH_CMD_TYPE_T type; /*!< Command type */ + uint16_t data_len; /*!< How many data bytes are needed in this command. */ + uint8_t dummy_len; /*!< How many intermediate bytes needed */ + uint8_t opcode; /*!< Command opcode value */ +}; + +/*! + * @brief FLASH configuration structure. + */ +struct FLASH_CFG_T +{ + uint16_t timeout; /*!< SPI transfer timeout, the unit is SCK cycles */ + uint8_t cs_high_time; /*!< CS high time cycles */ + bool dual_mode : 1; /*!< true: dual mode, false: quad mode */ + bool prefetch_dis : 1; /*!< True means FLASH will not attempt a speculative prefetch */ + bool cache_prefetch_dis : 1; /*!< Disable prefetch of cache line */ + bool feedback_clk_sel : 1; /*!< Is data sample uses feedback clock */ + bool spi_sck_high : 1; /*!< FLASH spi mode select */ + bool spi_falling_edge_active : 1; /*!< If enable read full clock cycle. */ + bool dma_en : 1; + bool int_en : 1; + uint32_t start_addr; + uint32_t total_size; + uint32_t block_size; + uint16_t sector_size; + uint16_t page_size; +}; + +struct FLASH_DMA_OP_CFG_T +{ + uint32_t start_addr; + const uint8_t *buf; + uint32_t len; + uint32_t count; +}; + +struct FLASH_WRITE_NBYTES_CFG_T +{ + const uint8_t *src_addr; + uint32_t write_start_addr; + uint32_t write_end_addr; + uint32_t offset_addr; + uint32_t page_start; + uint32_t page_end; + uint32_t page_count; + uint32_t write_num; + uint32_t write_count; + uint32_t start_page_inc_data_len; + uint32_t end_page_inc_data_len; + uint32_t src_buf_pos; + __IOM uint32_t dest_tmp_addr; +}; + +struct FLASH_HANDLE_T +{ + FLASH_CTRL_TypeDef *const base; + const IRQn_Type irq; + enum DMA_CH_T dma_wr_ch; + enum DMA_CH_T dma_rd_ch; + enum FLASH_STATE_T state; + struct FLASH_CFG_T config; + struct FLASH_WRITE_NBYTES_CFG_T wr_nbyte_cfg; + struct FLASH_DMA_OP_CFG_T dma_op; + uint32_t code; // reserved | err_code | int_flag | op_code + drv_callback_t callback; + uint8_t flash_type; + uint8_t wrsr_type; + uint8_t work_mode; + uint8_t promote_fclk; + uint8_t is_open; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct FLASH_HANDLE_T flash_handle[FLASH_MAX_NUM]; + +int flash_open(enum FLASH_DEV_T id, struct FLASH_CFG_T *cfg); +int flash_close(enum FLASH_DEV_T id); + +void RAM_FUNC flash_power_up(enum FLASH_DEV_T id); +void RAM_FUNC flash_power_down(enum FLASH_DEV_T id); + +int flash_sector_erase(enum FLASH_DEV_T id, uint32_t sector); +int flash_block_erase(enum FLASH_DEV_T id, uint32_t block); + +int flash_erase(enum FLASH_DEV_T id, uint32_t start_addr, uint32_t len); + +int flash_write_nbytes(enum FLASH_DEV_T id, uint32_t start_addr, const uint8_t *buf, uint32_t len); +int flash_write(enum FLASH_DEV_T id, uint32_t start_addr, const uint8_t *buf, uint32_t len); +int flash_read(enum FLASH_DEV_T id, uint32_t start_addr, uint8_t *buf, uint32_t len); + +void FLASH_CTRL_IRQHandler(void); + +bool flash_check_busy(enum FLASH_DEV_T id); + +int RAM_FUNC flash_open_for_xip(enum FLASH_DEV_T id); + +#ifdef __cplusplus +} +#endif + +/** + * @} + */ + +#endif /* MK_FLASH_H_ */ -- Gitblit v1.9.3