这里写自定义目录标题
UART0下载
1、占用资源:串口0
2、占用引脚:IO43(TX)、IO44(RX)
3、注意事项:
4、优缺点:
缺点:
需要使用串口转USB芯片比如CH340之类的外设,会导致硬件成本的增加。
优点:
串口打印调试信息十分的方便,串口会一直保持连接,无论ESP32S3处于下载、复位、运行哪个状态,可以完全监控这整个过程。
5、arduino/米思齐下载配置:
Hardware CDC下载
1、占用资源:USB功能
2、占用引脚:IO19(DN)、IO20(DP)
3、注意事项:
当USB CDC On Boot设置为enable的时候,也就是使用虚拟串口功能的时候,其运行会占用较多的系统资源,可能其他硬件串口的接收出行延迟,也有可能会导致主程序运行的效率降低。
还有一个要注意的就是当USB CDC On Boot设置为enable的时候,你就可以使用Serial.print等语法打印调试信息,这个时候Serial的信息就会从虚拟串口到USB然后到串口监视器上显示。但是一定要注意一个问题就是程序中初始化串口Serial的时候,要把while(!Serial);这个语句去掉,或者是加一个延时强制退出的工作机致,要不然就会出现你必须用电脑打开对应的串口监视器,然后这个while(!Serial);语句
他才能跳出循环的问题。
还有一个问题,就是如果我们能程序中如果想用到串口0,那么应该使用Serial0进行操作,也就是把原来的Serial变为Serial0。
4、优缺点:
缺点:
在ESP32S3复位的时候,串口会消失,需要重新选择(这个问题主要是在米思齐上,他不支持热插拔,也就是不能够自动连接上一次连接过的串口,当然你可以把电脑其他的串口外设全部禁用掉,这样子当你ESP32S3串口再次出现的时候就会自动选择);
还有就是下载完成之后需要重开串口监视器,因为你要按一下复位程序才会运行,按下复位之后串口就断连了,所以需要根据串口来进行调试的时候其实在使用体验上会差很多。
优点:可以节省转串口芯片
5、arduino/米思齐下载配置(和采用UART0下载的配置一样)
USB CDC On Boot这个功能慎用。
USB-OTG CDC(TinyUSB) 下载
1、占用资源:USB功能
2、占用引脚:IO19(DN)、IO20(DP)
3、注意事项:
和采用Hardware CDC下载的区别在于,这个usb功能是模拟出来的,然后他是一个总线的概念,他可以支持更多的功能,比如实现模拟U盘挂载等等一系列骚操作,有需求的可以进一步去了解。
当USB CDC On Boot设置为enable的时候,并不会导致出现和Hardware CDC一样的问题,但是引发了一些其他的问题,实际测试比如IO45引脚在下载的过程中会有一段时间会短暂保持下载前的电平状态,实际多次测试发现,下载的流程大概是这样的,
-
进入下载模式:
当ESP32-S3检测到需要进行固件更新时,它会进入下载模式。在这个模式下,设备准备好通过USB接收新的固件文件。
-
USB枚举:
使用TinyUSB库,ESP32-S3将自己枚举为一个USB设备,通常是一个USB串行设备(CDC)或其他类型的设备(如DFU,Device
Firmware Upgrade)。 通过USB枚举,主机(通常是电脑)可以识别到ESP32-S3,并准备通过USB接口进行数据传输。 -
固件接收:
在下载模式下,ESP32-S3使用TinyUSB处理主机发送的数据包,这些数据包通常是通过USB
CDC(串行通信)协议发送的固件更新文件。
TinyUSB库负责解析这些数据包,并将它们传递给ESP32的引导加载程序(bootloader)进行处理。 -
固件写入:
引导加载程序将接收到的固件数据写入到ESP32-S3的闪存(Flash)中。这个过程涉及到逐块数据的接收、校验、写入等步骤。
如果是DFU模式,TinyUSB将处理DFU协议中的数据包,并通过DFU规范规定的方式写入固件。 -
更新完成并重启:
当所有固件数据成功写入闪存后,引导加载程序会校验固件的完整性和正确性。 如果一切正常,ESP32-S3会重启,并启动新的固件。
在进入下载模式之后,串口会从TinyUSB的串口号跳转为Hardware CDC的串口号,IO45在进入到下载状态和跳转为Hardware CDC的串口号之前的这个时间段里面,保持原程序中给他的电平状态,由于我使用了IO38和IO45作为电机驱动信号输入,在这个过程中,由于IO38会复位为低电平,但是IO45保持了高电平,从而导致我的电机驱动会有短暂时间的疯转。(注意该问题在使用Hardware CDC并不会出现),查询手册也发现IO45在复位的时候正常状态下也是低电平的,但是不知道为啥会出现这个问题。猜测应该是和TinyUSB的底层有关系,熬夜看了一下底层代码,没找到果断放弃了,提出来大家在设计硬件的时候可以避坑。还有一个要注意的就是当USB CDC On Boot设置为enable的时候,你就可以使用Serial.print等语法打印调试信息,这个时候Serial的信息就会从虚拟串口到USB然后到串口监视器上显示。但是一定要注意一个问题就是程序中初始化串口Serial的时候,要把while(!Serial);这个语句去掉,或者是加一个延时强制退出的工作机致,要不然就会出现你必须用电脑打开对应的串口监视器,然后这个while(!Serial);语句。 他才能跳出循环的问题。(这个问题同样存在,记得注释哈哈)。
还有一个问题,就是如果我们能程序中如果想用到串口0,那么应该使用Serial0进行操作,也就是把原来的Serial变为Serial0。
4、优缺点:
缺点:
在ESP32S3复位的时候,串口会消失,需要重新选择(这个问题主要是在米思齐上,他不支持热插拔,也就是不能够自动连接上一次连接过的串口,当然你可以把电脑其他的串口外设全部禁用掉,这样子当你ESP32S3串口再次出现的时候就会自动选择);
还有就是下载完成之后需要手动按下复位键才可以运行程序,而且下载完成后显示的串口号是Hardware CDC的串口号,之后在你按了复位键等程序跑起来了之后,串口号是TinyUSB的串口号。
还有就是下载完成之后需要重开串口监视器,因为你要按一下复位程序才会运行,按下复位之后串口就断连了,所以需要根据串口来进行调试的时候其实在使用体验上会差很多。
优点:可以节省转串口芯片
5、arduino/米思齐下载配置
希望对大家有帮助,谢谢大家阅读。