/**
  ******************************************************************************
  * 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) 2023 Shanghai Eastsoft Microelectronics Co., Ltd. ALL rights reserved.
  *******************************************************************************
  */

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

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

<--------------------------------------------------------------------------------
测试环境:
--------------------------------------------------------------------------------->
测试用板；
ES-PDS-ES32VF2264LT

辅助软件：
ESBridge上位机软件

<--------------------------------------------------------------------------------
测试步骤：
--------------------------------------------------------------------------------->
1) 编译Bootloader工程，编译通过后将程序下载到目标芯片；
2) 将ES-PDS-ES32VF2264的NSS/SCK/MISO/MOSI分别连接ESBridge的NSS/SCK/MISO/MOSI；
3) 打开上位机软件，选择SPI标签页，设置主机-第二边沿-空闲高电平-328kHz，点击打开，点击SPI_BOOT，在SPI_BOOT界面进行BOOT操作；
4) 复位芯片，然后进行单次操作或者自动烧录；
5) 烧录完成后，点击“引导程序到App”，上位机返回运行成功，可以看到板载LED闪烁；
6) 点击“引导程序到Bootloader”，上位机返回运行成功，则回到Bootloader程序。

<--------------------------------------------------------------------------------
注意：
--------------------------------------------------------------------------------->
1) 测试环境需要共GND。
2) BOOT程序复位后会判断APP的长度和CRC值，若匹配则跳转到APP程序。
3) APP程序的CRC校验值和APP长度，通过数据合并功能，与将APP的hex文件合并为一个新的hex，上位机烧录时使用合并后的hex。
4) 校验信息存放地址：CRC_CAL_ADDR：0x3BE00  APP长度：0x3BE00。
5) 烧录程序前需确认配置字是否正确（如：IWDTEN设置为由软件使能，BOOT地址设置为0x3C000,其他配置字正常配置即可）。
6) 数据合并，请使用Utilities文件夹中的软件add_checksum.exe。
7) MRST复位不会恢复配置字值，也就是说在APP运行时，按RESET按键不会从BOOT启动，需重新上电，方能从BOOT启动。
8) ESMap文件里的Go_Bootloader需设置为2。

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

<--------------------------------------------------------------------------------
Pin connection:
--------------------------------------------------------------------------------->
NSS  ---- (PA4, GPIO_FUNC_2)
SCK  ---- (PA5, GPIO_FUNC_2)
MISO ---- (PA6, GPIO_FUNC_2)
MOSI ---- (PA7, GPIO_FUNC_2)
