/**
  ******************************************************************************
  * 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-10-25	V1.0.0	AE TEAM
2023-03-15	V1.0.1	AE TEAM		Notes:删除BOOT_PIN相关的代码,支持上位机引导程序至App和引导程序至Bootloader按键
2024-03-01  V1.0.1  Lisq        Notes:APP程序删除MicroBoot通信协议，Go Bootloader改为简化的单发单收命令协议。
<--------------------------------------------------------------------------------
Demo introduction:
--------------------------------------------------------------------------------->
本示例功能：spi_bootloader

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

辅助工具：
ESBridge

辅助软件：
ESBurner上位机软件、ESBridge上位机软件
<--------------------------------------------------------------------------------
测试步骤：
--------------------------------------------------------------------------------->
1) 编译Bootloader工程，编译通过后将程序下载到目标芯片；
2) 打开上位机软件，选择芯片型号；
3) 打开上位机软件ESBridge切换到SPI页面并进行配置（主从模式：主机，时钟相位：第二边沿，时钟极性：空闲高电平，片选极性：低电平有效，移位方向：高位在前，时钟频率：164K）
4) 在ESBridge上位机界面中点击“SPI_BOOT”进入SPI_BOOT配置页面，点击“芯片”选择：ES32F010x，点击“Hex”加载要烧录的app程序；
5) 复位芯片，然后进行单次操作或者自动烧录；
6) 烧录完成后，点击“引导程序到App”，上位机返回运行成功，可以看到板载LED闪烁；
7) 点击“引导程序到Bootloader”，上位机返回运行成功，则回到Bootloader程序。

<--------------------------------------------------------------------------------
注意：
--------------------------------------------------------------------------------->
1) 测试环境需要共GND。
2) 烧录程序前需确认配置字是否正确（如：IWDTEN设置为由软件使能，BOOT地址设置为0x0000,其他配置字正常配置即可）
3) 带crc校验信息的hex文件由add_checksum.exe工具生成
4) ESMap文件里的Go_Bootloader需设置为2。

<--------------------------------------------------------------------------------
System clock:
--------------------------------------------------------------------------------->
Internal HRC 32MHz

<--------------------------------------------------------------------------------
Pin connection: 
--------------------------------------------------------------------------------->
SPI0_NSS  ---- PA0[GPIO_FUNC_2]
SPI0_SCK  ---- PA10[GPIO_FUNC_2]
SPI0_MOSI ---- PA11[GPIO_FUNC_2]
SPI0_MISO ---- PA12[GPIO_FUNC_2]