Bit-banging

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Bit-banging технология организации последовательного соединения с использованием программной эмуляции вместо специализированного аппаратного устройства. Программа непосредственно устанавливает состояние GPIO выводов на микроконтроллере (либо LPT на компьютере), таким образом полностью обеспечивая нужные характеристики сигнала. Обычно используется в дешевых устройствах.[1][2]

Ограничения[править | править вики-текст]

  • Скорость эмулированного устройства ограничена временем установки вывода и временем исполнения кода. Поэтому Bit-banging как правило используется для эмуляции низкоскоростных устройств или низкоскоростных версий устройств
  • Сложно гарантировать точное время выполнения кода, что может создавать проблемы при реализации протоколов, чувствительных к синхронизации
  • Программная эмуляция расходует ресурсы процессора
  • Полученный сигнал может иметь высокий джиттер, особенно если процессор выполняет другие задачи, кроме коммуникации
  • Требуется ручное согласование уровней сигналов и токов[3], без которого можно повредить GPIO выводы или второе устройство, участвующее в протоколе

Применение[править | править вики-текст]

В ядре Linux есть поддержка эмуляции I²C через GPIO [4].

С помощью техники Bit-banging можно добавить поддержку последовательного порта[5] и I2C к устройствам PIC.

Иногда также реализуются программаторы JTAG, например на устройствах Arduino.[6]

Также может применяться в FPGA.[7]

Существуют реализации простейших 10BASE-T Ethernet устройств[7] или низкоскоростного USB[3][8] на GPIO выводах без применения соответствующих микросхем, реализующих физический уровень (PHY).

Некоторые USB-to-serial адаптеры, например FT232 позволяют работу в режиме bitbang.[9]

Некоторые контроллеры MMC/SD можно перевести в режим, в котором они выдают 4-5 высокочастотных сигнала. Например, с помощью контроллера из состава СнК Jz4720 удавалось создать VGA сигнал[10][11].

Примечания[править | править вики-текст]

Ссылки[править | править вики-текст]