【问题标题】:How many physical channels SATA controller has?SATA控制器有多少物理通道?
【发布时间】:2015-01-31 20:25:13
【问题描述】:

想象一个具有一个 SATA 控制器的系统。如果控制器在 IDE 模式下运行,它将显示在设备管理器中,如下所示:

Windows XP:

IDE controller's name
Primary IDE Channel
Secondary IDE Channel

Windows >= Vista:

IDE controller's name
ATA Channel 0
ATA Channel 1

如果控制器在 AHCI 模式下运行,它将在 XP 和 >= Vista 上显示为“SATA AHCI 控制器”。

AHCI 模式下的 SATA 控制器最多支持 32 个设备(32 位掩码表示设备连接)。我认为这只是软件限制,因为每个设备都需要单独的通道,因此不太可能存在这样的系统,其中 SATA 控制器与所有 32 个通道“连接”。但我认为 32 是一个数字,意味着控制器可以处理两个以上的设备,因此具有两个以上的通道。所以,我想问一下SATA控制器在实践中通常有多少通道。 ATA控制器有两个通道,那么是不是说SATA控制器在IDE模式下为了软件兼容有相同的通道数呢?或者它有两个以上的通道,但在 IDE 模式下只有前两个通道可用? (至少在 XP 上,因为“主要”渠道和“次要”渠道大大降低了“第三”渠道的可能性,而“0”渠道、“1”渠道、“2”渠道等情况并非如此)

【问题讨论】:

  • 你没有提到你需要知道这个的任何与编程相关的原因。
  • 我想弄清楚特定硬盘驱动器使用哪些端口并尝试发出一些 ATA 命令(没有任何 ioctls)。我们可以通过枚举磁盘控制器来获取资源信息。为了正确编写一些代码,我需要知道控制器是否仅限于两个通道,例如 ATA 通道 0 和 ATA 通道 1,或者在 IDE 模式下运行时它可以有更多通道。
  • 我看不出在这种情况下实际的物理 SATA 端口数量有什么影响。您如何在没有 ioctls 的情况下发出 ATA 命令?在任何情况下,您似乎都假设只能连接 0 或 1 个驱动器,但实际上 SATA 端口倍增器可用于将多达 15 个驱动器连接到一个物理端口。此外,您似乎在 Windows 中为 SATA 控制器驱动程序假设了标准化的设备层次结构,但事实并非如此。我的 Marvel AHCI 控制器具有“ATA 通道 0”子节点,但我的英特尔 AHCI 控制器将驱动器作为直接子节点。
  • 感谢有关 Marvel AHCI 控制器层次结构的信息,因此他们的控制器“报告”除自身之外的两个 ATA 通道,从而为 Windows 提供了更改启用/禁用 DMA 模式等选项的方法。因此,当您选中 DMA 框时,Windows 会将其报告给 Marvel 驱动程序,并且驱动程序让控制器知道它应该为某些特定设备使用什么模式,尽管驱动程序通过 AHCI 定义的接口与控制器一起工作(这意味着只有 DMA 模式),所以它是显然这里发生了一些特定于供应商的非标准内容。
  • 另外你能告诉我SATA控制器可以拥有的最大ATA通道数是多少吗?而我特别感兴趣的是SATA端口倍增器的寄存器集是否与SATA硬盘驱动器和cd-rom相同。

标签: windows sata ata


【解决方案1】:

稍晚一点,但可能对其他人有用。

让我们添加一些说明。有带有AHCI接口(Advanced Host Controller Interface)的SATA Host Controller。并且有SATA驱动器(或任何其他具有AHCI接口的设备)。

SATA 主机控制器 (HC) 有多个端口。理论上最多可以有 32 个 SATA 端口,但不少于 1 个(没有任何端口 HC 本身没有任何意义)。实际端口的数量取决于实现。 PC 中使用的一般 HC 芯片更可能有 1 或 2 个端口。 SATA 驱动器连接到端口。因此,如果 SATA HC 有 2 个端口,则最多可以连接 2 个 SATA 驱动器/设备。

在现实生活中,一切都更加有趣。正如@Ross Ridge 在 cmets 中提到的,可以使用端口倍增器。端口倍增器是增加可以连接的设备数量。再次,端口倍增器是连接到 SATA HC 端口 的设备(而不是主机控制器本身)。一个乘数到一个端口。第二个乘法器可以连接到其他端口等。乘法器的支持是实现定义的。有些 HC 可以与他们合作,有些则不能。乘法器有 16 个端口。端口'0xF'是乘法器的特殊控制端口。因此最多可以连接 15 台设备。

以上都是关于 SATA 规范的。考虑列出的问题本身:

  • 操作系统驱动程序可以以自己的方式枚举和命名驱动器。就像你提到的Secondary IDE ChannelATA Channel 1。名字更有可能是带有并行接口的驱动器的遗留物。事实上,“通道”这个词甚至不在 SATA AHCI 规范中。有端口:)

  • 一些 fu... 驱动程序可能暗示“软件限制”,例如不支持乘法器或仅使用一个端口。定期更新驱动程序。

  • thus providing Windows with a way to change such options like enable/disable DMA mode。 Windows DMA 模式与 SATA 驱动器无关。 SATA 主机控制器使用特殊缓冲区来分配从驱动器接收到的数据。 DMA mode 在这种情况下更像是操作系统如何访问这些缓冲区,而不是 HC 如何与连接的驱动器通信。

  • Also can you tell me what is the maximum number of ATA Channels that SATA controller can have?。有端口。端口的数量是实现定义的。如果您知道主板上的 SATA Host Controller 地址读取CAP 寄存器,则低4 位为Number of Ports - 1。 PS:你需要一个驱动来直接访问物理内存所以......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多