乐鑫ESP32-C3项目(8)- USB串口和JTAG控制器

摘录自参考手册之 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

生成海报
点赞 0

seasuncs

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

【ESP32DEVKITV1学习笔记】点亮一盏LED灯

前言 现在大家的课设毕设啥的都喜欢往网上传数据,而对于这些课设毕设的模块选型都喜欢这么一个原则:快速上手。那么我首选esp系列的产品,教程多,易上手。 一、环境的搭建 之前用过ard

LVGL学习之初始化和屏幕旋转

背景 手里有一块ESP32-S2-HMI-DevKit-1开发板,是乐鑫基于ESP32-S2模组开发的HMI人机交互方案开发板; 一边学习ESP32开发的过程中,也顺带学习一下LVGL图形库&#xff