Буферы и линейные аппаратные драйверы что это

Обновлено: 06.07.2024

Сейчас уже можно разделить светодиоды на два основных подтипа: индикаторные и осветительные. Осветительные светодиоды – относительно новые элементы светотехники. Первые модели применялись как индикаторы еще лет 30 назад. Но прогресс на месте не стоит. Инженерам удалось получить большую яркость при минимальном размере и потребляемом токе в сравнение с лампами. Кроме того, светодиоды имеют намного большую механическую прочность. Как лампочку их уже не разобьешь.

Светодиодная осветительная продукция серьезно потеснила практически все другие источники света. Светодиоды могут обеспечить освещение не хуже лампового. А их энергоэффективность намного выше. Обычно источники света на основе светодиодов окупаются в течение года. Сейчас их можно встретить в качестве домашнего освещения, уличных фонарей. Они устанавливаются в световое оборудование автомобилей. Даже в мониторах и телевизорах они заменили лампы подсветки .

Назначение.

Светодиод весьма чувствителен к качеству электропитания. Если пониженное напряжение ему не сделает ничего плохого, то повышенные напряжения и токи очень быстро снижают ресурс этих перспективных источников света. Многие видели, наверное, как на автомобилях хаотично моргают огни. Этот светодиод уже отслужил.

Для обеспечения стабильного электропитания (поддержания заданного напряжения и тока) необходима дополнительная электронная схема – блок питания или драйвер питания. Часто его называют led driver.

Принцип работы.

Электронная схема должна обеспечить строго стабилизированные напряжение и ток, подводимые к кристаллу. Небольшое превышение в цепи питания существенно снижает ресурс светоизлучателя.

В простейшем и самом дешевом случае просто ставят ограничительный резистор.

Питание диода через ограничивающий резистор.

Это простейшая линейная схема. Она не способна автоматически поддерживать ток. С ростом напряжения, он будет расти, при превышение допустимого значения произойдет разрушение кристалла от перегрева. В более сложном случае управление реализуется через транзистор. Недостаток линейной схемы – бесполезное рассеивание мощности. С ростом напряжения будут расти и потери. Если для маломощных LED-источников света такой подход еще допустим, то при использовании мощных светоизлучающих диодов такие схемы не используются. Из плюсов только простота реализации, низкая себестоимость, достаточная надежность схемы.

Можно применить импульсную стабилизацию. В простейшем случае схема будет выглядеть так:


Пример.Импульсная стабилизация (упрощенно)

Категорически не стоит путать светодиодный драйвер и ПРА для люминесцентных ламп, у них разные принципы работы.

Характеристики драйверов, их отличия от блоков питания LED ленты.

Если сравнивать драйвер и блок питания, то у них есть различия в работе. Драйвер – это источник тока. Его задача поддерживать именно определенную силу тока через кристалл или светодиодную линейку.

Задача стабилизированного блока питания в выдаче именно стабильного напряжения. Хотя блок питания – понятие обобщенное.

Источник напряжения применяется в основном со светодиодной лентой, где диоды включены в параллель. Соответственно через них должен проходить равный ток, при неизменном напряжении. При использовании одного светодиода важно обеспечить определенную силу тока через него. Отличия есть, но оба выполняют одну и туже задачу – обеспечение стабильного питания.

Для подключения светодиодной ленты необходимы, как правило, блоки питания, выдающие 12, либо 24 В. Второй параметр – это мощность. Блок питания должен выдавать мощность не равную, а несколько большую, чем мощность подключаемой светодиодной линейки. В противном случае, яркость свечения будет недостаточна. Обычно запас по мощности рекомендуется в пределах 20-30 процентов от суммарной мощности.

При выборе драйвера нужно учесть:

  • Мощность,
  • Напряжение,
  • Предельный ток.

Кроме того, существуют и регулируемые источники питания. Их задача – регулировка яркости освещения. Но различаются принципы – регулировка напряжения, либо силы тока.

