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/components/wsf/sources/platform/pal_flash.c |  235 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 235 insertions(+), 0 deletions(-)

diff --git a/keil/include/components/wsf/sources/platform/pal_flash.c b/keil/include/components/wsf/sources/platform/pal_flash.c
new file mode 100644
index 0000000..020c720
--- /dev/null
+++ b/keil/include/components/wsf/sources/platform/pal_flash.c
@@ -0,0 +1,235 @@
+/*************************************************************************************************/
+/*!
+ *  \file
+ *
+ *  \brief  PAL Flash driver.
+ *
+ *  Copyright (c) 2018-2019 Arm Ltd. All Rights Reserved.
+ *
+ *  Copyright (c) 2019-2020 Packetcraft, Inc.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+/*************************************************************************************************/
+
+#include <string.h>
+#include "pal_flash.h"
+#include "mk_flash.h"
+
+/**************************************************************************************************
+  Macros
+**************************************************************************************************/
+// The size of flash space available to users is 8K
+#define MK8000_USER_TOTAL_SIZE 0x2000
+// The starting address is 0x0407E000, 126th sector
+#define MK8000_USER_START_ADDR 0x0407E000
+// The end address is 0x0407FFFF
+#define MK8000_USER_END_ADDR (MK8000_USER_START_ADDR + MK8000_USER_TOTAL_SIZE - 1)
+
+/*! Flash block size. */
+#define PAL_FLASH_SECTOR4K 1
+// #define PAL_FLASH_SECTOR64K 16
+
+#define PAL_FLASH_SECTOR4K_SIZE FLASH_SECTOR_SIZE
+// #define PAL_FLASH_SECTOR64K_SIZE 0x10000
+
+/*! Flash Total size. */
+#define PAL_FLASH_TOTAL_SIZE MK8000_USER_TOTAL_SIZE
+
+/*! Flash internal cache buffer size. Note: should be at least 2. */
+#define PAL_FLASH_CACHE_BUF_SIZE 11
+
+/*! Flash word size. */
+#define PAL_FLASH_WORD_SIZE 4
+
+/*! Aligns a value to word size. */
+#define PAL_FLASH_WORD_ALIGN(value) (((value) + (PAL_FLASH_WORD_SIZE - 1)) & ~(PAL_FLASH_WORD_SIZE - 1))
+/*! Validates if a value is aligned to word. */
+#define PAL_FLASH_IS_WORD_ALIGNED(value) (((uint32_t)(value) & (PAL_FLASH_WORD_SIZE - 1)) == 0)
+
+/*! QSPI flash commands. */
+#define QSPI_STD_CMD_WRSR 0x01
+#define QSPI_STD_CMD_RSTEN 0x66
+#define QSPI_STD_CMD_RST 0x99
+
+#ifdef DEBUG
+
+/*! \brief      Parameter check. */
+#define PAL_FLASH_PARAM_CHECK(expr)                   \
+    {                                                 \
+        if (!(expr))                                  \
+        {                                             \
+            palFlashCb.state = PAL_FLASH_STATE_ERROR; \
+            return;                                   \
+        }                                             \
+    }
+
+#else
+
+/*! \brief      Parameter check (disabled). */
+#define PAL_FLASH_PARAM_CHECK(expr)
+
+#endif
+
+/**************************************************************************************************
+  Local Variables
+**************************************************************************************************/
+
+/*! flash cache buffer. */
+static uint32_t palFlashCacheBuf[PAL_FLASH_CACHE_BUF_SIZE];
+static enum FLASH_DEV_T MK8000_FLASH_ID = FLASH_ID0;
+static enum FLASH_DEV_T flash_id = FLASH_MAX_NUM;
+
+/*! \brief      Control block. */
+static struct
+{
+    PalFlashState_t state; /*!< State. */
+    uint32_t writeAddr;    /*!< Write address. */
+} palFlashCb;
+
+/**************************************************************************************************
+  Global Functions
+**************************************************************************************************/
+
+/*************************************************************************************************/
+/*!
+ *  \brief  Initialize flash.
+ *
+ *  \param[in] actCback     Callback function.
+ */
+/*************************************************************************************************/
+void PalFlashInit(PalFlashCback_t actCback)
+{
+    (void)palFlashCacheBuf;
+    if (DRV_OK == flash_open(MK8000_FLASH_ID, NULL))
+    {
+        flash_id = FLASH_ID0;
+    }
+}
+
+/*************************************************************************************************/
+/*!
+ *  \brief  De-initialize flash.
+ */
+/*************************************************************************************************/
+void PalFlashDeInit(void)
+{
+    flash_close(flash_id);
+}
+
+/*************************************************************************************************/
+/*!
+ *  \brief     Reads data from flash storage.
+ *
+ *  \param[in] pBuf     Pointer to memory buffer where data will be stored.
+ *  \param[in] size     Data size in bytes to be read.
+ *  \param[in] srcAddr  Word aligned address from where data is read.
+ */
+/*************************************************************************************************/
+void PalFlashRead(void *pBuf, uint32_t size, uint32_t srcAddr)
+{
+    uint32_t realAddr;
+    memset(pBuf, 0xFF, size);
+    realAddr = MK8000_USER_START_ADDR + srcAddr;
+    flash_read(flash_id, realAddr, (uint8_t *)pBuf, size);
+}
+
+/*************************************************************************************************/
+/*!
+ *  \brief     Writes data to flash storage.
+ *
+ *  \param[in] pBuf     Pointer to memory buffer from where data will be written.
+ *  \param[in] size     Data size in bytes to be written.
+ *  \param[in] dstAddr  Word aligned address to write data.
+ */
+/*************************************************************************************************/
+void PalFlashWrite(const uint8_t *pBuf, uint32_t size, uint32_t dstAddr)
+{
+#if FLASH_WRITE_EN
+    uint32_t realAddr;
+    realAddr = MK8000_USER_START_ADDR + dstAddr;
+    flash_write_nbytes(flash_id, realAddr, pBuf, size);
+#endif
+}
+
+/*************************************************************************************************/
+/*!
+ *  \brief  Erase sector.
+ *
+ *  \param[in] numOfSectors       Number of sectors to be erased.
+ *  \param[in] startAddr          Word aligned address.
+ */
+/*************************************************************************************************/
+void PalFlashEraseSector(uint32_t numOfSectors, uint32_t startAddr)
+{
+#if FLASH_WRITE_EN
+    uint32_t realAddr;
+    realAddr = MK8000_USER_START_ADDR + startAddr;
+    if (PAL_FLASH_IS_WORD_ALIGNED(realAddr) && (numOfSectors > 0) && (numOfSectors <= (PAL_FLASH_TOTAL_SIZE / PAL_FLASH_SECTOR4K_SIZE)))
+    {
+        uint32_t sector_idx = (realAddr - FLASH_BASE) / PAL_FLASH_SECTOR4K_SIZE;
+        if ((sector_idx + numOfSectors) <= (FLASH_SIZE / PAL_FLASH_SECTOR4K_SIZE))
+        {
+            for (uint32_t i = 0; i < numOfSectors; i++, sector_idx++)
+            {
+                flash_sector_erase(flash_id, sector_idx);
+            }
+        }
+    }
+#endif
+}
+
+/*************************************************************************************************/
+/*!
+ *  \brief  Erase chip. It is not recommended to use since it takes up to 240s.
+ */
+/*************************************************************************************************/
+void PalFlashEraseChip(void)
+{
+}
+
+/*************************************************************************************************/
+/*!
+ *  \brief  Get total size of NVM storage.
+ *
+ *  \return Total size.
+ */
+/*************************************************************************************************/
+uint32_t PalNvmGetTotalSize(void)
+{
+    return PAL_FLASH_TOTAL_SIZE;
+}
+
+/*************************************************************************************************/
+/*!
+ *  \brief  Get sector size of NVM storage.
+ *
+ *  \return Sector size.
+ */
+/*************************************************************************************************/
+uint32_t PalNvmGetSectorSize(void)
+{
+    return PAL_FLASH_SECTOR4K_SIZE;
+}
+
+/*************************************************************************************************/
+/*!
+ *  \brief     Get flash state.
+ *
+ *  \return    flash state.
+ */
+/*************************************************************************************************/
+PalFlashState_t PalFlashGetState(void)
+{
+    return palFlashCb.state;
+}

--
Gitblit v1.9.3