지난주에 imja 보드의 gpio pin 에 대해 설명을 했었습니다.


그럼 이 gpio 를 어떻게 사용 해야 할 까요?


디바이스 드라이버가 있어야 합니다.


현재 imja 보드에서는 기본적으로 gpio 제어용 드라이버가 함께 제공 되지만 만약 em-imx6q 모듈을 구매해서


별도의 보드를 개발 했다면 그보드에 맞게 드라이버를 개발 해야 합니다.


그래서 오늘은 EM-IMX6DQ 모듈의 GPIO  제어를 위한 디바이스 드라이버 작성법을 소개 할 까 합니다.



1. GPIO 확인 하기

111.jpg

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 제어용 디바이스 드라이버에서 사용되는 형식을 살펴 봤습니다.