'Small Devices/Arduino'에 해당되는 글 16건

  1. 2014.03.30 [intel galileo] GPIO 를 제어해 보자 1 - Digital Out
반응형

Intel Galileo Board는 외부에서 보았을 때는 arduino와 같은 GPIO를 가지고 있다. Arduino IDE를 이용하면 기존에 프로그래밍 하는 방식 그대로 Arduino Shield 와 I/O 가 가능하지만 Linux에서는 조금 다르다. linux상에서 GPIO에 대한 정보는 다음과 같이 조회가 가능하다.


root@clanton:~# cat /sys/kernel/debug/gpio 

GPIOs 0-1, platform/sch_gpio.2398, sch_gpio_core:

 gpio-0   (sysfs               ) out lo

 gpio-1   (sysfs               ) out lo


GPIOs 2-7, platform/sch_gpio.2398, sch_gpio_resume:

 gpio-3   (sysfs               ) out hi

 gpio-4   (sysfs               ) out hi


GPIOs 8-15, intel_cln_gip_gpio:

 gpio-8   (SPI_CS              ) out hi

 gpio-10  (SPI_CS              ) out hi

 gpio-13  (cy8c9540a-int       ) in  hi

 gpio-14  (sysfs               ) in  hi

 gpio-15  (sysfs               ) in  hi


GPIOs 16-55, cy8c9540a, can sleep:

 gpio-16  (sysfs               ) out hi

 gpio-17  (sysfs               ) in  hi

 gpio-18  (sysfs               ) in  hi

 gpio-19  (sysfs               ) in  hi

 gpio-20  (sysfs               ) out hi

 gpio-21  (sysfs               ) out hi

 gpio-22  (sysfs               ) out hi

 gpio-23  (sysfs               ) out hi

 gpio-24  (sysfs               ) in  hi

 gpio-25  (sysfs               ) in  hi

 gpio-26  (sysfs               ) in  hi

 gpio-27  (sysfs               ) in  hi

 gpio-28  (sysfs               ) in  hi

 gpio-29  (sysfs               ) out hi

 gpio-30  (sysfs               ) out hi

 gpio-31  (sysfs               ) out hi

 gpio-32  (sysfs               ) in  hi

 gpio-36  (sysfs               ) out hi

 gpio-37  (sysfs               ) out hi

 gpio-38  (sysfs               ) in  hi

 gpio-39  (sysfs               ) out hi

 gpio-40  (sysfs               ) out lo

 gpio-41  (sysfs               ) out lo

 gpio-42  (sysfs               ) out hi

 gpio-43  (sysfs               ) out hi

 gpio-44  (sysfs               ) in  hi

 gpio-45  (sysfs               ) in  hi

 gpio-46  (sysfs               ) in  hi

 gpio-47  (sysfs               ) in  hi

 gpio-48  (sysfs               ) in  hi

 gpio-49  (sysfs               ) in  hi

 gpio-50  (sysfs               ) in  hi

 gpio-51  (sysfs               ) in  hi

 gpio-52  (sysfs               ) in  hi

 gpio-53  (sysfs               ) out hi

 gpio-54  (sysfs               ) out hi

 gpio-55  (sysfs               ) out hi

root@clanton:~# 


GPIO로 되어 있는 숫자가 arduino 의 i/o보다 많은데 이것은 다음과 같이 매핑되어 있다. CY8C9520A 는 I/O Expander IC이다.


즉 GPIO 여러개가 하나의 I/O에 관여되며 몇몇 GPIO(예를 들어 GPIO 40, GPIO41, GPIO1 )은 MUX 의 선택 PIN으로 동작하게 된다.


예를 들어 외부 포트 4번에 직접 매핑되어 있는 GPIO28을 제어하여 LED를 On/Off 해보자 GPIO28은 외부 포트 4번과 매핑되어 있으므로 다음과 같이 LED를 연결한다.


 

GPIO28 의 I/O 방향을 확인해 본다.


root@clanton:~# cat /sys/class/gpio/gpio28/direction 

in


방향이 in 이므로 out으로 바꾸어 준다.


root@clanton:~# echo -n "out" > /sys/class/gpio/gpio28/direction


I/O 의 전원 인가와 관련된 drive를 설정한다. (strong으로)


root@clanton:~# echo -n "strong" > /sys/class/gpio/gpio28/drive


I/O 를 High 상태로 변경한다.


root@clanton:~# echo -n "1" > /sys/class/gpio/gpio28/value 


High로 변경하면 LED에 불이 들어오게 되고 다음과 같이 LOW로 변경하면 불이 꺼지게 된다.


root@clanton:~# echo -n "0" > /sys/class/gpio/gpio28/value 



I/O 전원 인가는 다음의 모드가 있다.

 drive

 설명

 pullup

 pulldown

 strong low/high

 hiz

 resistive high, strong low 로 pullup 상태, 이 상태가 기본 상태

 resistive low, strong high 로 pulldown 상태

 일반적인 5v low, high 상태이다. 대부분 Digital I/O에 적합함

 High Z state

CY8C9520A 는 open drain, open source를 제공하지만 Sysfs를 통해서 제어는 불가능하다.


direction을 "in"으로 하게 되면 다음과 같이 해당 Pin의 High/Low를 알수 있다.


cat /sys/class/gpio/gpio28/value



반응형
Posted by alias
,