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

2023-05-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

乐鑫ESP32-C3项目(8)- USB串口和JTAG控制器 的相关文章

  • 查找带有 USB 设备 VID/PID 的 /dev 条目

    我想制作一个程序来检测哪些 dev sd 条目链接到已知的 USB VID PID 对 你知道我如何获得 USB 记忆棒的 VID PID 吗 dev sd 您可以使用udevadm为了这 在输出中udevadm info q proper
  • 检测 Android 上的 USB 网络共享

    有没有什么方法可以 以编程方式 在您的活动 应用程序中知道用户已在其手机上启用 USB 网络共享 您还可以使用反射来访问用于设置 USB 网络共享的隐藏功能 这是我的代码 ConnectivityManager cm Connectivit
  • USB 控制传输能否保证交付?

    USB 2 0 指定 http www usb org developers docs usb20 docs 4 种传输类型 第 5 4 节传输类型 控制转移 同步传输 中断传输 批量转账 第 5 8 节规定批量转账提供 在带宽可用的基础上
  • 使用 C# 向 USB 连接的 GPRS 调制解调器发送 AT 命令

    任何人都可以给我一个关于如何访问连接到 USB 端口的 GPRS 调制解调器的良好指示或指南 我应该为我的程序制作一个 USB 驱动程序以将 AT 命令发送到调制解调器吗 或者就像一个路由器 我可以使用IP地址访问它 谢谢 如果 Windo
  • ESP32 上的 Web 服务器:如何自动更新和显示来自服务器的传感器值?

    我在 ESP32 上有一个网络服务器 在该服务器上有一个主页 我想每隔 x 秒自动更新主页上的传感器值 无需用户输入 我无法访问文件系统 该传感器直接连接到 ESP32 传感器值位于我的 C 程序中 存储在变量中并定期更新 变量是全局的 以
  • adb 未检测到 micromax a111

    最近我购买了 micromax a111 Android 设备 我是安卓开发者 因此尝试使用该设备进行调试选项 但 adb 无法检测到该设备 我也更改了设置 但没有成功 如果有人有解决方案 请帮助我解决这个问题 micromax没有官方的P
  • 无法使用 Android Studio、Windows 7 连接到 Samsung Galaxy Tab S

    我有一台漂亮的新三星 Galaxy Tab S 我正在尝试将其与 Android Studio 连接 我已在平板电脑上启用 USB 调试 并通过执行 SAMSUNG USB Driver for Mobile Phones v1 5 45
  • USB 调试 - 安装 Epson Moverio 驱动程序时出现问题

    Android 开发新手 我使用以下命令制作了一个小应用程序Eclipse http en wikipedia org wiki Eclipse 28software 29在虚拟 Android 设备上完美运行 现在 我想在真实的设备上运行
  • libv4l2:打开流时出错:设备上没有剩余空间

    我尝试为 opencv 获取立体声对 我将 Logitech B910 和 Logitech C910 网络摄像头连接到 USB 但有这个错误 我玩弄了怪癖参数并设置outfmt mjpeg在mplayer中 但又出现此错误 在哪里可以找到
  • 使用Python直接向USB发送信号

    如何使用 Python 将 USB 端口连接设置为高或低 这可用于定制 USB 设备 例如 假设我有一个 LED 连接到 USB 端口 数据线 现在通过代码我想闪烁它或控制它 现在 这可以通过使用任何微控制器 Arduino Raspber
  • 在 Python 中将 USB 视频捕获设备友好名称与 OpenCV 端口号相关联

    我想在 Windows 平台上使用 Python 获取外部 USB 视频捕获设备的友好名称和 USB 端口号 我正在使用 OpenCV 从 USB 捕获设备捕获视频 OpenCV 将 USB 端口称为 1 找到的第一个工作摄像头 0 对我来
  • Android 版 usbmon

    我想分析我的设备的 USB 通信 SGS4 我到处都看到需要配置 usbmon 并将其编译到内核中 Afaik 这个模块没有内置在android linux系统中 我在编译内核方面没有太多经验 但如果有必要 我会这样做 您能说出这样做的步骤
  • Java 两个独立键盘的独立输入

    我有两个 USB 键盘插入同一台机器 我正在开发一个 Java 应用程序 是否有办法允许 Java 应用程序分离出它来自哪个 USB 键盘 即是否有类似的东西http docs oracle com javase 6 docs api ja
  • USB接口条码扫描器

    不完全是一个编程问题 但很接近 无论如何我都会试试运气 The 键盘楔子 扫码机插入 读者之间的翻译装置 和键盘 数据发送通过 楔形看起来就像是被输入的 电脑 而键盘 本身仍保持完整功能 因为电脑使用键盘 楔子无法区分 在输入的数据之间 扫
  • 我可以从哪里开始使用可编程硬件?

    一段时间以来 我一直渴望至少学习一点有关硬件编程的知识 并想在这里提出要求以获得一些起点 我是一位相当有成就的程序员 具有 Delphi 和 Objective c 经验 但从未听过设备端口 中断 我什至不知道术语 更不用说对硬件进行编程了
  • 在 Linux (libusb-1.0) 上访问 USB 设备?

    我正在编写一个小程序 使用 Linux 上的 libusb 1 0 与特定 USB HID 产品 由供应商和产品 ID 标识 进行通信 现在 我必须以 root 身份运行该程序 因为 libusb 需要对 USB 设备节点的写访问权限 有没
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能
  • iOS 中通过 USB 进行反向端口转发

    我在桌面上有一个 Web 套接字服务器 在 iPhone 设备上有一个客户端 我想使用 USB 而不是任何网络与他们通信 我已经使用 adb reverse 在 android 上实现了它 但无法找到适用于 iOS 的任何解决方案 我尝试使
  • Python:获取USB闪存驱动器设备的名称[windows]

    我正在尝试编写一个小程序 它将能够读取有关 REMOVEABLE DEVICE USB 的一些信息 我试过了pyusb https github com walac pyusb但我无法提取我需要的数据 我想从系统中读取 USB 设备的名称
  • 我的 Android 设备需要安装哪个驱动程序才能运行我的应用程序?

    我购买了 intex mobile 来在真实设备中测试我的 Android 应用程序 然而 该设备不存在于 OEM USB 驱动程序列表中 android 提供的设备列表中 我检查了 intex 官方网站 但不确定到底需要安装哪个驱动程序

