使用SPI操作JTAG的两种方案

MCU没有可以直接操作JTAG的外设,一般情况下,可以使用IO模拟来操作JTAG,但是IO模拟速度比较慢。SPI是与JTAG最接近的外设,可以使用SPI来加速JTAG的操作。然而SPI的4根信号(CS、SCK、MISO、MOSI)与JTAG的4根信号(TCK、TMS、TDI、TDO)并不对应,所以不能直接使用,还要一些特殊的处理。

仅在寄存器移位阶段使用SPI

第一个方案是仅在寄存器移位阶段使用SPI,即在JTAG的Shift-IR、Shift-DR这两个状态使用SPI加速,其它状态下仍然使用IO模拟。用这个方案,口线的对应如下:

  • SPI.SCK -> JTAG.TCK
  • SPI.MOSI -> JTAG.TDI
  • SPI.MISO -> JTAG.TDO

JTAG的TMS始终用IO模拟,不用映射到SPI的信号,因为在Shift-IR、Shift-DR的两个状态中TMS保持不变,除了最后一位数据。

用这种方案,使用一个SPI外设来加速寄存器的移位操作。JTAG中占用时间最长的主要是Shift-DR状态,在一定程度上可以利用SPI的速度加快JTAG操作,其它状态仍然是IO模拟,还是比较慢的。

利用两个SPI组合操作JTAG

使用SPI操作JTAG的两种方案_第1张图片
如上图所示,一个SPI作为Master,一个SPI作为Slave,两个SPI组合出JTAG所需要的操作。

左下方为Master SPI,左上方为Slave SPI,右边是JTAG。

Master SPI 驱动JTAG 的 TCK 以及 Slave SPI 的SCK,同时驱动 JTAG 的TMS。

Slave SPI 在 Master SPI 的驱动下,驱动 JTAG 的TDI,以及接收 JTAG的TDO。

这个点子源自:versaloon 。

这只是两个SPI驱动JTAG的其中一种配置,也可以用Master SPI驱动 TMS和TDI,或者用Master 驱动 TDI和TDO,都是可以的。核心思想是一样的,用两个SPI,分别做主机从机组合实现JTAG的操作。

你可能感兴趣的:(RV-LINK,spi,jtag)