Для подключения led-линейки потребуется большая сила тока при неизменном напряжении.

Суммарная мощность будет рассчитываться по формуле P = P(led) × n, где Р – мощность, Р(led) – мощность единичного диода в линейке, n – их количество.

Сила тока через линейку будет рассчитываться по аналогичной формуле.

Если есть желание самостоятельно изготовить источник питания для светодиодов, то самый простой вариант – импульсный без гальванической развязки.


Схема простого led-драйвера без гальванической развязки.

Схема проста и надежна. Делитель основан на емкостном сопротивлении. Выпрямление производится при помощи диодного моста. Электролитический конденсатор (перед L7812) сглаживает пульсации после выпрямления. Конденсатор после L7812 сглаживает пульсации на светодиодах. На работу схемы он не влияет. L7812 – собственно сам стабилизатор. Это импортный аналог советских микросхем серии КРЕНхх. Та же самая схема включения. Характеристики несколько улучшены. Однако предельный ток составляет не более 1.2А. Это не позволит создать мощный светильник. Существуют неплохие варианты готовых источников питания.

Как выбрать драйвер для светодиодов.

От выбора драйвера зависит срок службы светодиодов. При этом светодиод достигает своих номинальных характеристик, так как получает необходимую ему мощность.

В зависимости от степени защиты драйвер можно применять либо дома, либо на улице. Внешне драйвер может быть открытым, в корпусе из перфорированного металла, либо – закрытый, размешенный в герметичной металлической коробке. Для дома достаточно негерметизированного пластикового корпуса, в котором расположен электронный блок.

Сразу стоит учесть, что ограничивающий резистор – это не самый лучший вариант. Он не избавит ни от скачков питающей сети, ни от импульсных помех. Любое изменение напряжения приведет в скачку тока. Линейные стабилизаторы также не являются достойным средством запитки светоизлучающих диодов. Его способности ограничиваются низкой эффективностью.

Выбор драйвера производится только после того, как известна суммарная мощность, схема подключения и количество светодиодов.

Сейчас много подделок и одни и те же по типоразмерам диоды могут обеспечивать разные мощности. Лучше использовать только известные марки электротехнической продукции.

На корпусе драйвера для подключения светодиодов, всегда размещена спецификация. Она включает:

  • класс защищенности от пыли и жидкости,
  • мощность,
  • номинальный стабилизированный ток,
  • рабочее входное напряжение,
  • диапазон выходного напряжения.

Достаточно популярны бескорпусные led-драйверы. Плату потребуется разместить в корпусе. Это необходимо для безопасного использования. Платы больше подходят для радиолюбителей-энтузиастов. У них входное напряжение может быть либо 12 В, либо 220 В.

Также стоит продумать о размещении драйвера. Температура и влажность влияют на надежность системы освещения.


Не стоит пытаться выжать из источника тока максимум. Это приводит к работе на предельных режимах, соответственно возникает повышенный нагрев. Превышение может вывести стабилизатор из строя.

Виды драйверов.

По типу их можно подразделить на:

Линейные. Они наиболее подходящие, если входное напряжение не стабильно. Отличаются улучшенной стабилизацией. Распространены мало по причине низкого КПД. Выделяет большее количество тепла, подходит для маломощной нагрузки.


Внутреннее устройство драйвера

Внешний вид и схема драйвера LED 1338G7.

Импульсные. Основаны на микросхемах ШИМ. Обладают высоким КПД. Отличаются малым нагревом и длительным сроком службы.


Микросхемы ШИМ создают значительный уровень электромагнитных помех. Людям с кардиостимуляторами не рекомендовано находится в помещениях, где применяются такие драйвера для питания светодиодов.

Драйвер, работающий с диммером. Принцип основан на использовании ШИМ-контроллера. Принцип состоит в том, что регулируется сила тока на светодиодах. Низкокачественные изделия дают эффект мерцания.


Драйвер с диммером.

