常见下载中的方式ISP,IAP,ICP
参考,CH552G中文手册,参考1
 ISP:In System Programing,在系统编程。是常见的,使用软件,先将某个引脚(例如boot)连接到合适的电平,然后使用烧录软件选择下载程序进行烧录
 如下图
 
 ICP(In Circuit Programing)目前主流的有Jtag(Joint Test Action Group)以及SWD(Serial Wire Debug)接口。而ICP编程就是以SWD接口进行的。实际上是使用特殊的烧录器把程序文件直接写入存储用户程序文件的地址、下面图中若正确连接J-Link,可以直接点击Load图标下载
 
 IAP:In applicating Programing,在应用编程。APP启动后,接口外面接口(如UART)发送来的 BIN数据,写入 另一片 Flash地址,并在指定位置记录新的 APP执行起始地址。重启系统,BootLoader 读入APP起始地址,执行新的APP。这种情况,Flash足够大,能放得下两片APP地址空间。
bootload引导程序,运行程序和厂家bootload
bootload引导程序可以看作是一种特殊的用户运行程序,使用ISP下载进flash后,这个bootload引导程序会将程序最后运行到厂家编写的bootload程序
 
首先明白程序的存储位置

IAP使用的寄存器和程序代码

 
 程序代码,
sbit EnableIAP  = P1^4;        //  P1^6;  
sbit LED  = P1^5; 
#define BOOT_ADDR  0x3800
typedef void( *pTaskFn)( void );//定义一个函数指针
pTaskFn tasksArr[1];  
 
void main( void ) 
{
	UINT16 i=0;
    while(1){
    SCK = ~SCK;     //P1.7                                                         //P17闪烁
    mDelaymS(50);
    if(EnableIAP == 0){                          //P14引脚检测到低电平跳转
      break;
    }
  }
	LED = ~LED;
  	EA = 0;                                             //关闭总中断,必加
	tasksArr[0] = BOOT_ADDR;
  mDelaymS( 100 ); 				
  (tasksArr[0])( );                   //跳至BOOT升级程序,使用ISP工具升级	
  while(1); 
}

使用IAP下载程序的过程
首先,先使用ISP把bootload引导程序下载到flash中,然后使用串口或USB下载。
 但是串口下载时,使用P1.6和P1.7作为串口的TX和RX引脚,这时候不需要。
 而正常使用ISP下载时,必须P3.6拉高才可以下载(这样才能进入bootload程序)。














![[React 进阶系列] useSyncExternalStore hook](https://i-blog.csdnimg.cn/direct/4d942022fca64e989acdeaef6b6664a1.png)




