把程序烧录到单片机上需要几步?
第一步打开冰箱(bushi
首先我们需要让单片机处于下载状态。
那么接下来我就以ESP32-C3这款芯片为例讲讲如何进入下载状态,并且这个自动下载电路是如何工作的。
其实几乎所有芯片都大差不差,懂了一款之后,接触新的芯片之后看看手册也知道应该如何下载了,选择ESP32-C3是因为前阵子设计了一款ESP32-C3的核心板,最近无聊焊接测试了一下没问题,所以顺手就以它为例吧,最近没什么事的话再找时间整合一下开源出来,今天先来讲讲关于串口烧录的部分。
芯片启动一共是两种,一种就是正常读取程序运行,另一种就是进入下载模式,ESP32-C3支持USB下载和串口下载。
一共是三个引脚来控制芯片的启动模式。
首先是GPIO2,两种模式都是高电平,所以我们在进行硬件设计的时候就要在GPIO2上加个上拉电阻,把GPIO2的电平固定在高位。
接下来是GPIO8,运行模式是任意值,下载模式是高电平,所以我们可以给GPIO8也加个上拉电阻,不影响我们选择启动的模式。
最后一个是GPIO9,我们也可以叫它BOOT引脚,当我们把GPIO2和8都固定在高电平的时候,决定启动模式的关键就是它了,当它为高电平的时候进入运行模式,低电平则进入下载模式。
GPIO9默认就是弱上拉,因此默认就是高电平,所以如果我们没有任何操作,上电之后芯片默认就是进入运行模式。
所以我们烧录程序并运行的流程就是首先拉低GPIO9也就是BOOT引脚,给芯片上电进入下载模式,烧录程序,接着把GPIO9拉高,重启芯片(按下RESET)。
这样很麻烦对吧。
有没有什么办法可以帮我们自动完成这一切呢?
有,那就是自动下载电路。
我们使用CH340芯片,可以帮我们将USB转为串口,并且额外的引脚由内置脚本配合我们的自动下载电路就可以完成上述繁琐的步骤。
我们先来看看自动下载电路。
首先BOOT引脚我们知道,默认是上拉的,而EN引脚实际上就是RESET复位引脚,默认也是上拉的,我们一般会接一个按钮,按下之后会拉低EN的电平,芯片停止工作,按下后松开NE恢复高电平,芯片重新启动。
简单来说我们通过DTR和RTS两个引脚配合俩三极管来控制BOOT和EN来实现自动下载电路。
在这里三极管仅作开关作用,并无放大作用,在这里我们先简单理解为给三极管的基极高电平则导通三极管。
两个引脚各两种状态,一共是四种排列组合。
首先让DTR和RTS都为低电平,那么两个三极管都截止,EN和BOOT都保持默认的高电平。
我们让DTR和RTS都为高电平,那么两个三极管都导通,EN和BOOT都是高电平。
以上两种状态都没用......
当我们让DTR为高电平,RTS为低电平,那么Q1三极管导通(上面那个),所以EN的电平会被RTS的低电平拉低。此刻BOOT和EN的电平分别为1和0。
当我们让RTS为高电平,DTR为低电平,那么Q2导通,同理,BOOT会被DTR拉低,此刻BOOT和EN的电平分别为0和1。
通过这个自动下载电路,我们就可以通过控制DTR和RTS来控制BOOT和EN的电平情况了。
具体怎么控制的我们不需要知道,因为CH340串口转换芯片帮我们都写好脚本了,但其实我们可以倒推一下DTR和RTS是如何工作的。
当我们需要通过串口向芯片烧录程序的时候,先将DTR置1,RTS置0,将芯片重启,接着马上将DTR置0,RTS置1。因为电路的速度非常快,所以在芯片视角看来就是先关机,然后开机后发现BOOT被置0了,所以进入下载模式。
程序烧录完成之后再将DTR置0,RTS置1,接着把这俩引脚的电平都拉低,这样就让BOOT和EN都恢复了高电平,芯片也重启完毕,同时程序也以及烧录进去了,所以运行的就是新的程序。
以上就是自动下载电路的分析过程,没看懂的小伙伴可以自己拿纸笔模拟一遍,不难理解的,虽然我们设计不出这么牛逼的电路,但是只是使用的话还是没问题的。
接下来就是CH340的选型了。
常见的型号有上面这一些,这是我买过的一家店,避免打广告,把涉及商家信息的部分截掉了(人家又没给我打钱)
价格大差不差,大家可以货比多家,一般来说是差不了两三毛,所以我随便找了一家买的。
我们通过CH340,不仅可以把USB转为串口,还可以转为RS232和RS485,但是要挑选好对应的型号。
其中CH340C/N/K/E/X/B 这些型号内置时钟,无需外部晶振,所以我们一般用的是这些,毕竟少了外部晶振,电路能简化一些。
CH340每个型号具体有啥不同,应用电路图咋设计这些我们就不多说了,有机会单独出一期,这边我们就简单讲讲选型。
目前我用过的有CH340C、CH340K、CH340N以及CH340X。
最终在ESP32-C3的核心板上我用的是CH340K。
首先我们要使用自动下载电路,就需要DTR和RTS这俩引脚,没有这俩引脚的型号无法使用自动下载电路,比如说CH340E和CH340N。
另外我们要考虑的就是大小和价格了。上图看的话各个型号大小相差不大,毕竟是原理图嘛,并不能代表实际大小,实际上大小还是有着不小的差别的。
上图从左到右依次是CH340X,CH340C,CH340N,CH340K。
最大的是CH340C,最小的是CH340X。
虽然CH340X又贵又难焊,但是它小啊。
虽然CH340C又便宜又好焊,但是它大啊。
具体要根据自己项目的需求选择,在ESP32-C3核心板里我使用了CH340K,过段时间我整理好之后就开源出来,实际上大家可以根据自己的实际情况选择CH340的型号。
内容就这么多,CH340各个型号之间的区别大家可以去官方手册里看,或者等我?