|
第九章 USB 串行/JTAG 控制器控制台简介
1)实验平台:正点原子DNESP32P4开发板
2)章节摘自【正点原子】ESP32-P4开发指南— V1.0
3)购买链接:https://detail.tmall.com/item.htm?id=873309579825
4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp32/ATK-DNESP32P4.html
5)正点原子官方B站:https://space.bilibili.com/394620890
6)正点原子DNESP32S3开发板技术交流群:132780729
在现代嵌入式系统开发中,串口通信和调试功能是不可或缺的组成部分。ESP32-P4芯片通过内置的USB串行/JTAG控制器,简化了开发者的工作流程,消除了对外部USB-UART桥接芯片的需求。这一控制器不仅实现了高效的串口通信,还提供了强大的调试功能,使得开发、测试和调优过程更加便捷。本章节将深入探讨USB串行/JTAG控制器的功能、连接方式以及在实际开发中的应用,以帮助读者充分利用这一强大特性。
本章分为如下几个小节:
9.1 USB 串行/JTAG 控制器控制台概述
9.2 如何使用USB 串行/JTAG 控制器
9.1 USB 串行/JTAG 控制器控制台概述
ESP32-P4芯片集成了一个功能强大的USB串行/JTAG控制器,该模块可以用于对SoC的Flash进行编程、读取程序输出以及将调试器连接到运行中的程序。通过USB主机设备(以下简称“主机”)与ESP32-P4直接通信,无需任何额外的外部组件即可实现这些功能。
传统使用UART和JTAG功能调试ESP32-P4项目虽然可行,但存在以下不足:
1)UART和JTAG都占用了IO引脚,减少了开发者可用于外设控制的引脚数量;
2)主机通过外部芯片或适配器与UART和JTAG通信,这增加了额外的硬件设计复杂度。
为解决上述问题,ESP32-P4提供了USB串行/JTAG控制器,集成了USB转串口和USB转JTAG的功能。该模块通过USB 2.0协议仅使用两条数据线(D+和D-)与主机通信,仅需占用两根引脚即可完成ESP32-P4的调试工作。
USB串行/JTAG控制器具有以下功能特点:
1)USB全速设备(Full-speed)
硬件集成 CDC-ACM(通信设备类 - 抽象控制模型)和 JTAG 适配器功能。
2)CDC-ACM功能:
支持基于CDC-ACM标准的串口模拟(即插即用,兼容大多数现代操作系统)。提供主机可控的芯片复位功能以及进入下载模式的能力。
3)JTAG适配器功能:
提供紧凑高效的JTAG指令表示,支持快速通信。
4)多种端点支持:
包括一个控制端点(Control EP)、一个虚拟中断端点(Dummy int EP)、两个批量输入端点(Bulk in EP)和两个批量输出端点(Bulk out EP),数据负载最大支持64字节。
5)集成物理层(PHY):
内部集成 USB PHY,连接主机所需的外部组件极少甚至可以省略。
下图是USB串行/JTAG控制器的模块组成。
图9.1.1 USB 串行/JTAG 控制器功能框图
如上图所示,USB串行/JTAG控制器由以下组件组成:USB PHY、USB设备接口、JTAG命令处理器、USB Device Logic响应捕获单元和CDC-ACM寄存器。USB PHY和设备接口由从基带PLL(BBPLL)派生的48 MHz时钟驱动;CDC-ACM模块中软件可访问的部分由APB_CLK时钟驱动。JTAG命令处理器连接到主处理器的JTAG调试单元;CDC-ACM寄存器连接到APB总线,因此可以由主CPU运行的软件进行读写操作。
需要注意的是,虽然USB串行/JTAG设备支持USB 2.0标准,但它仅支持全速模式(12 Mbps),而不支持USB 2.0标准引入的其他模式,例如高速模式(480 Mbps)。
ESP32芯片通常通过UART实现串口通信,并可借助外部USB-UART桥接芯片连接至主机或PC上的串口控制台仿真器。然而,具备USB串行/JTAG控制器的ESP32芯片,利用控制器的CDC-ACM部分可以直接与主机/PC实现串口连接,无需外部USB-UART桥接芯片。这一设计简化了连接过程,提高了系统的灵活性和可靠性。
基于这一优势,ESP32-P4芯片内置USB串行/JTAG控制器,能够高效地实现串口通信和JTAG调试功能,进一步减少对外部USB-UART桥接芯片的依赖。通过该控制器,用户可以方便地将ESP32-P4连接至主机或PC,进行各种操作和调试。如下图所示。
图9.1.2 PC机与ESP32-P4通过USB进行串口通信
从上面的三幅图可以看出,PC机与ESP32-P4芯片之间的串口通信有三种连接方式。第一幅图展示了通过ESP32-P4芯片的内部USB串行/JTAG控制器直接实现通信。第二和第三幅图则展示了使用USB转UART模块连接ESP32-P4外设UART接口的两种方式,它们的唯一区别在于:第二幅图是开发板上集成的USB转UART电路,而第三幅图则是一个独立的模块。为了方便用户使用这些功能,我们正点原子选择了第一和第二幅图所示的连接方式。这两种方式均可有效地实现PC与ESP32-P4芯片之间的串口通信,用户可以根据实际需求进行选择。
接下来,笔者将介绍USB串行/JTAG控制器的功能特点及其硬件连接方式。
1,功能特点:
1)双向串行控制台:支持与ESP-IDF监视器或其他串行监视器的双向通信,方便用户进行数据交互和调试。
2)便捷烧录:使用esptool.py或 idf.py flash命令,用户可轻松将程序烧录到ESP32-P4。
3)JTAG调试:借助OpenOCD等工具,用户可进行实时调试,同时保持串口通信。
2,硬件连接
将ESP32-P4与USB端口连接时,需注意以下引脚配置:
1)D+(绿线):连接至GPIO25或27。
2)D-(白线):连接至GPIO24或26。
3)GND(黑线):连接至地。
4)5V(红线):连接至电源供电。
关于USB串口/JTAG控制器的管脚选择,笔者建议使用默认的GPIO24/25号管脚。有关这一部分的详细知识,笔者已在第二章节的2.2.2小节中表2.2.2.1进行了讲解,这里不再赘述。
9.2 如何使用USB 串行/JTAG 控制器
在ESP-IDF的配置菜单中,选择USJ_ENABLE_USB_SERIAL_JTAG选项,即启用USB串行/JTAG控制器,如下图所示。
图9.2.1 启用USB 串行/JTAG 控制器
ESP32芯片上电后,USB-Serial-JTAG模块默认开启。如果您的应用程序不需要该模块,且不依赖它作为系统控制台或进行JTAG调试,您可以选择禁用此功能。禁用后,该模块的时钟将在启动时被关闭,从而节省一些功耗。
当我们选择UART0端口作为主要输出端口但未连接时,辅助选项支持通过其他特定端口(如USB 串口/JTAG)进行输出。需要注意的是,当前的辅助输出仅支持不使用REPL的非阻塞模式。如果您希望使用REPL并在阻塞模式下输出或通过该辅助端口进行输入,请在“Channel for console secondary output”菜单中将主要配置更改为该端口。这样可以确保正常的数据交互和调试体验,如下图所示。
图9.2.2 配置USB 串口/JTAG正常输出日志 |