JTAG接口深度解析:从协议原理到ARM Cortex-M调试实践
1. JTAG接口从标准协议到工程实践的深度解析如果你是一名嵌入式软件或硬件工程师那么“JTAG”这个词对你来说一定不陌生。它几乎是所有现代微控制器MCU和复杂可编程逻辑器件CPLD/FPGA开发板上必备的几排小孔或插针。但很多时候我们只是把它当作一个“下载程序”或“在线调试”的黑色通道接上仿真器点击IDE里的下载按钮只要程序能跑起来就很少再去深究其背后的机制。直到某一天你遇到了一个棘手的问题调试器突然连不上了或者芯片的某些GPIO引脚行为异常你才意识到对这个“老朋友”的理解还远远不够。JTAG全称Joint Test Action Group联合测试行动组其标准IEEE 1149.1最初是为了解决高密度、表面贴装SMT电路板的测试难题而诞生的。想象一下一块布满成百上千个引脚、BGA封装的芯片被焊死在电路板上传统的万用表或示波器探针根本无法接触到内部的信号节点。JTAG提供了一种“边界扫描”的魔法它在芯片的每个I/O引脚内部都插入了一个特殊的存储单元边界扫描单元这些单元串联起来形成一条贯穿芯片内部逻辑的“扫描链”。通过一套精密的串行通信协议我们可以从外部“窥视”甚至“控制”这些I/O引脚的状态从而在不进行物理探针接触的情况下完成电路连通性测试、芯片功能验证乃至系统级的故障诊断。然而JTAG的价值远不止于生产测试。在开发阶段它成为了连接开发者与芯片内部世界的桥梁。通过JTAG接口调试器可以访问处理器的内核寄存器、设置断点、单步执行代码、读写内存甚至直接对Flash存储器进行编程。这背后的核心是一个被称为TAPTest Access Port测试访问端口控制器的状态机以及TCK、TMS、TDI、TDO这四根看似简单却蕴含复杂时序的信号线。理解它们是解决一切JTAG相关调试问题的钥匙。本文将以德州仪器TI的Tiva™ TM4C1294NCPDT这款基于ARM Cortex-M4F内核的微控制器为具体案例剥开JTAG的技术外壳从引脚电气特性、状态机运作一直讲到与ARM CoreSight调试架构的融合以及实际开发中那些手册里不会写的“坑”和应对技巧。2. JTAG物理接口与引脚配置详解在动手连接调试器之前我们必须先理解JTAG物理层的“规矩”。这不仅仅是接对线那么简单更关系到信号完整性、功耗以及系统初始化的可靠性。2.1 四线制基础与引脚定义标准的JTAG接口由四根必需信号线和一根可选的复位线nTRST构成。在TM4C1294NCPDT上我们关注的是前四根TCK (Test Clock Input): 测试时钟输入。这是JTAG通信的“心跳”所有信号都在TCK的边沿被采样或驱动。它由外部调试器如J-Link XDS110提供独立于芯片的系统时钟。这意味着即使你的主芯片时钟还没配置好JTAG依然可以工作。TCK通常被要求是一个占空比接近50%的方波。一个关键特性是TCK可以长时间保持在低电平或高电平而不会导致TAP控制器状态丢失或数据寄存器内容清空这为低速调试或节能模式提供了便利。TMS (Test Mode Select): 测试模式选择输入。这是JTAG协议的“方向盘”。TAP控制器的每一个状态跳转都完全由在TCK上升沿采样到的TMS信号值决定。通过特定的TMS序列例如连续5个TCK周期保持TMS为高可以强制TAP控制器回到确定的初始状态Test-Logic-Reset。TMS的变化必须发生在TCK的下降沿以满足建立和保持时间的要求。TDI (Test Data Input): 测试数据输入。串行数据通过此引脚移入芯片内部的指令寄存器IR或数据寄存器DR。数据也是在TCK的上升沿被采样因此其稳定变化也应在TCK的下降沿。TDO (Test Data Output): 测试数据输出。芯片将内部扫描链的数据通过此引脚串行移出。TDO是唯一由芯片驱动的JTAG信号并且它是一个三态输出。只有当TAP控制器处于特定的移位状态Shift-IR 或 Shift-DR时TDO才会被主动驱动在其他状态下TDO呈高阻态High-Z。这一点在多个器件JTAG菊花链Daisy-chain连接时至关重要可以防止总线冲突。TDO的数据变化发生在TCK的下降沿。2.2 上电复位后的默认状态与设计陷阱根据TI的数据手册TM4C1294NCPDT在上电复位POR或外部复位RST后JTAG引脚对应GPIO Port C的PC0-PC3的默认配置是精心设计的引脚方向驱动强度内部上拉内部下拉初始驱动值TCK输入N/A使能禁用N/ATMS输入N/A使能禁用N/ATDI输入N/A使能禁用N/ATDO输出2-mA使能禁用高阻态核心设计考量上拉电阻使能TCK、TMS、TDI作为输入引脚默认使能内部上拉电阻。这是一个非常关键的安全设计。如果这些引脚悬空例如调试器未连接上拉电阻会将它们稳定在逻辑高电平。对于TMS高电平意味着TAP控制器倾向于进入或保持在复位状态对于TCK高电平可以防止因噪声引起的意外时钟边沿。这确保了芯片在“裸奔”时JTAG逻辑处于一个确定、非活动的状态。TDO的高阻态与上拉TDO作为输出默认也是高阻态并启用上拉。这同样是为了防止在未进行JTAG操作时该引脚输出不确定电平干扰可能连接的其他器件同时上拉保证了电平的确定性。一个致命的“软”陷阱引脚功能重映射手册中明确警告了一个常见但危险的操作在软件中过早地将JTAG引脚重新配置为普通GPIO。 TM4C1294NCPDT的JTAG引脚与GPIO Port C复用。通过软件清除GPIOAFSEL寄存器的相应位可以将它们用作普通I/O。这对于引脚资源紧张的项目很有吸引力。然而危险在于时序 如果你的应用程序代码在启动后例如在main函数开始处立即执行了重配置而调试器如IAR、Keil的调试会话还没来得及在芯片复位后建立连接并发出“调试暂停”请求那么JTAG功能就会消失。调试器将永远无法再通过JTAG接口连接芯片因为通信的物理通道被你自己关掉了。这就是所谓的“锁死”Lockout状态。实操心得如何安全地复用JTAG引脚非必要不复用除非PCB上的引脚真的捉襟见肘否则尽量保留JTAG功能。它是最可靠的调试和后门。如果需要复用必须设计“逃生通道”硬件触发保留一个硬件引脚如某个按键作为恢复信号。在软件中上电后先检查该引脚状态。如果检测到恢复信号则跳过JTAG引脚的重配置或者主动将其恢复为JTAG功能并进入一个等待调试器连接的循环。软件看门狗备份区在Flash中设置一个非易失性的“配置标志位”。只有通过特定的软件流程例如在某个时间窗口内收到串口特定命令才能将标志位置位并执行引脚重配置。常规上电时标志位为0引脚保持JTAG功能。即使程序跑飞看门狗复位后JTAG功能依然存在。利用TI的解锁序列TI提供了通过特定JTAG/SWD切换序列来强制擦除Flash并恢复默认设置的“后门”方法详见后文。但这会擦除整个Flash和EEPROM是最后的挽救手段不能作为常规设计依赖。使用提交控制Commit ControlTM4C系列微控制器对JTAG/NMI等关键引脚提供了硬件保护。要修改这些引脚的复用功能AFSEL、上下拉PUR/PDR和数字使能DEN必须先解锁GPIOLOCK寄存器并在GPIOCR寄存器中置位相应的提交位。这增加了一层软件防护防止意外代码修改。3. TAP控制器JTAG协议的状态机引擎如果说JTAG引脚是肢体那么TAP控制器就是大脑。它是一个由TCK驱动、TMS控制的有限状态机。理解这个状态机是理解一切JTAG操作的基础。3.1 状态机全景与核心路径TAP控制器状态图是一个16状态的摩尔机。虽然看起来复杂但实际调试中最常用的路径只有几条。状态机可以划分为两大分支指令寄存器IR路径和数据寄存器DR路径它们都从一个共同的起点——Run-Test/Idle状态开始。核心状态解析Test-Logic-Reset这是状态机的起点和“安全港”。无论当前处于何种状态只要在TCK上升沿连续采样到5个TMS1就会强制进入此状态。在此状态下JTAG逻辑被复位指令寄存器被强制加载为IDCODE或BYPASS指令通常是IDCODE。Run-Test/Idle一个空闲状态。某些与测试相关的逻辑可以在此状态下运行如运行内建自测试BIST但对于基本的调试和扫描操作这是一个稳定的等待状态。Select-DR-Scan / Select-IR-Scan路由选择状态。根据TMS值决定下一步是进入数据寄存器扫描流程还是指令寄存器扫描流程。Capture-DR / Capture-IR捕获状态。在Capture-DR状态当前指令所选定的数据寄存器如IDCODE、BYPASS或边界扫描寄存器会并行加载捕获其预设的数据。对于IDCODE指令捕获的是芯片的ID值对于BYPASS指令捕获的是一个固定的‘0’。在Capture-IR状态指令寄存器会捕获一个固定的模式通常最低位是01用于故障检测。Shift-DR / Shift-IR核心操作状态。在此状态下TCK的每个上升沿都会将数据从TDI移入寄存器链同时将寄存器链中的数据从TDO移出。这是实现串行数据读写的关键阶段。Exit1-DR / Exit1-IR退出状态1。在完成移位后根据TMS值可以选择直接进入更新状态还是进入暂停状态。Pause-DR / Pause-IR暂停状态。允许调试器暂时停止移位过程例如处理接收到的数据或准备下一批数据而不会中断整个扫描操作。这在处理长扫描链时很有用。Exit2-DR / Exit2-IR退出状态2。从暂停状态返回的路径。Update-DR / Update-IR更新状态。在Update-IR状态移位到指令寄存器中的新指令被锁存并立即生效决定后续操作哪个数据寄存器。在Update-DR状态移位到数据寄存器中的新数据被并行更新到对应的逻辑中例如更新边界扫描寄存器的输出值。3.2 一次完整的JTAG操作流程示例读取芯片IDCODE让我们跟随状态机走一遍调试器连接芯片时最常见的操作——读取IDCODE。连接与初始化调试器上电拉低nSRST如果有然后释放。随后调试器输出至少5个TCK周期同时保持TMS1。这将TAP控制器驱动到Test-Logic-Reset状态。进入移位IR流程调试器控制TMS序列0-1-0-0对应状态转移Test-Logic-Reset - Run-Test/Idle - Select-DR-Scan - Select-IR-Scan - Capture-IR。此时进入Capture-IR指令寄存器捕获固定值如0x01。加载IDCODE指令保持TMS0进入Shift-IR状态。调试器通过TDI在多个TCK周期内串行移入IDCODE指令的二进制码对于ARM CoreSight通常是4‘b1110。同时TDO会移出之前捕获的固定值。移位完成后TMS置1进入Exit1-IR再置1进入Update-IR。新指令IDCODE在此刻生效。进入移位DR流程此时TAP控制器会自动回到Run-Test/Idle。调试器再次发送TMS序列0-1-0Run-Test/Idle - Select-DR-Scan - Capture-DR。进入Capture-DR状态IDCODE指令对应的数据寄存器即IDCODE寄存器会并行捕获芯片的32位ID值例如TI Cortex-M4F的0x4BA00477。读取IDCODE值保持TMS0进入Shift-DR状态。在32个TCK周期内芯片将IDCODE的值从TDO串行移出调试器进行接收。同时TDI移入的数据被忽略因为IDCODE寄存器通常是只读的。移位完成后TMS置1经Exit1-DR-Update-DR最后回到Run-Test/Idle。验证调试器比较读到的IDCODE与预期值是否匹配。匹配则确认芯片型号和JTAG链路通畅后续可进行调试操作不匹配则提示连接错误。这个过程完全由调试器硬件和软件自动化完成开发者无需手动控制。但当你需要编写底层JTAG驱动或者用FPGA/单片机模拟一个JTAG主机去访问另一颗芯片时就必须精确地实现这个状态机。4. JTAG指令集与数据寄存器与芯片对话的语言指令寄存器IR和数据寄存器DR是TAP控制器操控芯片内部逻辑的“双手”。IR决定我们要操作哪个“工具”DRDR则是具体的“工具”和数据通道。4.1 核心指令解析TM4C1294NCPDT的JTAG模块支持IEEE 1149.1标准指令和ARM CoreSight调试扩展指令。指令 (IR[3:0])名称功能描述关联数据寄存器0x0EXTEST外部测试。将预先通过SAMPLE/PRELOAD加载到边界扫描寄存器的数据驱动到芯片的物理I/O引脚上。用于测试PCB板级的连线短路/开路。边界扫描数据寄存器0x2SAMPLE/PRELOAD采样/预加载。这是使用最频繁的边界扫描指令。它有两个功能一是在Capture-DR状态采样当前所有GPIO引脚的实际输入/输出/输出使能状态二是在Shift-DR状态允许我们将新的数据预加载到边界扫描寄存器中为后续的EXTEST指令做准备。边界扫描数据寄存器0x8ABORT中止。用于访问ARM CoreSight DAP调试访问端口的ABORT寄存器可以清除DAP操作中的错误标志或中止一个挂起的传输。ABORT寄存器0xADPACCDP访问。用于读写ARM CoreSight DAP中的调试端口DP寄存器。DP是DAP对外的接口通过它可以选择和访问不同的访问端口AP。DPACC寄存器0xBAPACCAP访问。用于读写通过DP选中的访问端口AP的寄存器。最常见的AP就是内存访问端口MEM-AP通过它可以读写芯片的系统内存这才是实现下载程序、查看变量地址等调试功能的核心。APACC寄存器0xEIDCODE识别码。读取芯片的32位IDCODE包含制造商、部件号和版本信息。这是上电或复位后的默认指令。IDCODE寄存器0xFBYPASS旁路。将TDI直接短接到TDO中间只经过一个1位的移位寄存器。当菊花链中有多个JTAG器件但只想测试其中某一个时可以将其他器件设置为BYPASS模式缩短扫描链长度提高测试效率。BYPASS寄存器4.2 关键数据寄存器剖析IDCODE寄存器 (32位)式[31:28]版本 | [27:12]部件号 | [11:1]制造商ID | [0]固定为1。 对于TM4C1294NCPDT其ARM CoreSight IDCODE值通常是0x4BA00477。0x4BAARM的JEP106制造商ID0x23B由于JEP106是7位在IDCODE中表示为100 1011 1010 0x4BA。0x0477ARM定义的Cortex-M4F调试组件部件号。LSB1这是与BYPASS指令LSB0区分的标志。边界扫描数据寄存器这是芯片上每个GPIO包括JTAG引脚本身在JTAG链中的映射。每个GPIO占用3位按顺序排列输入位 (IN) | 输出位 (OUT) | 输出使能位 (OE)。采样在SAMPLE/PRELOAD指令的Capture-DR状态芯片会瞬间捕获所有GPIO的当前状态PIN上的实际电平、输出数据寄存器的值、输出使能寄存器的值并锁存到这串扫描链中。随后在Shift-DR状态我们可以将这些数据慢慢移出来观察。这相当于一个全系统、非侵入式的“逻辑分析仪”快照。预加载/驱动在Shift-DR状态我们可以向扫描链中移入新的数据。在Update-DR状态这些数据被更新到边界扫描单元的“预加载”寄存器中。当指令切换到EXTEST时这些预加载的OUT和OE值就会被强制驱动到对应的物理引脚上IN值则被忽略。这允许我们强制设置引脚电平来测试外部电路。注意事项边界扫描的“强制”特性当EXTEST指令生效时边界扫描逻辑优先于芯片内核的GPIO控制器。也就是说即使你的程序试图将某个引脚设置为输入或输出某个值只要JTAG的EXTEST在驱动该引脚那么物理引脚上的电平就由JTAG控制。这在进行板级测试时非常强大但在正常调试时如果意外停留在EXTEST状态会导致程序无法正常控制GPIO引发诡异现象。调试器通常会在连接后自动将指令切换到IDCODE或APACC/DPACC但了解这个原理有助于排查问题。DPACC与APACC寄存器 (35位)这是ARM CoreSight调试架构的入口。格式遵循ARM ADIv5协议[34:33] Ack | [32:3] Data | [2:1] A[3:2] | [0] RnW。RnW读/写位。1为读0为写。A[3:2]DP或AP寄存器的地址位。Data读/写的数据32位。Ack传输响应位OK/WAIT/FAULT。 通过DPACC指令我们可以选择并配置一个AP例如MEM-AP。然后通过APACC指令对选中的AP进行读写操作。MEM-AP就像一个通往芯片系统总线的桥梁调试器通过它来读写内存、加载程序、访问外设寄存器。所有高级调试功能都建立在这两条指令之上。5. ARM Serial Wire Debug (SWD) 模式及其与JTAG的切换随着引脚资源的日益紧张ARM推出了更精简的两线调试接口Serial Wire Debug (SWD)。它只需要两根线SWDIO双向数据线和SWCLK时钟线就能实现JTAG四线制的大部分核心调试功能。5.1 SWD与JTAG的共存机制在TM4C1294NCPDT这类Cortex-M芯片中JTAG和SWD接口是复用的通常共享相同的物理引脚TCK/SWCLK, TMS/SWDIO, TDI, TDO。芯片上电后默认处于哪种模式由芯片设计决定。TI的芯片通常默认支持JTAG但可以通过一个特定的协议序列切换到SWD模式。其核心是一个名为SWJ-DPSerial Wire JTAG Debug Port的模块。它监听TMS/SWDIO线上的特定序列。如果检测到JTAG-to-SWD切换序列它就关闭JTAG TAP控制器启用SWD协议控制器。反之亦然。5.2 模式切换序列详解从JTAG切换到SWD确保处于复位状态在TMS/SWDIO为高电平的情况下发送至少50个TCK/SWCLK周期。这确保TAP控制器处于Test-Logic-Reset状态。发送切换命令在TMS/SWDIO线上以LSB在先的方式发送16位的魔术数字0xE79E二进制1110 0111 1001 1110。这个序列本身就是一串特殊的JTAG TMS序列它驱动TAP控制器走过一系列特定状态最终触发模式切换。确认SWD复位再次在TMS/SWDIO为高电平的情况下发送至少50个TCK/SWCLK周期。这确保SWD协议控制器也进入线复位状态。验证发送一个SWD的READID命令。如果返回正确的调试端口ID如ARM CoreSight的0x2BA01477则证明切换成功。从SWD切换回JTAG过程类似只是切换命令变为0xE73C二进制1110 0111 0011 1100。切换后发送JTAG指令读取IDCODE来验证。实操心得调试器的角色与常见问题现代调试器如J-Link ST-Link XDS110都具备自动检测和切换协议的能力。当你选择“SWD”模式连接时调试器会先尝试以JTAG协议通信读取IDCODE如果成功它会自动发送上述切换序列将接口模式改为SWD然后再进行后续操作。常见连接失败场景硬件连接错误SWDIO和SWCLK接反、忘记接GND、电源不对。SWD必须共地复位电路干扰有些板子的复位电路RC延时、复位芯片可能导致芯片在调试器尝试连接时尚未稳定。调试器通常有“连接前复位”或“复位后延迟”的选项需要配置。引脚被软件占用如前所述如果软件已将SWD/JTAG引脚配置为GPIO且输出低电平会与调试器的上拉驱动冲突导致通信失败。此时可能需要通过“解锁序列”来恢复。速度太快过高的SWCLK频率在长线或布线不佳的板子上可能导致通信错误。尝试降低调试器时钟频率如从4MHz降到100kHz。5.3 恢复“锁死”的芯片解锁序列如果不慎将JTAG/SWD引脚配置为GPIO并导致了锁死TI提供了强制恢复的“后门”方法。这个操作会触发芯片内部逻辑执行一次Flash存储器的整片擦除并将相关非易失性配置寄存器恢复为出厂默认值包括JTAG引脚功能。解锁序列步骤需在硬件复位信号控制下进行断言并保持RST信号为低复位芯片。给芯片上电。在RST保持为低期间由调试器或外部主机在TCK/SWCLK和TMS/SWDIO引脚上连续执行5次完整的“JTAG-to-SWD切换序列”和“SWD-to-JTAG切换序列”。即交替发送0xE79E和0xE73C命令各5次总共10个切换序列。释放RST信号。等待至少400ms。重新上电复位芯片。执行成功后Flash内容被清空JTAG/SWD功能恢复。这是一个“杀手锏”级别的操作务必谨慎使用并确保在操作前已了解其后果数据丢失。6. 实际调试应用与问题排查实录理解了原理最终要服务于实践。下面结合TM4C1294NCPDT分享几个实际调试中的关键点和问题排查思路。6.1 调试连接建立流程剖析当你点击IDE的“Debug”按钮时背后发生了一系列精密的握手物理层连接调试器供电并初始化其IO电平。协议探测与切换调试器尝试以JTAG模式通信发送复位序列读IDCODE。如果成功且用户选择SWD则发送切换序列。访问DAP通过DPACC指令读取DP的IDCODE和状态寄存器确认调试访问端口可用。配置并访问MEM-AP通过DPACC选择一个可用的MEM-AP通常是AP0并配置其控制寄存器如设置传输大小、开启调试电源。内核控制通过MEM-AP访问ARM的调试系统寄存器如DHCSR请求停止内核、检查内核状态。系统初始化如果芯片处于低功耗模式或时钟未启调试器可能需要通过MEM-AP写芯片的系统控制寄存器来唤醒芯片或提供基本时钟。加载调试符号与断点建立连接后调试器将你的程序代码或至少调试信息与内存地址关联起来并设置硬件断点。6.2 常见问题排查表现象可能原因排查步骤与解决方案调试器报错“No device found”或“Cannot read IDCODE”1. 物理连接问题线缆、虚焊2. 电源问题3. 位信号异常4. 引脚被软件配置为GPIO1. 检查连线用万用表测量VCC、GND、SWCLK、SWDIO对地电阻和电压。2. 确认芯片供电电压稳定且在额定范围内。3. 用示波器观察复位引脚波形确保上电复位完成且无毛刺。尝试在调试器设置中勾选“Connect under reset”。4. 如果之前程序运行过尝试执行“解锁序列”擦除Flash。可以连接并识别芯片但无法读写内存/Flash1. 芯片处于低功耗模式睡眠、深度睡眠2. 系统时钟未运行3. 调试访问被保护芯片选项字节设置1. 在调试器设置中勾选“Reset and Run”或“Connect and halt”让调试器在连接时先执行一个复位序列唤醒芯片。2. 检查调试器能否访问系统控制寄存器如SYSCTL_RCC尝试使能一个基本时钟源如主振荡器。3. 检查芯片的调试接口是否被禁用如通过Flash选项字节。对于TM4C通常默认是使能的。调试时断点不生效或程序跑飞1. 硬件断点数量用尽Cortex-M通常只有4-6个2. 代码被优化行号不对应3. Flash编程算法错误或时钟配置不对1. 减少并发的硬件断点数量或使用软件断点需要修改代码为Thumb指令且目标地址可写。2. 尝试降低编译器优化等级如从-O2改为-O0进行调试。3. 确认IDE中为TM4C1294NCPDT选择了正确的Flash编程算法。检查系统时钟配置确保Flash访问等待周期Wait States与时钟频率匹配。单步执行或运行时外设行为异常1. 调试器暂停内核时未冻结外设时钟2. 依赖SysTick或中断的代码被调试中断干扰1. 大多数Cortex-M芯片在调试器暂停内核时外设时钟继续运行。这可能导致计时器溢出、通信超时。检查外设是否有“调试时冻结”的配置位如DBGMCU模块。2. 单步执行会频繁触发调试中断影响基于SysTick的延时或软件计时。调试此类代码时可考虑使用实时变量观察而非严格单步。6.3 高级技巧利用边界扫描进行硬件诊断即使不写任何程序JTAG的边界扫描功能也能成为硬件工程师的利器。你需要一个支持边界扫描的编程器或使用开源软件如OpenOCD配合FT2232H这类USB转JTAG芯片。检测短路/开路将芯片所有引脚至少是怀疑有问题的网络通过SAMPLE/PRELOAD指令采样。使用EXTEST指令控制一个引脚输出高电平其他相关引脚配置为输入并采样。如果另一个本应开路的引脚也被采样为高电平则说明两者之间存在短路。如果驱动一个引脚输出但在链路的另一端采样不到信号则可能存在开路。验证引脚配置在芯片运行正常程序时用SAMPLE/PRELOAD指令快速捕获所有GPIO的状态。与你软件中配置的方向输入/输出和输出值进行对比可以验证软件配置是否正确加载到了硬件寄存器排查软件配置错误。JTAG接口远不止是一个程序下载工具。从底层的引脚电气特性、精密的状态机协议到高层的ARM CoreSight调试架构它构建了一整套非侵入式观察和控制芯片的体系。理解TAP控制器的状态流转是理解一切JTAG操作的基础明白指令寄存器与数据寄存器的作用就掌握了与芯片对话的语法而熟悉SWD的切换与ARM DAP的访问则能让你在资源受限的现代嵌入式设计中游刃有余。

相关新闻

最新新闻

日新闻

周新闻

月新闻