Начиная с процессора или его сопутствующего чипсета (например, Intel PCH), каковы различные компоненты HW, участвующие в переводе чтения / записи на диск, и какова их роль?

В частности, меня смущают роли следующего:

  1. Хост-контроллер
  2. Контроллер устройства
  3. Адаптер главной шины

Насколько я могу сказать:

  1. Хост-контроллер: Схема, которая существует на материнской плате. Включает интерфейс на уровне регистра для взаимодействия драйверов. Отвечает за перевод запросов из своих регистров в действия: чтение / запись на подключенные устройства напрямую. Например, USB. Также может содержать способность DMA.
  2. Контроллер устройства: такой же, как хост-контроллер, но существует на внешнем устройстве, таком как контроллер диска на жестком диске.

  3. Адаптер главной шины: переводит протокол внешней шины во внутренний. Прозрачный для программного обеспечения. Например, драйвер, который хочет считывать / записывать в регистры на внешнем жестком диске контроллера жесткого диска, подключенного через SATA или через Infiniband.

Как тогда будет работать такое устройство, как внешняя клавиатура, подключенная через USB?На уровне SW драйверы по-прежнему взаимодействуют с конкретными регистрами; однако в игре есть 2 контроллера.

2 ответа2

1

Хост-контроллер, хост-адаптер шины или даже хост-адаптер - это просто разные имена для одной и той же вещи (ср. Википедия): аппаратная часть, соединяющая шину между хостом (вашим ПК) и устройством (внешним жестким диском) с внутренней шиной (PCIe) хоста.

Итак, для жесткого диска через SATA:

<--------- PC --------->         <------ Harddisk ------>

PC south-      SATA host          SATA device       Device
bridge    ---- controller ....... controller   ---- SoC
           ^^               ^^                  ^^
        PCIe-Bus          SATA-Bus        Some kind of bus

Хост-контроллер может существовать на материнской плате или в виде отдельной платы. ПК может считывать / записывать в регистры хост-контроллера или выполнять DMA, а хост-контроллеры преобразуют их в действия на шине SATA (или переводят действия на шине SATA в соответствующие значения регистров или действия DMA).

Что-то вроде "адаптера шины хоста", прозрачного для программного обеспечения, в этом смысле не существует, хотя, конечно, возможно спроектировать какое-либо устройство, которое эмулирует другое устройство (например, флешка USB эмулирует жесткий диск, используя тот же протокол, что и используется для жесткого диска).

То же самое для клавиатуры, подключенной через USB:

<--------- PC --------->         <------ Keyboard ------>

PC south-      USB host           USB device       Device
bridge    ---- controller ....... controller   ---- SoC
           ^^               ^^                  ^^
        PCIe-Bus          USB-Bus          Internal bus

Хотя здесь контроллер USB-устройства будет интегрирован в одну микросхему со встроенным в клавиатуру контроллером, а шина внутренняя, и вы не увидите ее при работе с клавиатурой.

Программный стек в целом сложнее, чем вы описываете; есть другие протоколы или даже стеки протоколов над самим протоколом шины, например, упомянутый протокол «USB-накопитель» (который похож на SCSI) выше базового протокола USB, или протокол "USB HID" для клавиатуры выше базового протокола USB ,

1

Только этот вопрос:

Как тогда будет работать такое устройство, как внешняя клавиатура, подключенная через USB?

Когда устройство подключено к Windows, отправьте запрос, пожалуйста, укажите вашу собственную команду, и все USB-устройства должны ответить на нее.

Windows запрашивает свои внутренние базы данных, чтобы найти драйвер и настроить устройство. Тогда водитель берет на себя ответственность.

Даже простая клавиатура USB сбрасывает много информации. Примечание: у него есть номер шины и номер устройства на этой шине, чтобы определить, где он подключен.

Затем имеет уникальный идентификационный номер. Первые 4 указывают, какой производитель произвел устройство, за которым следует уникальный номер устройства от этого производителя.

Bus 008 Device 003: ID 03f0:0024 Hewlett-Packard KU-0316 Keyboard
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x03f0 Hewlett-Packard
  idProduct          0x0024 KU-0316 Keyboard
  bcdDevice            3.00
  iManufacturer           1 CHICONY
  iProduct                2 HP Basic USB Keyboard
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           34
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      1 Keyboard
      iInterface              0
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      65
         Report Descriptors:
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              10
Device Status:     0x0000
  (Bus Powered)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .