소프트웨어로 GPIO핀을 직접 조작하여 특정 직렬통신 프로토콜을 구현하는 것을 Bit-bang (비트뱅)이라고 한다. 여러가지 이유로 전용 (회로)하드웨어 블럭을 사용할 수 없을 때 이런 방법을 사용한다.
예를 들어 CPU가 I2C 회로 블럭에 "이 데이터를 I2C로 보내" 또는 "I2C로 온 데이터를 알려줘"같은 전용 I2C 기능(회로)의 하드웨어가 하던일을 I2C(비트뱅)에서 CPU가 클럭을 제어하여 데이터를 송수신하는 것을 소프트웨어로 구현한다. 전용 회로를 사용하지 않기 때문에 소프트웨어 개발자의 수고가 필요할 수 있다.
하지만 리눅스에는 I2C bitbang 드라이버가 함께 제공된다. 또한 Python이나 C 언어로 I2C bitbang 드라이버를 사용하지 않고 직접 GPIO 조작하여 실현하는 라이브러리도 있다.
먼저 /boot/config.txt
을 편집하여 드라이버를 활성화한다. Device Tree의 오버레이 기능을 이용한다. 파일 끝에 다음 줄을 추가한다.
dtoverlay=i2c-gpio,bus=11,i2c_gpio_sda=23,i2c_gpio_scl=24
여기서 bus=
는 I2C 버스 번호, i2c_gpio_sda=
는 SDA GPIO 핀, i2c_gpio_scl=
는 SCL GPIO 핀 번호를 지정한 것이다. 버스 번호가 없으면 자동으로 번호가 지정된다. 여기에서는 I2C 버스 11, GPIO 23, 24를 지정했다.
지정한 것은 핀 헤더의 번호가 아니라 GPIO의 번호라는 것에 주의하자.
I2C, UART, SPI 등을 사용하도록 설정한 경우에는 같은 핀은 피하도록한다. 예를 들어 UART를 활성화하면 GPIO 14, GPIO15를 사용할 수 없다.
파일을 저장한 후 Raspberry Pi를 다시 시작한다.
Linux Kernel의 I2C bitbang 드라이버가 활성화되면 /dev/i2c-xx
장치 파일을 사용할 수 있다. 다음 명령으로 확인할 수 있다.
ls /dev/i2c*
/dev/i2c-1 /dev/i2c-11
여기에서는 전용 하드웨어 I2C도 활성화되어 있기 때문에 두 개의 I2C 버스를 볼 수 있다. /dev/i2c-1
하드웨어 I2C, 다른 하나는 I2C bitbang 소프트웨어 I2C다. 버스 번호 11을 지정했기 때문에 i2c-11
로 되어있다.
리눅스에서 디바이스 드라이버를 직접 구현해야하는 경우 도움이 될 수 있는 내용을 다음 링크에서 찾을 수 있다.
https://github.com/torvalds/linux/blob/master/drivers/i2c/busses/i2c-gpio.c
https://embetronicx.com/tutorials/linux/device-drivers/i2c-bus-driver-real-2/
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
12 | 임베디드 리눅스 부팅 절차 | makersweb | 2019.10.21 | 6352 |
11 | 라즈베리파이3와 PC간 Serial 통신 테스트 [1] | makersweb | 2019.05.20 | 6426 |
10 | 플랫폼 디바이스 및 드라이버에 대해서 | makersweb | 2020.02.01 | 6618 |
9 | AVRISP mkII 펌웨어 업그레이드 | makersweb | 2015.07.22 | 6950 |
8 | USB 핀아웃 | pjk | 2014.10.11 | 8452 |
7 | 이클립스에서 IAR프로젝트 사용방법 | makersweb | 2015.07.09 | 8797 |
6 | ST, STM32 MCU용 ‘통합 개발 환경(IDE)’ 무료 제공 | makersweb | 2015.03.04 | 8878 |
5 | ESP-IDF 의 A2DP리뷰 (ESP32) | makersweb | 2019.10.28 | 9574 |
4 | [Uboot 명령어 및 환경 변수 요약]U-Boot에 Command 및 Parameter에 대한 설명 | pjk | 2014.01.09 | 10512 |
3 | yocto project, 라즈베리파이를 위한 Qt + 임베디드리눅스 빌드 | makersweb | 2019.02.01 | 11083 |
2 | USB OTG 기술의 개념 | pjk | 2014.11.03 | 15370 |
1 | 윈도우10에서 Prolific USB to Serial 드라이버 인식문제 | makersweb | 2016.01.24 | 22848 |