강좌 & 팁
지난주에 imja 보드의 gpio pin 에 대해 설명을 했었습니다.
그럼 이 gpio 를 어떻게 사용 해야 할 까요?
디바이스 드라이버가 있어야 합니다.
현재 imja 보드에서는 기본적으로 gpio 제어용 드라이버가 함께 제공 되지만 만약 em-imx6q 모듈을 구매해서
별도의 보드를 개발 했다면 그보드에 맞게 드라이버를 개발 해야 합니다.
그래서 오늘은 EM-IMX6DQ 모듈의 GPIO 제어를 위한 디바이스 드라이버 작성법을 소개 할 까 합니다.
1. GPIO 확인 하기
EM-IMXDQ 모듈은 200 핀 SODIMM 메모리 커넥터를 적용해 I/O 보드를 개발 할때 편리 하도록 했습니다.
위 그림은 SODIMM 커넥터중의 일부로 카메라, UART, I2C, SPI 등의 인터페이스를 지원 하도록 설계된 회로 입니다.
또한 위 그림의 모든 핀들은 인터페이스핀이 아닌 GPIO 핀으로도 사용이 가능하며, 그 GPIO 는 정해진 번호가 있습니다.
만약 새로 개발할 보드에 카메라인터페이스가 필요 없다면 CSI0_DAT12 핀은 GPIO 5_30 으로 설정해 사용 할 수 있습니다.
2. 핀 번호 디파인 하기
#define IMX_GPIO_NR(bank, nr) (((bank) - 1) * 32 + (nr))
#define IMJA_GPIO_A IMX_GPIO_NR(5, 30)
위 디파인문은 위에서 말한 카메라인터페이스 신호중 하나인 CSI0_DAT12 핀을
"IMJA_GPIO_A" 라는 이름으로 사용 하겠다고 명시한 부분 입니다.
GPIO 이름은 실제 GPIO 가 할 역할에 맞게 정하는 것이 편리 합니다.
예를 들어 위의 GPIO 5_30 번 GPIO 가 릴레이1 번을 제어할 목적의 GPIO 라면,
#defile GPIO_RLY_1 IMX_GPIO_NR(5, 30)
이라고 해 두면 편리 하겠지요.
3. gpio 핀의 모드 설정 하기
gpio 는 입력 또는 출력으로 동작 방식을 결정해주어야 하며, 만약 입력으로 설정된 핀을 프로그램 구동중 출력으로
사용 하고자 한다면 다시 그 동작 모드를 변경해 주면 됩니다.
gpio 핀 모드를 변경 하는 방식은
//출력으로 설정, 설정후 기본 출력 상태 low
gpio_direction_output(IMJA_GPIO_A, 0);
//입력으로 설정
gpio_direction_input(IMJA_GPIO_A);
위와 같습니다.
위에서 디파인했던 IMJA_GPIO_A 는 IMX6DQ CPU 의 GPIO 5번 그룹의 30번 핀이며,
이제 입력 또는 출력을 할 목적으로 사용 되도록 설정 되었습니다.
4. 사용 하기
이제 동작 모드가 설정된 GPIO 는 출력하거나 값을 읽어 올 수 있습니다.
#define _H_ 1
#define _L_ 0
출력 하기
gpio_set_value(IMJA_GPIO_A ,_H_); //GPIO 출력 H
읽어 오기
unsigned int gpio_val;
gpio_val = gpio_get_value(IMJA_GPIO_A );
여기까지 gpio 제어용 디바이스 드라이버에서 사용되는 형식을 살펴 봤습니다.