通用功能集 - 执行设备诊断

186 阅读5分钟

Feature Set

  • 适用范围

    • 该命令适用于 ATA 设备(参见 4.2)和 ATAPI 设备(参见 4.3)。
  • 28-bit 命令

    • EXECUTE DEVICE DIAGNOSTIC 是一个 28 位命令,这是 ATA 协议中支持的一种命令格式,指令通过寄存器通信。

Description

  • 命令的核心功能

    • 触发设备内部诊断测试
      当主机发送 EXECUTE DEVICE DIAGNOSTIC 命令时,目标设备会执行一系列内部诊断测试,以检测设备的健康状态和功能完整性。
    • 诊断范围
      测试通常包括硬件电路、自检功能和设备初始化等。
  • 重要说明(NOTE 8)

    • 传输和主机适配器的关联(Transport and Host Adapter implications)

      • 此命令的执行可能受到不同传输协议(如 SATA 或 PATA)和主机适配器(HBA)的影响。
      • 详细信息可参考 ATA8-APTHBA2 文档。
    • 电源管理状态的影响

      • PM3: Sleep 状态例外
        如果设备处于或正在过渡到 PM3: Sleep 状态(设备完全休眠,低功耗模式),则设备不会立即响应诊断命令。
      • 其他电源管理状态
        如果设备处于 PM3 以外的电源管理状态(如 Active、Idle、Standby 等),设备应立即开始处理诊断序列。

Inputs

输入字段及说明

字段描述内容说明
FEATUREN/A(Not Applicable)不适用,该字段被忽略。
COUNTN/A(Not Applicable)不适用,该字段被忽略。
LBAN/A(Not Applicable)不适用,该字段被忽略。
DEVICE设备选择及标志位具体结构如下:
Bit 7: Obsolete已废弃,无需设置。
Bit 6: N/A不适用,该位被忽略。
Bit 5: Obsolete已废弃,无需设置。
Bit 4: Transport Dependent(依赖传输协议,参见 6.2.12)设置为设备选择标志,通常用来区分主设备和从设备。
Bit 3:0: Reserved保留位,必须设置为 0。
COMMAND7:0 操作码设置为 90h,表示执行设备诊断命令。

输入解析

  1. FEATURECOUNTLBA

    • 这些字段在此命令中未使用,主机可以忽略这些值。
  2. DEVICE

    • 这是选择设备的关键字段,具体结构如下:

      • Bit 4(Transport Dependent)

        • 通常用于选择主设备(Device 0)或从设备(Device 1)。
        • Bit 4 = 0:主设备(Device 0)。
        • Bit 4 = 1:从设备(Device 1)。
        • 在现代 SATA 系统中,由于每条总线通常只连接一个设备,该位的设置变得不重要,但仍然需要兼容协议。
      • Bit 7、Bit 5:已废弃,设置为 0。

      • Bit 3:0:保留位,必须设置为 0。

  3. COMMAND

    • 设置为 90h,这是 EXECUTE DEVICE DIAGNOSTIC 命令的操作码,用于指示设备执行诊断。

完整输入示例

假设对主设备(Device 0)执行诊断,输入设置如下:

字段说明
FEATURE0x00被忽略,但通常设置为 0。
COUNT0x00被忽略,但通常设置为 0。
LBA0x00被忽略,但通常设置为 0。
DEVICE0xA0Bit 7, 5 = 0(废弃位)Bit 4 = 0(主设备)Bit 3:0 = 0(保留位)
COMMAND0x90操作码,表示执行设备诊断命令。

DEVICE值解释

  1. 主设备(Device 0)

    • Bit 4 = 0,其余位固定为 0
    • 完整寄存器值为:
      0xA0(10100000b)
  2. 从设备(Device 1)

    • Bit 4 = 1,其余位固定为 0
    • 完整寄存器值为:
      0xB0(10110000b)

总结

  • 此命令的输入设置非常简单,核心是 COMMANDDEVICE 寄存器的值。
  • FEATURECOUNTLBA 字段虽然存在,但在此命令中无实际意义,可以忽略。

Normal Outputs

EXECUTE DEVICE DIAGNOSTIC 命令执行后,会将诊断结果作为代码写入 ERROR 寄存器。这些代码表示主设备(Device 0)和次设备(Device 1)的诊断状态,具体定义如下:

输出字段

  • ERROR 寄存器:存储诊断结果的八位代码,用于表示设备诊断是否通过或失败。

诊断代码说明(表 47)

在 Device 0 的 ERROR 寄存器中:
代码描述
01h主设备(Device 0)通过诊断,次设备(Device 1)通过或不存在。
00h02h-7Fh主设备(Device 0)诊断失败,次设备(Device 1)通过或不存在。
81h主设备(Device 0)通过诊断,次设备(Device 1)诊断失败。
80h82h-FFh主设备(Device 0)和次设备(Device 1)均诊断失败。
在 Device 1 的 ERROR 寄存器中:
代码描述
01h次设备(Device 1)通过诊断。
00h02h-7Fh次设备(Device 1)诊断失败。
80h-FFh保留代码(Reserved)。

特别说明

  1. 通过和失败

    • 01h 是设备通过诊断的代码。
    • 其他代码如 00h 或范围内的值表示设备失败。
  2. 设备不存在的情况

    • 如果次设备(Device 1)不存在,主机可能会在访问次设备时看到主设备的信息。
  3. 主次设备定义

    • 主设备(Device 0)和次设备(Device 1)的定义参见相关的传输标准。

Error Outputs

对于 EXECUTE DEVICE DIAGNOSTIC 命令,ERROR 寄存器中返回的代码仅表示诊断结果,而不会设置 ERROR 位(Bit 0)1,这表示命令本身的执行是成功的。

总结

  • ERROR 寄存器用作诊断结果的存储,值在正常范围内。
  • ERROR 位不会被置位为 1,因为此命令完成后,不视为命令失败。