ISP一键下载原理分析
ISP一键下载原理分析
ISP一键下载原理分析
ISP指电路板上的空白元器件可以编程写入最终用户代码, 而不需要从电路板上取下元器件。 已经编程的器件也可以用ISP方式擦除或再编程。
使用ISP的时候需要用到自举程序(BootLoader) , 自举程序存储在STM32器件的内部自举 ROM(系统存储器) 中。 其主要任务是通过一种可用的串行外设(USART、 CAN、 USB、 I2C等) 将应用程序下载到内部Flash存储器中。 每种串行接口都定义了相应的通信协议, 其中包含兼容的命令集和序列。
ISP普通下载
现在我们针对USART1的ISP进行分析, 通常的ISP下载的步骤如下:
1) 通过USB转串口线将电脑连接到STM32的USART1, 并打开电脑端的上位机;
2) 设置跳线保持BOOT0为高电平, BOOT1为低电平;
3) 复位单片机使其进入BootLoader模式, 通过上位机下载程序;
4) 下载完毕, 设置跳线保持BOOT0为低电平, BOOT1为低电平;
5) 复位单片机即可启动用户代码, 正常运行。
以上步骤有个不好的地方就是: 下载程序需要跳线及复位操作, 很繁琐。 理解了ISP的原理, 就理解一键ISP了。 它需要做的事情就是用上位机去控制BOOT0引脚和单片机的复位引脚, 电路图见下图。
BOOT配置
在ISP下载电路中, 需要配置BOOT引脚, BOOT引脚不同的配置会产生不同的启动方式, 具体见下表。
ISP一键下载
USB转串口大家都很熟悉, 一般是用RXD和TXD这两个引脚。 在一键ISP电路中, 我们需要用USB转串口的芯片的DTR引脚和RTS引脚来控制单片机的BOOT0和NRST, 原理如下:
1) 通过上位机控制U6(CH340G) 的RTS引脚为低电平, Q1导通, BOOT0的电平上拉为高电平(1K电阻直接接在3V3,接地的时候10k电阻直接接地)。
2) 通过上位机控制U6(CH340G) 的DTR引脚为高电平, 由于RTS为低电平, Q2导通, U18的2引脚为低电平, U18为一个模拟开关, 使能端由4引脚控制, 默认为高电平, U18的1引脚和2引脚导通, 所以NRST为低电平, 系统复位。
3) 单片机进入ISP模式(即BOOT0和BOOT1引脚电平被锁存之后,改变他们的引脚也不影响), 此时可以将DTR引脚设置为低电平, RTS设置为高电平。 Q1和Q2处于截止状态, BOOT0(原接地)和NRST(被拉高)还原到初始状态。
4) 上位机将程序下载到单片机, 下载完毕之后, 程序自动运行。
5) 有人认为U18、 Q1、 Q2是多余的, 用U6的RTS和DTR直接控制也可以。 正常情况下, 这样理解没有问题, 但是他们忽略了一点, 就是在单片机上电瞬间, 如果USB转串口连接了电脑, DTR和RTS的电平是变化的, 如果处理不好, 单片机会一直进入ISP模式, 或者系统会复位多次, 这种情况是不允许的。
6) 于是, 就有了全新的一键ISP电路。 我们主要是分析上电瞬间的逻辑关系, 单片机上电时通过示波器观察波形得知DTR和RTS的电平是变化的, 但是也有一个规律就是: 当RTS为低电平的时候,DTR也是低电平, 因此一般情况下Q2不会导通, 但由于这两个IO口的电平存在“竞争冒险”, 会出现RTS的下降沿刚好遇到DTR的上升沿, 这个时候Q2导通, 导致系统复位, 而BOOT0此时有可能也为高电平, 就会进入ISP模式。 这个是不受我们控制的, 而我们不想系统出现这样的情况, 因此加入了模拟开关来切断这种干扰。
7) 加入模拟开关U18, 通过控制U18的4引脚的开关来达到隔离干扰电平的目的。 下面我们分析一下延时开关电路, 上电瞬间, 电容C65通过电阻R18来充电, 由于电阻100kΩ 很大, 电容的充电电流很小, 电容充电达到U18的4引脚的有效电平2V大概耗时1秒, 在这个1秒时间内U18的模拟开关是断开的, 因此RTS和DTR的干扰电平不会影响到系统复位。 这样就保证了系统正常运行。