随机推荐

  • 为什么 Docker 和 Kubernetes 是用 Go 写的而不是 C# ?

    这是 Reddit 平台上面这几天一篇比较热门的帖子 非常有意思 xff0c 本文我列出了几个高赞的回答 x1f466 HahahahahaSoFunny 为什么 Docker 和 Kubernetes 工具是用 Go 写的而不是 C xf
  • BeanPropertyRowMapper使用注意事项

    query过程都可以进行数据类型自动转换 xff0c 而且不仅仅按标准命名 xff0c 还可以支持下划线分隔后拼接成驼峰式字符 完全轻量级 BeanPropertyRowMapper ParameterizedBeanPropertyRow
  • Hello Kubernetes快速交互实验手册

    K8S在线实验室提供了一个交互实验环境 xff0c 现将这部分文章精简并翻译为中文 xff0c 希望对那些不了解K8S的童鞋有帮助 xff0c 能够快速玩起来有个感性认识 原文 xff1a https kubernetes io docs
  • 嵌入式程序员的几年的小心得

    作为嵌入式研发工程师工作也几年了 xff0c 其实在大学时期11年那会儿在做的 xff0c 现在依然在是做 xff0c 现在接触的单片机 Arm Linux 安卓程序这三类 xff0c 其实和大学时候的时期做的东西并无区别 只不过当时除了学
  • 2.17.3-Python爬虫(requests登录)

    文章目录 1 环境与配置1 1 创建一个pure python项目1 2 集成configparser1 3 集成selenium1 3 1 pycharm安装selenium包1 3 2 下载自己chrome浏览器版本对应的驱动1 3 3
  • C++实现麻将基本听牌胡牌的算法

    include lt iostream gt include lt vector gt include lt algorithm gt include lt chrono gt enum MajiangType emMJType Wan 6
  • H3C交换机查看相关的命令

    1 dis cpu 查看CPU 2 dis memory 查看内存 3 dis device 查看硬件 4 dis power 查看电源 5 dis fan 查看风扇 6 dis env 查看温度 7 dis version 查看版本 8
  • 我的学习之路—5月1号开始,每周至少写5篇文章

    xfeff xfeff 爱拼才会赢 xff0c 这不仅仅是一句宣言 xff0c 而是一种态度 一种乐观向上的态度 一种端正的态度 请相信 xff0c 有什么样的态度 xff0c 就有什么样的结果 有什么样的态度 xff0c 就有什么样的人生
  • Serverlet生命周期

    xfeff xfeff Serverlet简介 xff1a Servlet Server Applet xff0c 全称Java Servlet xff0c 未有中文译文 是用Java编写的服务器端程序 其主要功能在于交互式地浏览和修改数据
  • CentOS下yum安装wine

    Linux下安装wine可以从源码编译安装 xff0c 但一般都觉得麻烦 xff0c 所以尽量利用yum进行安装 xff0c 解决很多包的依赖关系 首先安装一个epel rpm ivh http dl Fedoraproject org p
  • Maven使用教程

    一 Maven介绍 我们在开发项目的过程中 xff0c 会使用一些开源框架 第三方的工具等等 xff0c 这些都是以jar包的方式被项目所引用 xff0c 并且有些jar包还会依赖其他的jar包 xff0c 我们同样需要添加到项目中 xff
  • Linux下 文件类型不同颜色的含义

    linux 文件颜色的含义 蓝色 代表目录 绿色 代表可执行文件 红色 表示压缩文件 浅蓝色 表示链接文件 灰色 表示其他文件 红色闪烁 表示链接的文件有问题了 黄色 表示设备文件 蓝色文件 目录 白色文件 一般性文件 xff0c 如文本文
  • Jenkins在windows上详细安装(service的msi包安装)与构建部署使用教程

    注意 xff1a 这种安装方式 xff0c Jenkins将做为service在windows上安装 xff0c GUI测试build时将看不到浏览器 如需要GUI测试build 可新建一个windows slave来build Jenki
  • vim常用命令总结

    vim 选择文本 xff0c 删除 xff0c 复制 xff0c 粘贴 文本的选择 xff0c 对于编辑器来说 xff0c 是很基本的东西 xff0c 也经常被用到 xff0c 总结如下 xff1a v 从光标当前位置开始 xff0c 光标
  • Spring boot WebMvcConfigurerAdapte方法已经过时解决方法

    在spring boot 2 0以后 WebMvcConfigurerAdapter 这个方法已经过时 xff0c 通过百度网上的资料之后发现很多人说是改成继承WebMvcConfigurationSupport这个类 xff0c 这种方式
  • RTOS流和消息缓冲器

    RTOS流和消息缓冲器 任务间通信和同步 可从FreeRTOS V10 0 0获得 介绍 流缓冲区是 RTOS任务 的RTOS任务 xff0c 并且是任务通信原语的中断 与大多数其他FreeRTOS通信原语不同的是 xff0c 它们针对单读
  • 使用 Docker/LXC 迅速启动一个桌面系统

    原文出处 xff1a vpsee Docker是 dotCloud 的一个开源引擎 xff0c 旨在提供一种应用程序的自动化部署解决方案 xff0c 简单的说就是 xff0c 在 Linux 系统上迅速创建一个容器 xff08 类似虚拟机
  • [统计学笔记] 统计学计算题选讲(精华)

    统计学计算题选讲 第 1 题 某班级学生物理课程考试成绩分别为 68 89 88 84 86 87 75 73 72 68 75 82 97 58 81 54 79 76 95 76 71 60 90 65 76 72 76 85 89 9
  • Python爬取CSDN博客所有文章

    需求 Python爬取某个账号CSDN博客所有文章的标题 xff0c 类型 xff0c 创建时间 xff0c 阅读数量 xff0c 并将结果保存至Excel 分析 CSDN主页URL为 xff1a https blog csdn net s
  • 乐鑫ESP32-C3项目(8)- USB串口和JTAG控制器

    摘录自参考手册之 23 USB串口 JTAG控制器 可用于烧录芯片外部flash 读取程序输出的数据 JTAG调试 仅占用2个管脚接电脑USB即可 xff0c 无需其他转换器 包含CDC ACM xff08 通信设备类抽象控制模型 xff0