LED драйвер на 220 В.

Существует немало уже готовых светодиодных драйверов промышленного производства. Естественно, они обладаю различными характеристиками. Их особенность в том, что они питаются от сети 220 В переменного напряжения и могут работать в широком диапазоне питающего напряжения. Задача, у них все та же. Выдать определенную силу тока. Многие промышленные изделия уже имеют гальваническую развязку. Гальваническая развязка предназначена для передачи электроэнергии без непосредственного соединения входной и выходной частей схемы. Это дополнительные очки в плане электробезопасности (простейшей и исторически первой гальванической развязкой считается обычный трансформатор). Обычно они имеют нестабильность не более 3 %. В подавляющем большинстве сохраняют работоспособность от 90-100 Вольт и до 260 Вольт. В магазинах очень часто их могут называть:

  • блок питания (БП),
  • источник тока,
  • адаптер питания,
  • источник питания.

Это все одно и тоже устройство. Продавцы не обязаны обладать техническим образованием.

Рекомендуемые производители светодиодных драйверов.

Многие светодиодные энергосберегающие лампы уже имеют встроенный драйвер. Тем не менее лучше не приобретать безымянную продукцию родом из Китая. Хотя временами и попадаются достойные внимания экземпляры, что в прочем явление редкое. Существует огромное количество поддельных осветителей. Многие модели не имеют гальванической развязки. Это представляет опасность для светодиодов. Такие источники тока при выходе из строя могут дать импульс и сжечь led-ленту.

Но тем не менее рынок в основном занят именно китайской продукцией. Российские поставщики известны не широко. Из них можно ответить продукцию фирм Аргос, Тритон ЛЕД, Arlight, Ирбис, Рубикон. Большинство моделей может работать и в экстремальных условиях.

Из иностранных можно смело выбрать источники тока от Helvar, Mean Well, DEUS, Moons, EVADA Electronics.

Практически каждый, кто имел дело со сверхъяркими светодиодами, знает, что питать их нужно через специальное устройство – драйвер. На сегодняшний день наиболее распространенными являются драйверы, работающие по двум принципам – линейной и импульсной стабилизации. Чем они отличаются и какой из них лучше?

Зачем светодиоду драйвер?

Чтобы разобраться в этом вопросе, необходимо познакомиться с вольт-амперной характеристикой (ВАХ) светодиода.

Из графика видно, что при постепенном увеличении напряжения ток через светодиод вначале не течет вообще. При достижении определенного значения Uнач появляется ток, и прибор начинает светиться тем ярче, чем выше напряжение. При достижении Uном ток достигнет паспортного значения Iном, а светодиод засветится в полную силу.

Такой режим будет соблюдаться до тех пор, пока напряжение не достигнет значения Uмакс. При дальнейшем его увеличении кривая ВАХ резко поднимается вверх – ток быстро выходит за предельно допустимое значение и полупроводник сгорает. Таким образом, для того, чтобы прибор не вышел из строя и вместе с тем имел максимальную светоотдачу необходимо точно поддерживать режим, при котором ток и напряжение имеют номинальное значение. Для этого, казалось бы, можно обойтись обычным стабилизатором напряжения, поскольку ток напрямую зависит от напряжения.

Но тут появляется новая проблема – ВАХ светодиода не постоянна и зависит от температуры кристалла. Чем выше температура, тем кривая ВАХ сильнее сдвигается влево и становится круче. Но Uном и Uмакс у всех светодиодов находятся практически рядом – окно обычно составляет десятые вольта. Стоит кристаллу чуть прогреться, как граница Uмакс сдвинется влево, полупроводник выйдет из режима.

Из графика видно, что после прогрева кристалла для поддержания номинального тока нужно уменьшить напряжение, но оно стабилизировано и ток стал критическим.

Из-за этого кристалл нагреется еще сильнее, сопротивление перехода снова упадет, ток повысится. Повышение тока в свою очередь вызовет еще больший нагрев кристалла. Начнется лавинообразный процесс, который закончится тепловым пробоем. По сути, прибор сожжет сам себя.

Таким образом, обычной стабилизацией напряжения вопрос не решить – необходимо стабилизировать ток и держать его на уровне Iном. Для этого и служит драйвер, который, по сути, является стабилизатором тока. Вполне очевидно, что характеристики драйвера, в частности, ток стабилизации, должны совпадать с характеристиками светодиода, которые указаны в паспорте.

Примечательно, что в паспорте указывается не рабочее напряжение светодиода, а его рабочий ток, и теперь это понятно.

Драйверы – какие бывают и чем отличаются

Как было указано выше, драйверы, питающие светодиоды, могут быть двух типов – линейные и импульсные. И те, и другие выполняют одну и ту же задачу – стабилизируют ток, протекающий через светодиод, на заданном уровне. Но принцип стабилизации у них существенно отличается.

Линейные

По сути, такой стабилизатор представляет собой переменный резистор, но движком управляет не рука человека, а электронная схема.

При подаче на вход схемы напряжения Uвх, оно проходит через регулирующий элемент РЭ, схему контроля тока КТ и подается на выход, к которому подключена нагрузка. Узел КТ контролирует ток и в зависимости от его величины изменяет сопротивление РЭ. Ток мал – сопротивление РЭ уменьшается, велик – увеличивается. В результате на нагрузке поддерживается тот ток, на который настроен конкретный КТ.

Регулируется, конечно, не ток, а напряжение на нагрузке, но именно от его величины зависит величина тока.

Стабилизатор, работающий по такому принципу прост в построении, достаточно надежен, при необходимости легко ремонтируется. Стоит он недорого и имеет хорошие массогабаритные показатели. Кроме того, подобная схема осуществляет безобрывную регулировку тока и не создает импульсных помех в цепях питания.

Но есть у этого принципа и существенный недостаток – низкий КПД. Линейный стабилизатор по своей сути - регулируемый делитель напряжения. Нужная часть Uвх подается на нагрузку, остальное бесполезно рассеивается на регулирующем элементе, роль которого обычно выполняет транзистор того или иного типа. Что касается КПД, то его несложно рассчитать, воспользовавшись простой формулой:

КПД = Uвых/Uвх

Импульсные

Принцип работы стабилизаторов этого типа в корне отличается от принципа линейной стабилизации.

Здесь регулирующим элементом является ключ К, а схема дополнена дросселем L и диодом. При замыкании ключа дроссель начинает запасать энергию в магнитном поле, а ток через него постепенно возрастает. Диод в это время заперт и в процессе не участвует.

Как только ток достигнет заданной величины, токовый контроллер КТ разомкнет ключ. Откроется диод и дроссель начнет возвращать запасенную энергию в цепь. Постепенно ток начнет уменьшаться и как только он достигнет критически низкого значения, КТ снова замкнет ключ К. Процесс повторится.

Очевидно, что на регулирующем элементе, работающем в ключевом режиме, будет рассеиваться намного меньшая мощность, чем при работе в режиме линейной стабилизации. Именно поэтому, стабилизаторы, работающие по этому принципу, имеют высокий КПД, который при правильно подобранных элементах может достигать 98% даже при больших токах коммутации. При этом регулирующему элементу не понадобится громоздкий радиатор, что существенно улучшит массогабаритные показатели.

Впрочем, улучшит не существенно, так как место радиатора займет дроссель. Он несколько меньше радиатора, но при больших токах коммутации может иметь достаточно большие размеры.

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

Какой драйвер лучше?

Исходя из вышесказанного однозначно ответить на этот вопрос сложно. Линейная схема стабилизации тока оправдывает себя лишь при работе с малыми (до 100 мА) токами или небольшой разницей между входным и выходным напряжениями. Исключение может составлять лишь случай, когда необходимо полное отсутствие помех – в звукозаписывающих студиях, больницах с чувствительным оборудованием и пр.

