ВИТ зад 1. Программные интерфейсы
Скачать 26.02 Kb.
|
Программные интерфейсы Программный интерфейс (англ. programming interface) – это способ общения пользователя с программируемым устройством или прикладными программами, а также способ обмена информацией между самими программами. Он определяет функциональность и удобство такого общения посредством реализации оптимальных параметров программ. Кроме того, его целью является минимизация усилий пользователя во время подготовки исходных данных, их обработки и последующей оценки результатов. Программные интерфейсы могут предназначаться для одного или многих пользователей, а также для решения одной или многих задач. Во время их создания учитываются цветопередача, навигация, эргономика, модульный дизайн и удобство управления. Помимо этого, они должны позволять быстро и с минимальным количеством допущенных ошибок и потраченного времени решать поставленную задачу. В большинстве случаев для увеличения привлекательности среди обычных пользователей используются упрощенные варианты программных интерфейсов. Высокотехнологичные интерфейсы применяются в основном специалистами для решения сложных и узконаправленных задач. В настоящее время различают два основных вида программного интерфейса: - та, что используется при создании прикладных программ – интерфейсом программирования приложений (API); - та, что используется при создании системных компонентов и может называться интерфейсом программирования компонентов операционной системы или интерфейсом системного программирования (SPI, англ. system programming interface). Кроме того, программные интерфейсы могут быть разноуровневыми, относясь либо к уровню программного кода (API и SPI), либо к уровню кода машинного (ABI, англ. application binary interface, и SBI, англ. system binary interface). Рассмотрим два основных программных интерфейса подробнее: 1. SPI – последовательный периферийный интерфейс, служит для связи периферии и микроконтроллера. Например, в качестве периферии может быть: дисплей, различные датчики, FLASH память, SD карта и т.д. Интерфейс SPI, наряду с I2C, относится к самым широко-используемым интерфейсам для соединения микросхем. Изначально он был придуман компанией Motorola, а в настоящее время используется в продукции многих производителей. Его наименование является аббревиатурой от 'Serial Peripheral Bus', что отражает его предназначение – шина для подключения внешних устройств. Шина SPI организована по принципу «ведущий-подчиненный». В качестве ведущего шины обычно выступает микроконтроллер, но им также может быть программируемая логика, DSP-контроллер или специализированная ИС. Подключенные к ведущему шины внешние устройства образуют подчиненных шины. В их роли выступают различного рода микросхемы. Устройства SPI взаимодействуют в полнодуплексном режиме, используя архитектуру master-slave с одним ведущим устройством. Главное устройство инициирует кадр для чтения и записи. Иногда SPI называют четырехпроводной последовательной шиной, контрастирующей с трех-, двух-и однопроводными последовательными шинами. SPI может рассматриваться, как синхронный последовательный интерфейс, но он отличается от протокола синхронного последовательного интерфейса (SSI), который также является четырехпроводным синхронным последовательным протоколом связи. Протокол SSI использует дифференциальную сигнализацию и предоставляет только один симплексный канал связи. В SPI используются четыре цифровых сигнала: 1. MOSI или SI – выход ведущего, вход ведомого (англ. Master Out Slave In). Служит для передачи данных от ведущего устройства ведомому; 2. MISO или SO – вход ведущего, выход ведомого (англ. Master In Slave Out). Служит для передачи данных от ведомого устройства ведущему. 3. SCK или SCLK – последовательный тактовый сигнал (англ. Serial CLocK). Служит для передачи тактового сигнала для ведомых устройств. 4. CS или SS – выбор микросхемы, выбор ведомого (англ. Chip Select, Slave Select). Как правило, выбор микросхемы производится низким логическим уровнем. В зависимости от комбинаций полярности и фазы синхроимпульсов возможны четыре режима работы SPI. Хотя приведенные выше имена контактов являются наиболее популярными, в прошлом иногда использовались альтернативные соглашения об именовании контактов, поэтому имена контактов портов SPI для более старых продуктов IC могут отличаться от тех, которые представлены на слайде презентации. Кроме того, шина SPI может работать с одним ведущим устройством и с одним или несколькими ведомыми устройствами. Если одно ведомое устройство используется, то SS может быть зафиксирован на низком логическом уровне, если позволяет ведомое устройство. Некоторые ведомые устройства требуют понижение сигнала чипа для начала действий. Примером может служить Maxim MAX1242 ADC, который запускает преобразование при переходе high→low. С множественными ведомыми устройствами, независимый сигнал SS необходим от ведущего для каждого ведомого устройства. Большинство ведомых устройств имеют три состояния выходов, поэтому их сигнал MISO будет высокоимпедансным, когда устройство не выбрано. А) Передача данных Протокол передачи по интерфейсу SPI предельно прост и, по сути, идентичен логике работы сдвигового регистра, которая заключается в выполнении операции сдвига и, соответственно, побитного ввода и вывода данных по определенным фронтам сигнала синхронизации. Установка данных при передаче и выборка при приеме всегда выполняются по противоположным фронтам синхронизации. Это необходимо для гарантирования выборки данных после надежного их установления. Если к этому учесть, что в качестве первого фронта в цикле передачи может выступать нарастающий или падающий фронт, то всего возможно четыре варианта логики работы интерфейса SPI. Эти варианты получили название режимов SPI и описываются двумя параметрами: CPOL – исходный уровень сигнала синхронизации (если CPOL=0, то линия синхронизации до начала цикла передачи и после его окончания имеет низкий уровень (т.е. первый фронт нарастающий, а последний - падающий), иначе, если CPOL=1, - высокий (т.е. первый фронт падающий, а последний - нарастающий)); CPHA – фаза синхронизации; от этого параметра зависит, в какой последовательности выполняется установка и выборка данных (если CPHA=0, то по переднему фронту в цикле синхронизации будет выполняться выборка данных, а затем, по заднему фронту, - установка данных; если же CPHA=1, то установка данных будет выполняться по переднему фронту в цикле синхронизации, а выборка - по заднему). Ведущая и подчиненная микросхемы, работающие в различных режимах SPI, являются несовместимыми, поэтому, перед выбором подчиненных микросхем важно уточнить, какие режимы поддерживаются ведущим шины. Аппаратные модули SPI, интегрированные в микроконтроллеры, в большинстве случаев поддерживают возможность выбора любого режима SPI и, поэтому, к ним возможно подключение любых подчиненных SPI-микросхем (относится только к независимому варианту подключения). Кроме того, протокол SPI в любом из режимов легко реализуется программно. Б) Часы полярности и фазы Как показано на слайде презентации, в дополнение к установке тактовой частоты, ведущий должен также установить полярность и временной участок по отношению к данным. Временная диаграмма на рисунке, показывает полярность и фазу часов – красные линии обозначают начальные края часов, а синие-конечные. В) Топология систем связи на базе SPI В простейшем случае к ведущему устройству подключено единственное ведомое устройство и необходим двусторонний обмен данными. В таком случае используется трехпроводная схема подключения. Интерфейс SPI позволяет подключать к одному ведущему устройству несколько ведомых устройств, причем подключение может быть осуществлено несколькими способами, как показано на слайде презентации. Следует отметить, что SPI используется с разными периферийными устройствами: - Датчики: температуры, давления, АЦП, сенсорные экраны, видео игровые контроллеры - Устройства контроля: аудио кодеки, цифровые потенциометры, ЦАП. - Камера: объектив Canon EF. - Коммуникации: сеть Интернет, интерфейс USB, USB, USART, CAN, IEEE 802.15.4. - Память: Флэш и EEPROM. - Часы реального времени. - ЖК, иногда даже для управления изображения данных. - Любые ММС или CD карты (в том числе поддержка SDIO). Для высокопроизводительных систем, FPGAs иногда использует SPI интерфейс как ведомый к ведущему, а ведущий к датчикам, или для флэш-памяти, используемой для загрузки, если они основаны на SRAM. Преимуществами интерфейса SPI являются: - Полнодуплексная передача данных по умолчанию. - Более высокая пропускная способность по сравнению с I²C или SMBus. - Возможность произвольного выбора длины пакета, длина пакета не ограничена 8 битами. - Простота аппаратной реализации. - Используется только 4 вывода. - Однонаправленный характер сигналов позволяет при необходимости легко организовать гальваническую развязку между ведущим и ведомыми устройствами. - Максимальная тактовая частота ограничена только быстродействием устройств, участвующих в обмене данными. Однако интерфейс имеет и недостатки: - Необходимо больше выводов, чем для интерфейса I²C. - Ведомое устройство не может управлять потоком данных. - Нет подтверждения приема данных со стороны ведомого устройства. - Нет определенного стандартом протокола обнаружения ошибок. - Отсутствие официального стандарта. - Наличие множества вариантов реализации интерфейса. - Отсутствие поддержки горячего подключения устройств. 2. API (Application programming interface) – это программный интерфейс приложений, набор инструкций, который позволяет разным приложениям общаться между собой. API может быть: - У языка программирования, чтобы разные функции правильно взаимодействовали между собой. Каждая функция тут выступает «приложением», а API становится набором инструкций для правильного вызова этих функций. - У операционной системы, чтобы программы могли извлекать из неё данные и при необходимости изменять настройки ОС. При разработке приложения для Windows, Linux или Android нужно знать API этой системы, чтобы работать с файлами и графикой. - У веб-сервисов, чтобы другие веб-сервисы и программы могли к ним подключаться и работать совместно. Говоря по-простому, API действует как виртуальный посредник и передает информацию из одного интерфейса, например мобильного приложения, в другой. API связывает различные части программной платформы, чтобы передаваемая информация дошла до места назначения. Эти связующие узлы не только выполняют роль внутренних каналов связи, но и позволяют внешним инструментам получать доступ к этой же информации. Таким образом API-интерфейсы могут относиться к одной из двух категорий: - Внутренние/частные API; - Внешние/открытые API. Так, частные API доступны только разработчикам и пользователям из числа сотрудников организации. Такие API обычно связывают внутренние процессы для уменьшения разрозненности рабочих данных и оптимизации совместной работы. Открытые API, в свою очередь, позволяют внешним разработчикам получать доступ к информации и интегрировать информацию, которая передается из одного программного инструмента в другой. Открытые или частные API экономят время разработчиков, позволяя им объединять платформы с имеющимися инструментами и устраняя необходимость в создании нового функционала с нуля. На практике API могут использоваться для связи практически любых процессов. Вот несколько распространенных примеров использования API: - Обмен информацией о рейсах между авиакомпаниями и туристическими сайтами. - Использование Google Maps в приложении для совместных поездок (райдшеринга). - Создание виртуальных собеседников в службе обмена сообщениями. - Встраивание видеоклипов с YouTube на веб-странице. -Автоматизация рабочих процессов в программных инструментах для B2B-сектора. Следовательно, API дает возможности: - Предоставляет доступ к готовым инструментам. Например, к функциям библиотеки для машинного обучения TensorFlow – они помогают быстро создать нейросеть, не тратя время на разработку инструментов с нуля. - Повышает безопасность. API позволяет вынести в отдельное приложение функциональность, которая должна быть защищена. Так снижается вероятность некорректного использования этих функций другими программами. - Связывает разные системы. Если вам нужно подключить к сайту платёжную систему или авторизацию через соцсети, без API не обойтись. - Снижает стоимость разработки. Часто бывает, что дешевле воспользоваться платным API, чем создавать функциональность с нуля. Работа с API не так и сложна. Как вызывать функции конкретного API – описывается в документации, а принципы работы примерно одни и те же. На слайде представлен пример вызова методов библиотек в языке Python. Если API предоставляет функции через интернет (Web API), нужно отправить на сервер HTTP-запрос с данными в формате JSON. Пример синтеза речи с помощью API Yandex. SpeechKit изображён также на слайде. Можно запустить этот код и послушать результат. Также бывают косвенные вызовы API – когда вызов происходит при участии посредника (другой функции или другого API). Например, когда пользователь нажимает кнопку «Обновить», он тоже взаимодействует с API браузера, но делает это не напрямую, а через графический интерфейс. Преимущества использования API для разработчиков - Гораздо проще масштабировать сервис или приложение для работы с большими нагрузками. - С помощью API можно обмениваться данными как с внешними приложениями, так и с внутренними (плагины, расширения, комплексные модули и т.п.). - Разработку над крупным проектом можно вести параллельно несколькими командами, у каждой из которых будет своя платформа и инструменты (язык программирования, фреймворки и т.п.). - Высокая стабильность (легко перезапустить или остановить отдельные модули, остальные просто продолжат работу). - Можно чётко разграничить бизнес-логику, базы данных и интерфейсы. В качестве фронтенда можно использовать: web-страницы, мобильные или универсальные приложения, интерфейсы IoT и т.д. - API могут эволюционировать вместе с вашим продуктом. Общие недостатки API - Высокие трудовые затраты на реализацию. - Сложная архитектура сервиса/приложения. - Ключевые наборы данных для API основных модулей нужно разработать самыми первыми (ещё когда нет самих модулей). Крупные логические ошибки на этом этапе будет очень сложно исправить в будущем. - Открытые (публичные) API нужно хорошо защищать от злоумышленников. - Для небольших проектов свойственно излишнее потребление ресурсов сервера (в сравнении с тем же «монолитом»). - Слабое предложение готовых реализаций. API есть только в наиболее продвинутых/популярных CMS-системах (+во фреймворках). В любом случае, API – это инструмент для профессионалов. Таким образом, из всего вышесказанного можно сделать вывод, что программный интерфейс – это система унифицированных связей, предназначенных для обмена информацией между компонентами вычислительной системы. Программный интерфейс задает набор необходимых процедур, их параметров и способов обращения. Программный интерфейс – функциональность, которую некоторый программный компонент предоставляет другим программным компонентам. Можно различать два вида такой функциональности: та, что используется при создании прикладных программ, и та, что используется при создании системных компонентов. Первая обычно называется интерфейсом программирования приложений, вторая может называться интерфейсом программирования компонентов операционной системы или интерфейсом системного программирования. Кроме того, программные интерфейсы могут быть разно уровневыми, относясь либо к уровню программного кода, либо к уровню кода машинного. |