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-APT 和 HBA2 文档。
-
电源管理状态的影响:
- PM3: Sleep 状态例外:
如果设备处于或正在过渡到 PM3: Sleep 状态(设备完全休眠,低功耗模式),则设备不会立即响应诊断命令。 - 其他电源管理状态:
如果设备处于 PM3 以外的电源管理状态(如 Active、Idle、Standby 等),设备应立即开始处理诊断序列。
- PM3: Sleep 状态例外:
-
Inputs
输入字段及说明
| 字段 | 描述 | 内容说明 |
|---|---|---|
| FEATURE | N/A(Not Applicable) | 不适用,该字段被忽略。 |
| COUNT | N/A(Not Applicable) | 不适用,该字段被忽略。 |
| LBA | N/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。 | |
| COMMAND | 7:0 操作码 | 设置为 90h,表示执行设备诊断命令。 |
输入解析
-
FEATURE、COUNT和LBA:- 这些字段在此命令中未使用,主机可以忽略这些值。
-
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。
-
-
-
COMMAND:- 设置为
90h,这是EXECUTE DEVICE DIAGNOSTIC命令的操作码,用于指示设备执行诊断。
- 设置为
完整输入示例
假设对主设备(Device 0)执行诊断,输入设置如下:
| 字段 | 值 | 说明 |
|---|---|---|
| FEATURE | 0x00 | 被忽略,但通常设置为 0。 |
| COUNT | 0x00 | 被忽略,但通常设置为 0。 |
| LBA | 0x00 | 被忽略,但通常设置为 0。 |
| DEVICE | 0xA0 | Bit 7, 5 = 0(废弃位) ,Bit 4 = 0(主设备) ,Bit 3:0 = 0(保留位) 。 |
| COMMAND | 0x90 | 操作码,表示执行设备诊断命令。 |
DEVICE值解释
-
主设备(Device 0) :
- Bit 4 =
0,其余位固定为0。 - 完整寄存器值为:
0xA0(10100000b) 。
- Bit 4 =
-
从设备(Device 1) :
- Bit 4 =
1,其余位固定为0。 - 完整寄存器值为:
0xB0(10110000b) 。
- Bit 4 =
总结
- 此命令的输入设置非常简单,核心是
COMMAND和DEVICE寄存器的值。 FEATURE、COUNT和LBA字段虽然存在,但在此命令中无实际意义,可以忽略。
Normal Outputs
EXECUTE DEVICE DIAGNOSTIC 命令执行后,会将诊断结果作为代码写入 ERROR 寄存器。这些代码表示主设备(Device 0)和次设备(Device 1)的诊断状态,具体定义如下:
输出字段
- ERROR 寄存器:存储诊断结果的八位代码,用于表示设备诊断是否通过或失败。
诊断代码说明(表 47)
在 Device 0 的 ERROR 寄存器中:
| 代码 | 描述 |
|---|---|
01h | 主设备(Device 0)通过诊断,次设备(Device 1)通过或不存在。 |
00h、02h-7Fh | 主设备(Device 0)诊断失败,次设备(Device 1)通过或不存在。 |
81h | 主设备(Device 0)通过诊断,次设备(Device 1)诊断失败。 |
80h、82h-FFh | 主设备(Device 0)和次设备(Device 1)均诊断失败。 |
在 Device 1 的 ERROR 寄存器中:
| 代码 | 描述 |
|---|---|
01h | 次设备(Device 1)通过诊断。 |
00h、02h-7Fh | 次设备(Device 1)诊断失败。 |
80h-FFh | 保留代码(Reserved)。 |
特别说明
-
通过和失败:
01h是设备通过诊断的代码。- 其他代码如
00h或范围内的值表示设备失败。
-
设备不存在的情况:
- 如果次设备(Device 1)不存在,主机可能会在访问次设备时看到主设备的信息。
-
主次设备定义:
- 主设备(Device 0)和次设备(Device 1)的定义参见相关的传输标准。
Error Outputs
对于 EXECUTE DEVICE DIAGNOSTIC 命令,ERROR 寄存器中返回的代码仅表示诊断结果,而不会设置 ERROR 位(Bit 0) 为 1,这表示命令本身的执行是成功的。
总结
- ERROR 寄存器用作诊断结果的存储,值在正常范围内。
- ERROR 位不会被置位为
1,因为此命令完成后,不视为命令失败。