Bit-banging (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]
Существуют реализации простейших USB устройств[7] на GPIO выводах без применения специальных микросхем, реализующих физический уровень (PHY).
Некоторые USB-to-serial адаптеры, например FT232 позволяют работу в режиме bitbang.[8]
Некоторые контроллеры MMC/SD можно перевести в режим, в котором они выдают 4-5 высокочастотных сигнала. Например, с помощью контроллера из состава СнК Jz4720 удавалось создать VGA-сигнал[9][10].
В известном программаторе PonyProg используется режим Bit-banging для последовательного порта.[11]
Примечания
[править | править код]- ↑ Michael Predko. Programming and customizing PICmicro microcontrollers. — 2nd. — McGraw-Hill Professional, 2000. — P. 10–12. — ISBN 978-0-07-136172-9.
- ↑ Mike Szczys. Bit banging through a USB parallel port adapter Архивная копия от 30 декабря 2013 на Wayback Machine. — 2013. — February 21.
- ↑ The USB Differential | Dr Dobb’s . Дата обращения: 30 декабря 2013. Архивировано 31 декабря 2013 года.
- ↑ Ядро Linux: исходный код файла i2c-gpio.c . Дата обращения: 15 мая 2011. Архивировано из оригинала 26 июля 2013 года.
- ↑ Архивированная копия . Дата обращения: 30 декабря 2013. Архивировано 30 декабря 2013 года.
- ↑ Learn JTAG by writing a bit-banging programmer . Дата обращения: 30 декабря 2013. Архивировано 30 декабря 2013 года.
- ↑ It’s Alive: Bit-banging full-speed USB Host for the Propeller : scanlime . Дата обращения: 30 декабря 2013. Архивировано 30 декабря 2013 года.
- ↑ Архивированная копия . Дата обращения: 30 декабря 2013. Архивировано 31 декабря 2013 года.
- ↑ Universal Breakout Board - VGA . Дата обращения: 1 января 2014. Архивировано 17 апреля 2014 года.
- ↑ Mike Szczys (2011-05-10). "Bit banging VGA from an SD card slot". Архивировано 2 января 2014. Дата обращения: 1 января 2014.
- ↑ PonyProg release 3.0 comes with modern UI .
Ссылки
[править | править код]- Notes on bit-banging async serial
- Bit banging for Async Serial Communication
- BIT BANGING I2C FOR PIC PROCESSORS / David W. Hoffman. — 2005.