Импульсные драйвера, хотя и имеют свои недостатки, в большинстве случаев все же предпочтительнее линейных. Именно поэтому на сегодняшний день они практически вытеснили приборы линейного типа, оставив им лишь узкую строго ограниченную нишу.

Аппаратные драйверы можно назвать «истинными» драйверами, так как в отличие от высокоуровневых драйверов, они выполняют все традиционные функции по управлению устройствами, включая обработку прерываний и непосредственное взаимодействие с устройствами ввода-вывода.

Более точно, аппаратный драйвер имеет дело не с устройством, а с его контроллером. Контроллер, как правило, выполняет достаточно простые функции, например преобразует поток бит в блоки данных и осуществляют контроль и исправление возникающих в процессе обмена данными ошибок. Каждый контроллер имеет несколько регистров, которые используются для взаимодействия с центральным процессором. Обычно у контроллера имеются регистры данных, через которые осуществляется обмен данными между драйвером и устройством, и управляющие регистры, в которые драйвер помещает команды. В некоторых типах компьютеров регистры являются частью физического адресного пространства, при этом в таких компьютерах отсутствуют специальные инструкции ввода-вывода — их функции выполняют инструкции обмена с памятью. В других компьютерах адреса регистров ввода-вывода, называемых часто портами, образуют собственное адресное пространство за счет введения специальных операций ввода-вывода (например, команд IN и OUT в процессорах Intel Pentium).

Внешнее устройство в общем случае состоит из механических и электронных компонентов. Обычно электронная часть устройства сосредоточивается в его контроллере, хотя это и не обязательно. Некоторые контроллеры могут управлять несколькими устройствами. Если интерфейс между контроллером и устройством стандартизован, то независимые производители могут выпускать как совместимые со стандартом контроллеры, так и совместимые устройства.

Аппаратный драйвер выполняет ввод-вывод данных, записывая команды в регистры контроллера. Например, контроллер диска персонального компьютера принимает такие команды, как READ, WRITE, SEEK, FORMAT и т. д. Когда команда принята, процессор оставляет контроллер и занимается другой работой. По завершении команды контроллер генерирует запрос прерывания для того, чтобы передать управление процессором операционной системе, которая должна проверить результаты операции. Процессор получает результаты и данные о статусе устройства, читая информацию из регистров контроллера.

Аппаратные драйверы могут в своей работе опираться на микропрограммные драйверы (firmware drivers), поставляемые производителем компьютера и находящиеся в постоянной памяти компьютера (в персональных компьютерах это программное обеспечение получило название BIOS — Basic Input-Output System). Микропрограммное обеспечение представляет собой самый нижний слой программного обеспечения компьютера, управляющий устройствами. Модули этого слоя выполняют функции транслирующих драйверов и конверторов, экранирующих специфические интерфейсы аппаратуры дайной компьютерной системы от операционной системы и ее драйверов.

Драйвер выполняет операцию ввода-вывода, которая представляет собой обмен с устройством заданным количеством байт по заданному адресу оперативной памяти (и адресу устройства ввода-вывода в том случае, когда оно является адресуемым). Примерами операций ввода-вывода могут служить чтение нескольких смежных секторов диска или печать на принтере нескольких строк документа. Операция задается одним системным вызовом ввода-вывода, например read или write.

Операция отрабатывается драйвером в общем случае за несколько действий. Так, при выводе документа на принтер драйвер сначала выполняет некоторые начальные действия, приводящие принтер в состояние готовности к печати, затем выводит в буфер принтера первую порцию данных и ждет сигнала прерывания, который свидетельствует об окончании контроллером принтера печати этой порции данных. После этого в буфер выводится вторая порция данных и т. д.

