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

<--------------------------------------------------------------------------------
Version history:
--------------------------------------------------------------------------------->
2023-02-17       V1.0.0      AE TEAM

<--------------------------------------------------------------------------------
Demo introduction:
--------------------------------------------------------------------------------->
本示例功能：UART bootloader, 通过uart接收shell命令，xmodem-1k 接收APP或DATA文件

<--------------------------------------------------------------------------------
测试环境:
--------------------------------------------------------------------------------->
测试用板；
ES-PDS-ES32VF2264LT（需要对开发板进行如下操作：闭合JP1、JP2、JP3、JP4；断开SB1、SB2、SB3。）
ES-EVB-2264LQ-LCD-T1

注意：在main.h中，使用宏USE_BOARD_ES_PDS来区分硬件测试板。

辅助工具：
ES-LINK2OB

辅助软件：
ECOM串口助手

<--------------------------------------------------------------------------------
测试步骤：
--------------------------------------------------------------------------------->
1) 编译BOOT工程，编译通过后将程序下载到目标芯片。
2) 复位芯片，或在线调试，运行程序。
3) 在串口助手软件中找到对应的串口并打开，波特率设置为921600。
4) 准备APP程序
  a)打开APP工程，将程序起始起始地址改为0x8000，即修改Projects\ES32VF2264\Applications\GUI\escodemaker_demo_ES32VF2264LT_320x240\es32vf2264.ld文件，修改后的内容如下。
		I-SRAM : ORIGIN = 0x00008000 , LENGTH = 0x38000
  b)编译后获得APP_bin文件。该文件为路径：
    Projects\ES32VF2264\Applications\GUI\escodemaker_demo_ES32VF2264LT_320x240\CDK\Obj\demo_0x8000.bin。
  c)使用Utilities\add_checksum.exe工具，添加CRC和长度信息。导入demo_0x8000.bin，选择保存格式为bin，再点击保存，就能生成带有crc和长度的bin文件（es_app_crc.bin）。
5) 准备DATA程序
  a)如果es-codeaker的GUI模块中使用了外部导入的字体图片，es-codeaker在生成代码时会生成spiflash数据文件Projects\ES32VF2264\Applications\GUI\escodemaker_demo_ES32VF2264LT_320x240\es_gui_data.bin
  b)使用Utilities\add_checksum.exe工具，使数据文件数据1024字节对齐。导入es_gui_data.bin，选择保存格式为bin，再点击保存，生成带有crc和长度的对齐后的bin文件（es_gui_data_crc.bin）。
6) 使用1K Xmodom协议传输文件，因此需要支持该命令的串口助手。
	升级app的方法:发送"update_app"命令，发送es_app_crc.bin文件。
	升级数据的方法:发送"update_data"命令，发送es_gui_data_crc.bin文件。
在串口助手中，点击打开文件，选择生成的demo_0x8000_crc.bin文件，选择传输协议为"1K Xmodom Send"
7) 输入"run_flash",即可跳转flash运行程序。
8)如果不想手打命令或者觉得串口工具效率低下，可以直接使用download_pyhon_script/QWQ.py脚本，该脚本的使用说明见download_pyhon_script/ReadMe.txt。

<--------------------------------------------------------------------------------
注意：
--------------------------------------------------------------------------------->
1) 当成功下载APP程序后，再次上电后程序会等待3s，若无任何动作，则自动引导进入APP。
2) MRST复位不会恢复配置字值，也就是说在APP运行时，按RESET按键不会从BOOT启动，需重新上电，方能从BOOT启动。
<--------------------------------------------------------------------------------
System clock:
--------------------------------------------------------------------------------->
PLL 72M

<--------------------------------------------------------------------------------
Pin connection: 
--------------------------------------------------------------------------------->
PA2 --- CUART1_TX
PA3 --- CUART1_RX
PA4 --- SPI0_NSS
PA5 --- SPI0_SCK
PA6 --- SPI0_MISO
PA7 --- SPI0_MOSI