/**
  ******************************************************************************
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
  *
  * Copyright (C) 2021 Shanghai Eastsoft Microelectronics Co., Ltd. ALL rights reserved.
  *******************************************************************************
  */

<--------------------------------------------------------------------------------
Version history:
--------------------------------------------------------------------------------->
2021-4-30	V1.0.0	AE TEAM
2023-3-9	V1.0.1	AE TEAM
2024-03-04  V1.0.1  Lisq     Notes:APP程序删除MicroBoot通信协议，Go Bootloader改为简化的单发单收命令协议。

<--------------------------------------------------------------------------------
Demo introduction:
--------------------------------------------------------------------------------->
本示例功能：SPI BootLoader demo，通过SPI通信，BootLoader程序引导MCU完成查空，擦除，烧录，校验及跳转功能。

<--------------------------------------------------------------------------------
测试环境:
--------------------------------------------------------------------------------->
测试用板；
ES-PDS-ES32F369x-V1.3

辅助工具：
多功能接口转换工具ESBridge

辅助软件：
ESBridge上位机软件

<--------------------------------------------------------------------------------
测试步骤：
--------------------------------------------------------------------------------->
1) 编译Bootloader工程，编译通过后将程序下载到目标芯片；
2) 将MCU的PC0、PC1、PC2、PC3分别连接ESBridge的CS/SCK/MISO/MOSI；
3) ESBridge通过USB线缆连接PC，打开上位机软件，“设备操作”选项里选择“打开设备”；
4) 上位机切换到SPI标签页，配置SPI通信参数：主从模式（主机），时钟相位（第二边沿采样），时钟极性（空闲高电平），片选极性（低电平），移位方向（高位在前），时钟频率（656KHz）；
5) 点击SPI_BOOT按键，进入SPI_BOOT配置页面；
6）依次选择目标芯片型号，待烧录文件；
7) 复位芯片，然后进行单次操作或者自动烧录；
8) 烧录完成后，点击“引导程序到App”，上位机返回运行成功，可以看到板载LED闪烁；
9) 点击“引导程序到Bootloader”，上位机返回运行成功，则回到Bootloader程序。

<--------------------------------------------------------------------------------
注意：
--------------------------------------------------------------------------------->
1) 测试环境需要共GND。
2) 3.3V供电。
3) MCU固件将不断校验CRC_CAL_ADDR处指定长度的CRC32值，若相等则跳转到APP_ADDR处执行app程序
4) APP程序的crc校验值和crc计算长度通过数据合并功能完成计算和地址分配并生成一个新的hex文件
   新hex文件融合原hex文件和crc校验信息，上位机烧录时使用新hex文件（UART_BOOT含数据合并功能）
5）校验信息存放地址：CRC_CAL_ADDR：0x7DC00  校验长度：0x7DC00  
6) 烧录程序前需确认配置字是否正确（如：IWDTEN设置为由软件使能，BOOT地址设置为0x7E000
   其他配置字正常配置即可
7) ESMap文件里的Go_Bootloader需设置为2。

<--------------------------------------------------------------------------------
System clock:
--------------------------------------------------------------------------------->
PLL 72MHz.

<--------------------------------------------------------------------------------
Pin connection:
--------------------------------------------------------------------------------->
SPI0_NSS  ---- (PC0, GPIO_FUNC_4)
SPI0_SCK  ---- (PC1, GPIO_FUNC_4)
SPI0_MISO ---- (PC2, GPIO_FUNC_4)
SPI0_MOSI ---- (PC3, GPIO_FUNC_4)

LED       ---- (PC12, GPIO_FUNC_1)