Так как большинство действий драйвер выполняет асинхронно по отношению к вызвавшему драйвер процессу, то драйверу запрещается изменять контекст текущего процесса (который в общем случае отличается от вызвавшего). Кроме того, драйвер не может запрашивать у ОС выделения дополнительных ресурсов или отказываться от уже имеющихся у текущего процесса — драйвер должен пользоваться теми системными ресурсами, которые выделяются непосредственно ему (а не процессу) на этапе загрузки в систему или старта очередной операции ввода-вывода. Соблюдение этих условий необходимо для корректного распределения ресурсов между процессами — каждый получает то, что запрашивал и что непосредственно ему выделила операционная система.

В подсистеме ввода-вывода каждой современной операционной системы существует стандарт на структуру драйверов. Несмотря на специфику управляемых устройств, в любом драйвере можно выделить некоторые общие части, выполняющие определенный набор действий, такие как запуск операции ввода-вывода, обработка прерывания от контроллера устройства и т. п. Рассмотрим принципы структуризации драйверов на примере операционных систем Windows NT и UNIX.

Структура драйвера Windows NT

Особенностью Windows NT является общая структура драйверов любого уровня и расширенное толкование самого понятия «драйвер». В Windows NT и аппаратный драйвер диска, и высокоуровневый драйвер файловой системы построены единообразно, поэтому другие модули ОС взаимодействуют с драйверами одним и тем же способом.

Драйвер Windows NT состоит из следующих (не обязательно всех) процедур:

  • Процедура инициализации драйвера. Эта процедура выполняется при загрузке драйвера в подсистему ввода-вывода, при этом создаются системные объекты, которые позволяют менеджеру ввода-вывода найти нужный драйвер для управления определенным устройством или выполнения некоторых высокоуровневых функций с информацией, получаемой от устройства или передаваемой на устройство.
  • Набор диспетчерских процедур. Эти процедуры составляют основу драйвера, так как именно они выполняют операции ввода-вывода, поддерживаемые данным драйвером, например чтение данных, запись данных, перемотку ленты и т. п.
  • Стартовая процедура предназначена для приведения устройства в исходное состояние перед началом очередной операции. Выполняет «открытие» (open) устройства.
  • Процедура обработки прерывания (ISR) включает наиболее важные действия, которые нужно выполнить при возникновении очередного аппаратного прерывания от контроллера устройства. Процедура обработки прерывания драйвера имеет достаточно высокий приоритет запроса прерывания IRQL (например, выше приоритета диспетчера потоков), поэтому в нее рекомендуется включать только те функции, которые требуют незамедлительной реакции, чтобы не задерживать надолго работу других модулей и процессов. По завершении работы ISR может поставить в очередь диспетчера прерываний процедуру DPC драйвера.
  • Процедура отложенных вызовов (DPC). Эта процедура также состоит из функций, которые нужно выполнить при возникновении прерывания от контроллера устройства, однако эти функции не требует такой быстрой реакции, как функции ISR. В результате процедура DPC обслуживается с более низким значением приоритета IRQL, давая возможность процедурам ISR и другим приоритетным запросам обслуживаться в первую очередь. Обычно большая часть действий драйвера по обработке прерывания включается в процедуру DPC.
  • Процедура завершения операции уведомляет менеджер ввода-вывода о том, что операция завершена и данные находятся в системной области памяти. Менеджер при этом может вызвать драйвер более высокого уровня для продолжения обработки данных или же вызывать процедуру АРС, рассмотренную в разделе «Процедуры обработки прерываний и текущий процесс» главы 4 «Процессы и потоки» для копирования данных из системной области в область памяти пользовательского процесса.
  • Процедура отмены ввода-вывода. Для разных стадий выполнения операции могут существовать разные процедуры отмены.
  • Процедура выгрузки драйвера вызывается при динамической выгрузке драйвера из подсистемы ввода-вывода. Удаляет созданные для драйвера объекты и освобождает системную память.
  • Процедура регистрации ошибок. При возникновении ошибки в процессе выполнения операции данная процедура уведомляет о ней менеджера ввода-вывода, который в свою очередь делает соответствующую запись в журнале регистрации.

