프로그래밍/리눅스
-
리눅스 어플리케이션에서 RTC 사용하기프로그래밍/리눅스 2021. 3. 26. 15:58
제품을 만들어보면 시간이 꽤나 틀어지는 경우가 많이 있습니다. 그나마 네트워크나 GPS 등의 장치가 있으면 시간 동기화라도 할 수 있지만 단독 제품인 경우는 그럴 수가 없습니다. 그래도 시간에 민감한 제품이 아니라고 생각해서 그냥 시장에 내보냈다가 바이어나 소비자로 부터 시간이 자꾸 틀어진다는 컴플레인이 발생하지요. (하지만 요즘에는 원칩에 있는 RTC도 꽤 정확하더라구요. 모든 경우에 다그런 것은 아닙니다.) 그래서 외부 RTC를 사용해서 시간 오차가 적도록 설계하곤 하는데요. 외부 RTC가 잘 동작하는지 확인 할 수 있는 예제 코드입니다. #include #include #include #include #include #include #include #include #include int idx = ..
-
리눅스 어플리케이션에서 SPI 사용하기프로그래밍/리눅스 2021. 3. 24. 15:50
I2C에 이어서 SPI를 사용하는 방법도 설명하겠습니다. 먼저 아래 예제 코드를 보시죠. #include #include #include #include #include #include #include #include #include int bus = 0; int cs = 0; unsigned int mode = SPI_MODE_3; unsigned int bits = 8; unsigned int lsb_first = 1; unsigned int speed = 1000000; // 1MHz int main() { int fd; int rval; char path[20]; unsigned char buf[10]; struct spi_ioc_transfer xfer[1]; sprintf(path, "/dev..
-
리눅스 어플리케이션에서 I2C 사용하기프로그래밍/리눅스 2021. 3. 23. 22:05
I2C나 SPI로 통신되는 칩들은 대부분 리눅스 디바이스 드라이버로 핸들링하는게 보통이지만 테스트나 간단한 기능을 하는 칩의 경우에는 어플리케이션에서 핸들링하기도 하지요. 이번에는 리눅스 어플리케이션에서 I2C 칩을 Read/Write 하는 방법을 설명해 볼까 합니다. 아마도 대부분은 I2C 노드가 /dev 디렉터리에 i2c/0, i2c/1 ... i2c/N 이렇게 존재하거나 i2c-0, i2c-1 ... i2cN 이렇게 존재할 것입니다. 이 노드들을 open, close, ioctl, read, write와 같은 I/O 함수들로 I2C 통신을 할 수 있습니다. 읽어오기 MCU의 I2C 0번 버스에 Slave address가 A0h인 칩이 있고, Sub address가 16비트이고 데이터는 8비트로 통신..
-
리눅스 어플리케이션에서 GPIO 사용하기프로그래밍/리눅스 2013. 3. 13. 14:21
※ 이 글에 사용된 마이크로프로세서는 TI사의 Sitara AM1808을 사용하였습니다. 리눅스 개발을 처음 접했을 때 주변 기기를 제어할 줄 몰라 난감했던 기억이 있습니다. 그나마 SPI나 I2C 등을 이용하는 것은 /dev 디렉터리에 있는 노드들을 사용해서 제어하는 방법은 여기 저기 잘 정리되어 별문제 없었지만, GPIO는 따로 노드가 존재하지 않아서 간단한 조작조차 리눅스 디바이스 드라이버로 만들어서 제어했던 기억이 있습니다... 그래서 간단히(?) 리눅스 어플리케이션에서 GPIO를 사용하는 방법을 정리해 볼까 합니다. 먼저, 리눅스 커널 빌드 옵션을 설정합니다. Device Drivers ---> -*- GPIO Support [*] /sys/class/gpio/... (sysfs interfac..