소프트웨어로 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/
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
13 | POSIX를 지원하는 오픈소스 RTOS, RTEMS | makersweb | 2020.04.15 | 2633 |
12 | 라즈베리파이2에서 RTOS기반 GPIO제어(LED) | makersweb | 2020.04.21 | 2498 |
11 | Raspberry Pi 의 프레임버퍼(Framebuffer)구성 | makersweb | 2020.05.15 | 2752 |
10 | Android 기기를 사용하여 Raspberry Pi SD 카드 작성 방법 | makersweb | 2020.08.01 | 1802 |
9 | 플랫폼 디바이스 및 디바이스 트리 | makersweb | 2021.03.20 | 4925 |
8 | ATtiny85 개발보드(HW-260) | makersweb | 2023.01.02 | 1346 |
7 | 임베디드 개발자를 위한 Hex,Bin,Dec 변환기 유틸 | makersweb | 2023.02.27 | 1849 |
6 | 로직분석기와 함께 PulseView 를 사용해서 CAN 신호 캡쳐 | makersweb | 2023.03.16 | 1481 |
5 | Raspberry Pi 와 ATtiny85 간 I²C 통신 | makersweb | 2023.03.18 | 1310 |
4 | Yocto 프로젝트 3.4 릴리스(honister) 이상 버전으로 마이그레이션 시 참고 사항 | makersweb | 2023.03.21 | 1913 |
» | Raspberry Pi에서 I²C 그리고 Bit-bang (비트뱅) | makersweb | 2023.08.27 | 1576 |
2 | Rockchip VOP | makersweb | 2024.04.22 | 968 |
1 | OpenAMP 간단한 소개 | makersweb | 2024.09.21 | 598 |