Адреса всех перечисленных процедур представляют собой точки входа в драйвер, известные менеджеру ввода-вывода. Эти адреса хранятся в объекте, создаваемом для каждого драйвера Windows NT, и менеджер использует такие объекты для вызова той или иной функции драйвера. Процедура диспетчеризации используется как общая точка входа для нескольких процедур обмена данными (чтение, запись, управление и т. п.), набор которых изменяется от драйвера к драйверу и, следовательно, не может быть стандартизован.

Большое количество стандартизованных функций драйвера Windows NT обусловлено желанием разработчиков этой ОС использовать единую модель для драйверов всех типов, от сравнительно простого аппаратного драйвера СОМ-порта до весьма сложного драйвера файловой системы NTFS. В результате некоторые функции для некоторого драйвера могут оказаться невостребованными. Например, для высокоуровневых драйверов не нужна секция обработки прерываний ISR, так как прерывания от устройства обрабатывает соответствующий низкоуровневый драйвер, который затем вызывает высокоуровневый драйвер с помощью менеджера ввода-вывода, не используя механизм прерываний.

Рассмотрим особенности вызова функций аппаратного драйвера Windows NT на примере выполнения операции чтения с -диска (рис. 8.3). Диск рассматривается в этой операции как виртуальное устройство, следовательно, слой драйверов файловых систем в выполнении операции не участвует.


Пусть в некоторый момент времени выполнения в пользовательской фазе процесс А запрашивает с помощью соответствующего системного вызова чтение некоторого количества блоков диска, начиная с блока определенного номера. Процесс А при этом переходит в состояние ожидания завершения запрошенной операции, а планировщик/диспетчер Sh активизирует ожидавший выполнения процесс В.

При выполнении системного вызова управление с помощью менеджера ввода-вывода передается стартовой функции драйвера диска DD, которая проверяет, открыт ли виртуальный файл диска и готов ли контроллер диска к выполнению операции обмена данными. После возврата управления от стартовой процедуры менеджер вызывает функцию диспетчеризации драйвера, которой передается пакет запроса ввода-вывода IRP, содержащий параметры операции — начальный адрес и количество блоков диска. В результате функция диспетчеризации драйвера вызывает внутреннюю функцию чтения данных с диска, которая передает контроллеру диска запрос на чтение первой порции запрошенных данных. На рисунке работа всех перечисленных функций показана как один этап работы драйвера DD. Тот факт, что драйвер DD выполняет работу для процесса А, отмечен на рисунке нижним индексом, то есть как DDA.

После завершения чтения порции данных контроллер генерирует аппаратный запрос прерывания, который вызывает процедуру обработки прерываний драйвера диска ISR, имеющую высокий уровень IRQL. После короткого периода выполнения самых необходимых действий с регистрами контроллера (этот период для упрощения рисунка не показан) эта процедура делает запрос на выполнение менее срочной DPC-процедуры драйвера, которая должна выполнить передачу имеющейся у контроллера порции данных в системную область. Запрос на выполнение DPC-процедуры драйвера DDA некоторое время стоит в очереди уровня DPC, так как в это время в процессоре выполняются более приоритетные ISR-процедуры DSB (драйвера стриммера для процесса В) и DPF (драйвера принтера для процесса F). После завершения этих процедур начинается выполнение DPC-процедуры драйвера DDA, при этом текущим для ОС процессом является процесс В, сменивший процесс А и прерванный на время ISR-процедурами. Однако на выполнение DPC-процедуры драйвера диска это обстоятельство не оказывает никакого влияния, так как данные перемещаются в системную область, общую для всех процессов.

