Intel CCA/DBC简介

本文根据《软件调试(第2版)》卷1:硬件基础“第七章 JTAG 调试”编写。建议有兴趣的朋友购买一本来学习。对于 Firmware 工程师来说,从底向上学习是一个很好的方向。

现在的X86变得日益复杂,如何进行有效的Debug 也日渐成为一个难题。为此 Intel 在芯片组或者 CPU 上预留了一个称作DCI (Intel® Direct Connect Interface)的Debug 接口。这个接口使用 USB 3.0一模一样的外部连接。CPU 内部有切换器,当Chipset 发现外部有设备和他握手,就将原本的USB信号切换为DCI 的信号。这样无需额外的预留就能实现Debug。

在DCI 出现之前,Intel 使用J-Tag 接口。当时的 Debug 盒子是下面这样,叫做 In-Target Proble,简称 ITP。  当年价格在 3000刀,现在好像没有这么贵了。之前我在的公司买了一个,老板恨不得把它供起来,一年也用不到几次。最后不知道什么原因它的适配器坏掉了。我去询问价格,得到的答案是适配器90刀,然后90天发货........当然对方也很nice 的告诉我可以去中关村配一个电压相同功率差不多的也能用。后来回报上去之后老板左右不定,不想花钱和时间又怕损坏.........最终这个设备束之高阁了。

图片来自【参考1】

为了Debug,主板上同时必须预留下面这样的 J Tag 接口。显而易见,说服HW工程师在主板上预留这样的接口需要花费极大的口舌,至于说服老板在量产板子上焊接这样的接口几乎是不可能的事情。因此,串口一直是BIOS工程师的最爱。

图片来自【参考2】

现在的Debug 盒子长得是下面这样,全称是“Intel SVT Closed Chassis Adapter”,缩写 “CCA”(Intel Silicon View Technology Closed Chassis Adapter),价格390刀。更通俗称作“DCI 蓝盒子”。通过这个设备可以绕开 CPU 直接和硬件打交道。这样,当 CPU 出现问题的时候,比如:CPU Hang了,工程师有机会来读取一些寄存器值…….

来自【参考3】

除此之外还有长得类似 WinDBG 线的 DbC( debug class ) 线,同样是插在 USB 3.0 口上就能进行Debug。

图片来自参考4

相比前面的 CCA ,可以看出 DBC 更见简单便宜,但是在Debug 的时候可能会出现无法连接的情况,比如停得太早或者 XHCI 出现问题直接死掉了。因此,如果有可能尽量首选 CCA。

上述设备的典型应用如下(来自文章开始提到的《软件调试》 7.4.7)

正如本章开头所说的,硬件调试工具通常用来解决软件调试器难以解决的问题,以下是使用 JTAG 方式调试的一些典型场景。

(1)调试系统固件代码,包括BIOS代码,EFI代码以及支持AMT技术的ME(Management Engine)代码。

(2)调试操作系统的启动加载程序(Boot Loader),以及系统临界状态的问题,比如进入睡眠和从睡眠状态恢复过程中发生的问题。

(3)软件调试器无法调试的其他情况,比如开发软件调试器时调试实现调试功能的代码(例如Windows的内核调试引擎),以及调试操作系统内核的中断处理函数,任务调度函数等。

(4)观察CPU的微状态,比如CPU的ACPI 状态(C State)。

作为BIOS工程师难得申请一些设备,所以如果有可能尽量申请一个。毕竟“工具善其事,必先利其器”,工具简单直观能省去很多麻烦。

参考:

  1. https://habrahabr.ru/company/pt/blog/341946/
  2. https://minnowboard.org/add-ons/debugger-lure
  3. https://designintools.intel.com/Silicon_View_Technology_Closed_Chassis_Adapter_p/itpxdpsvt.htm
  4. https://designintools.intel.com/product_p/itpdciamcm1mu.htm

《Intel CCA/DBC简介》有26个想法

    1. 没有芯片的,可以用普通usb 3.0 公对公线连接。但是不建议你这样做,因为普通线上面 vcc 是连接的,Dbc 这个位置是不通的。我测试过 WinDBG 线和 Dbc 线,回头我把结果贴上来。

      1. 你好,请问可以告知一下 WinDBG 线与 DbC 线差别吗?最近尝试在消费级产品上启用 DCI(USB3 DbC) 用于调试,CONNECTED 却无法 suspend CPU,怀疑是改造的公对公线缆问题。

        1. 他们两个线序是有一点差别的,不过我试验过用 windbg 线可以做 DbC 调试的。如果可以 connected 那么应该不是线本身的问题。最大可能是因为你没有正确打开 DbC 选项,还有就是有设置 fused 之后(好像是manufacture done)无法启用调试功能。建议你找公司没有设置fused 的板子试试看。

          1. 找到问题了,是 PCH 和 CPU 间的 PCH_JTAG 没有连接,换了块 asrock 的主板就行了。感谢博主的回复。

          2. 楼主你好,请问fused 是什么
            我被调试机用的MSI的Z390主板
            DCI位已经确认开启了,但是Host机无法识别设备
            我想了解一下fused到底是什么设置
            是不是像下面回复里那样换一块Asrock主板就好了

          3. 这里提到 Fuse 是处于 PCH 中的“熔丝位”. 出于安全考虑一般出厂之后会将这个位置设置起来,这样就会打开拒绝调试等等以便提升安全。
            比如,普通的单片机上有熔丝位,如果没有 fused,是可以通过烧写器读取内部的firmware的,但是入宫设置了对应的熔丝位,那么没有办法使用烧写器来读取内容的。

          4. 请教一下windbg线做DbC调试,需要设置什么嘛?我这边用windbg线在intel system debugger中一直连不上target。FIT 中已经把DCI 功能打开了,BIOS中的DCI和DBC capability都设置了。我的主板是alderlake p 的。

          5. To melody:

            这个功能我没试验过。应该是你先能连上 DbC ,比如实验 C-Script 确定可以,然后再实验 WinDBG over DCI这种。

  1. 请问下,买了个博主说的DCI蓝盒子,FirmWare灯是绿色的,DCI Connect黄色闪烁,貌似是连接不上目标电脑,目标机开机的瞬间会变绿色1秒不到。目标cpu是i7-7700HQ,请问有没有详细的使用教程。

      1. 非常感谢大佬的回复,我想向你确认的一件事情是这样的,假如我想调试1台Surface目标机,我是不是必须拆机,吹下bios芯片,读取rom,然后Fit修改DCI标志,然后写回芯片,才能正常使用Intel 调试设备来调试目标机。谢谢您,请看到后给我答疑一下。如果方便的话可以qq(594302831) 直接和您沟通下可否。

  2. 请教下,如果用Dbc来debug,也要用到ISS 工具吗,能不能像普通serial那样丢debug信息,没有NDA好像下载不了Intel® System Studio

      1. 能提供一下您这边的 intel system studio 的license 文件吗? 我手头是 2018.7 和 2019.1版本的软件 需要license来激活

回复 zhang 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注