仅供参考:我不确定我是否理解你,你可能已经知道/理解我在下面写的所有内容,也许比我更好。给我留言,我会删除答案。
1/2a:使用的硬件“只是”一些额外的寄存器和逻辑电路,它们形成/注入额外(正交!)状态到标准 JTAG 状态机。
如果您了解 JTAG 协议如何执行边界扫描以及如何从设备中推/拉比特流,您应该能够想象它是如何用于对片上存储库进行编程的。想象一下典型的菊花链,不是在芯片之间,而是在芯片内部。
假设该设备具有一些可编程的持久内存。通过更多的触发器和门,该器件在实际存储器的 JTAG 链之前或之后形成一个额外的缓冲区:
输入 -> xflops -> 内存 -> yflops -> 输出
假设 x/mem/y = 16/1024/0。现在,链有 1040 位。前面的 xflops 不会直接影响内存,反之亦然。xflops 现在可能链接到驱动内存的内置内部编程器的控制线。
input -> progcmd -> memory -> output
芯片内部的逻辑电路现在可以对一些 16 位“幻数”也就是“写命令”做出反应,这将触发持久存储器的写/擦除过程。任何其他 16 位值都将被忽略,设备的行为类似于 1024 r/o 数据,后跟 16 位回显或零。
好的,所以我们有一个简单的设备上的“控制器”,可以在“真实设备”上执行操作。如果你扩展这个想法,即控制器具有可以控制哪些子设备连接到链的状态,在运行中:
default chain after reset is:
input -> progcmd -> output
if now the controller gets ENABLE_WRITE it attaches MEM to chain
input -> progcmd -> memory -> output
then controller reacts to WRITE and ABORTs on everything else
input -> progcmd -> output
controller ges VERIFY, it reattaches MEM again but in READONLY mode
input -> progcmd -> memory -> output
etc
它当然只是一个额外的状态机。以类似的方式,您几乎可以执行任何花哨的操作,包括冻结、步进、读/写寄存器等调试。但是所有这些都需要在相关芯片中内置大量额外的逻辑。实际上,它在一个芯片中包含多个设备。
2b:不幸的是,我不能说更多,因为我对这个主题太陌生了;)我知道许多制造商形成了自己的内部标准,“控制器”只是在模型之间共享,有时在芯片系列之间共享,但我没有听说过制造商之间通用的任何“全球”标准。