Кроме перемещения данных DPC-процедура драйвера выдает контроллеру диска указание о чтении второй и последней для операции порции данных (если контроллер использует режим прямого доступа к памяти и самостоятельно перемещает данные из своего буфера в системный буфер, то запуск нового действия будет единственной обязанностью DPC-процедуры). Контроллер выполняет чтение и выдает новый запрос прерывания, который снова вызывает процедуру обработки прерываний драйвера диска. Данная процедура ставит в IRQL-очереди две процедуры: DPC-процедуру, которая, как и в предыдущем цикле чтения, должна переписать данные из буфера контроллера в системный буфер, и АРС- процедуру, которая должна переписать все полученные данные из системного буфера в заданную пользовательскую область памяти процесса А.

DPC-процедура вызывается раньше, так как имеет более высокий приоритет в очереди диспетчера прерываний. АРС- процедура ждет дольше, так как она имеет более низкий приоритет и, кроме того, она обязана ждать до тех пор, пока текущим процессом не станет процесс А. DPC-процедура после выполнения своей работы фиксирует в операционной системе событие — завершение операции ввода-вывода. По наступлении события вызывается планировщик потоков, который переводит процесс А в состояние готовности (но не ставит его на выполнение, так как текущий процесс С еще не исчерпал своего кванта времени). И только после того, как планировщик снимает процесс С с выполнения и делает текущим процесс А, вызывается АРС- процедура, которая вытесняет пользовательский код процесса А, имеющий низший приоритет IRQL. АРС- процедура переписывает считанные с диска данные из системного буфера в область данных процесса А. Для доступа к системному буферу АРС- процедура должна иметь нужный уровень привилегий. После завершения работы АРС- процедуры управление возвращается пользовательскому коду приложения А, который обрабатывает запрошенные у диска данные.

Структура драйвера UNIX

В ОС UNIX вместо одной общей структуры драйвера существуют две стандартные структуры, одна — для блок-ориентированных драйверов, а другая — для байт-ориентированных. По этой причине в UNIX используются две таблицы, bdevsw и cdevsw, хранящие точки входа в функции драйверов. Каждая из таблиц имеет свою структуру, соответствующую стандартным функциям блок-ориентированных и байт-ориентированных драйверов


Итак, драйверы могут строиться по разным схемам, иметь разные принципы действия (как и любые другие преобразователи/стабилизаторы). И не все из них одинаково полезны, причем в разных ситуациях полезны они тоже по-разному. Для тех кто хочет узнать (или освежить знания) какие бывают драйверы и каковы их достоинства и написан данный текст. Ну а если вы уверены что драйверы бывают понижающие и должны непременно выдавать ток в несколько ампер — проходите мимо не читая, вы уже все знаете))

Так вот драйвер отличается от любого другого стабилизатора только лишь управлением, а именно стабилизацией тока. Силовая часть драйвера может быть линейной и импульсной, в свою очередь импульсные строятся на основе повышающих или понижающих преобразователей. Линейные же драйверы обязательно должны быть класса Low Dropout (с низким падением напряжения) — иначе нет смысла применять их. По сути же своей они являются управляемыми резисторами и головной болью их микроэлектронщиков-разработчиков.
Думаю описывать подробно принцип действия разных типов импульсных преобразователей здесь нет смысла (ведь я задумал написать эту часть кратко и в картинках), лучше вставлю картинку-напоминание с их схемами.


Три основных вида импульсных преобразователей: а — понижающий, б — повышающий и в -инвертирующий

Для жаждущих подробных знаний написаны книги (типа "Силовой электроники" Семенова) и куча статей разной степени правдивости.

Самый главный смысл этой статьи скрыт в следующей таблице — в ней сведены наиболее важные отличительные характеристики наиболее часто используемых силовых схем светодиодных драйверов применительно к низковольтным системам.


зеленым выделены явные преимущества, красным недостатки, а желтым просто то, на что стоит обращать внимание

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

Ну а для полноты картины привожу свою версию алгоритма выбора драйверов


И помните — удачный выбор идеологии уже половина дела
Правда кроме собственно выбора схемы, в частности в импульсном драйвере, необходимо еще правильное управление (регулирование), но это отдельная тема… Так что всем удачи, до новых встреч!

Читайте также: