摘录自参考手册之 23 USB串口、JTAG控制器
-可用于烧录芯片外部flash、读取程序输出的数据、JTAG调试。
-仅占用2个管脚接电脑USB即可,无需其他转换器。
-包含CDC-ACM(通信设备类抽象控制模型,即插即用)和JTAG适配器
-共2个OUT端点、3个IN端点和1个控制端点EP_0,最大64字节数据
-CDC-ACM支持控制芯片复位和进入下载模式
从图中看出,1个OUT端点和2个IN端点 用于实现虚拟串口接口。 OUT_EP_2和IN_EP_3端点实现了JTAG接口。
这两个接口都是经过USB与主机电脑通信。
CDC-ACM USB 接口:
虚拟串口通信,插入电脑后,显示的是串口信息。windows和linux mac均适用。
注意 返回 9600波特率,但是不代表真实的下载速率。实际上USB接口是2.0全速12Mbps的。
主机通过设置虚拟窗口的RTS和DTR线来实现ESP32-C3进入下载模式(先设置下载模式标志,再复位ESP32C3;若下载模式标志被清,则从flash启动。)。
这个设计真实太巧妙了,控制器解析这两根虚拟信号线,完成对CPU的控制,实现通过USB下载程序固件。
回忆一下,标准的计算机RS232。 USB虚拟成串口,同时支持这些标准的RS232信号线,可以通过主机软件设置和读取这些信号线状态。
CDC-ACM固件接口
CPU通过APB总线直接与USB模块交互,主要对连接的虚拟串口读写操作。
相关寄存器:
USB_SERIAL_JTAG_SERIAL_OUT_EP_DATA_AVAIL
1=缓冲区中还有来自主机的未读数据
USB_SERIAL_JTAG_SERIAL_OUT_RECV_PKT_INT中断, 有新的未读数据触发中断
固件可以重复从USB_SERIAL_JTAG_EP1_REG寄存器读取新数据。读取每个字节后,再通过检查USB_REG_SERIAL_OUT_EP_DATA_AVAIL位判断是都还有可读取数据。
发送数据给主机前,检查USB_REG_SERIAL_IN_EP_DATA_FREE位判断发送缓存区是否有可用空间,有空间就将待发送的数据发送给缓冲区并触发刷写(重复向USB_SERIAL_JTAG_EP1_REG写入字节从而向缓冲区写入数据)。第64字节写入后自动触发刷写,或者手动向USB_REG_SERIAL_WR_DONE写1触发刷写。触发刷写后数据才会发送给主机。
触发刷写后,直到缓冲区所有数据都被主机读取完才能继续向缓冲区写入数据。(即数据未被主机接收完,缓冲区就不能用),主机读取完数据后,将触发USB_SERIAL_JTAG_SERIAL_IN_EMPTY_INT中断,此时可继续向缓冲区写入新的数据。
USB-JTAG接口
JTAG标准接口有4根线,TCK TMS TDI TDO(TDO ,CPU输出到JTAG)
外加一根SRST线,用于复位ESP32C3,SRST线不会对USB-JTAG控制器有影响(即控制器不会跟着复位)
JTAG接口命令是半字节的,USB数据是8bit字节的。USB命令处理器先解析高4bit,再解析低4bit。这些命令用户控制TCK TMS TDI SRST 以及读取TDO线状态。
JTAG的命令用于对JTAG信号线的控制和读取状态,实现JTAG接口的通信。比如产生时钟TCK读取TDO数据等操作。
注意深度睡眠时,USB/JTAG模块也会掉电。需要在深度睡眠状态调试时,只能外挂一个 USB-JTAG接口,直接连接芯片的JTAG引脚。
版权声明:本文为CSDN博主「seasuncs」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/seasuncs/article/details/121571359
暂无评论