RaspberryPi U-Boot & GPIO 제어 1 제 12 강 U-Boot + GPIO 제어 부트로더 U-Boot 부트로더 raw GPIO 제어 (LED, BTN) LED, BTN 제어

Similar documents
PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft Word ARM_ver2_0a.docx

Raspbian 설치 라즈비안 OS (Raspbian OS) 라즈베리파이 3 Model B USB 마우스 USB 키보드 마이크로 SD 카드 마이크로 SD 카드리더기 HDM I 케이블모니터

PowerPoint 프레젠테이션

Mango220 Android How to compile and Transfer image to Target

KEY 디바이스 드라이버

PowerPoint 프레젠테이션

Microsoft PowerPoint - 03-Development-Environment-2.ppt

PowerPoint 프레젠테이션

Chap 5 루트파일시스템 (Root F/S)

벤처연구사업(전동휠체어) 평가

지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함. 한번은 intel CPU를위한 gcc로, 한번은 ARM CPU를위한 gcc로. AR

고급 프로그래밍 설계

망고100 보드로 놀아보자-4

Microsoft PowerPoint - lab14.pptx

로봇SW교육원 강의자료

RaspberryPi 개발환경구축 I 1 제 01 강 실습일정및가상머신구축 교과소개및실습일정 실습실안전교육 가상머신환경구축 (VMware Player, VM(Ubuntu), VMTools, 폴더공유 ) 참고 )

Microsoft Word doc

PowerPoint 프레젠테이션

소프트웨어설치 1. 소프트웨어설치및제거 ( 소스코드 ) 소스코드컴파일을이용한 S/W 설치 1. 소스코드다운로드 - 예 ) httpd tar.gz - 압축해제 : #tar xzvf httpd tar.gz - INSTALL 또는 README파일참조

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

슬라이드 제목 없음

USB 케이블만을이용한리눅스 NFS 개발환경 (VirtualBox) 최초작성 : 2010 년 10 월 21 일 작성자 : 김정현 수정내용 최초작성 by 김정현 스크립트추가, 설명보충 by 유형목 1. VritualBox

Code Generation in Rapid


RaspberryPi 시리얼통신 1 제 08 강 시리얼통신제어 시리얼통신시리얼모니터링루프백시리얼통신 Win. PC와의시리얼통신가상머신과의시리얼통신아두이노보드와의시리얼통신 KUT51보드와의시리얼통신

PowerPoint 프레젠테이션

1. 안드로이드개발환경설정 안드로이드개발을위해선툴체인을비롯한다양한소프트웨어패키지가필요합니다 툴체인 (Cross-Compiler) 설치 안드로이드 2.2 프로요부터는소스에기본툴체인이 prebuilt 라는이름으로포함되어있지만, 리눅스 나부트로더 (U-boot)

Tizen

단계

K&R2 Reference Manual 번역본

vi 사용법

슬라이드 1

/chroot/lib/ /chroot/etc/

Mango24R2 Auto Write

Microsoft PowerPoint - 02_Linux_Fedora_Core_8_Vmware_Installation [호환 모드]

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

The Pocket Guide to TCP/IP Sockets: C Version

Chap 2 임베디드시스템 개발환경구성

Microsoft PowerPoint - es-arduino-lecture-03

LXR 설치 및 사용법.doc

untitled

라즈베리파이 프로그래밍_130912(최종).indd

Report Designer V3.0 사용설명서 2장

작성자 : 기술지원부 김 삼 수

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Mango-AM335x LCD Type 커널 Module Parameter에서 변경하기

PowerPoint 프레젠테이션

BMP 파일 처리

강의10

본문서는 초급자들을 대상으로 최대한 쉽게 작성하였습니다. 본문서에서는 설치방법만 기술했으며 자세한 설정방법은 검색을 통하시기 바랍니다. 1. 설치개요 워드프레스는 블로그 형태의 홈페이지를 빠르게 만들수 있게 해 주는 프로그램입니다. 다양한 기능을 하는 플러그인과 디자인

PowerPoint 프레젠테이션

DE1-SoC Board

Copyright 2004 Sun Microsystems, Inc Network Circle, Santa Clara, CA U.S.A..,,. Sun. Sun. Berkeley BSD. UNIX X/Open Company, Ltd.. Sun, Su

Microsoft PowerPoint APUE(Intro).ppt

교육지원 IT시스템 선진화

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

PowerPoint 프레젠테이션

Chap 3 부트로더 (Bootloader)

Snort Install Manual Ad2m VMware libnet tar.gz DebianOS libpcap tar.gz Putty snort tar.gz WinSCP snort rules 1. 첫번째로네트워크설정 1) ifconf

Microsoft PowerPoint - [2009] 02.pptx

임베디드시스템설계강의자료 4 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

[ 컴퓨터시스템 ] 3 주차 1 차시. 디렉토리사이의이동 3 주차 1 차시디렉토리사이의이동 학습목표 1. pwd 명령을사용하여현재디렉토리를확인할수있다. 2. cd 명령을사용하여다른디렉토리로이동할수있다. 3. ls 명령을사용하여디렉토리내의파일목록을옵션에따라다양하게확인할수

Microsoft PowerPoint - TUNA_Board_Tutorial.pptx

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

Sena Technologies, Inc. HelloDevice Super 1.1.0

작성자 : saint Overview BackTrack 는 LILO 를부트로더로사용한다. BactTrack 을기본환경설정그대로설치하면부팅할수없는경우가있는데, 이것은실린더크기가 1024 보다큰하드디스크에설치하면 LILO 가 OS 를정상적으로읽어올수없기때문이다. 요즘나오는

PowerPoint 프레젠테이션

1. efolder 시스템구성 A. DB B. apache - mod-perl - PHP C. SphinxSearch ( 검색서비스 ) D. File Storage 2. efolder 설치순서 A. DB (MySQL) B. efolder Service - efolder

벤처연구사업(전동휠체어) 평가

Report Designer V3.0 사용설명서 2장

<3032B0AD202D20B8AEB4AABDBA20BCB3C4A12D556E6978C0CEC5CDB3DDBAB8C3E6C7D0BDC02E687770>

Microsoft PowerPoint - 02_Installation

PowerPoint 프레젠테이션

망고 M 카메라 포팅 가이드

MySQL-Ch10

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

임베디드 OS 실습 환경 설정 절차(Windows XP Professional)

API 매뉴얼

PowerPoint 프레젠테이션

본 강의에 들어가기 전

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

본교재는수업용으로제작된게시물입니다. 영리목적으로사용할경우저작권법제 30 조항에의거법적처벌을받을수있습니다. [ 실습 ] 스위치장비초기화 1. NVRAM 에저장되어있는 'startup-config' 파일이있다면, 삭제를실시한다. SWx>enable SWx#erase sta

28 THE ASIAN JOURNAL OF TEX [2] ko.tex [5]

무시하고진행합니다. $ sudo rootstock -d precise --seed ubuntu-standard -x en_us.utf-8 -f ubuntu -l ubuntu -p ubuntu -i 2G I: Running on a x86_64 machine I: Cre

쉽게 풀어쓴 C 프로그래밍

RaspberryPi 개발환경구축 III 1 제 03 강 개발환경구축 III Tool Chain( 크로스컴파일러 ) 설치크로스컴파일및호스트컴파일 NFS 서비스리눅스명령어참고 ) 한글사용환경구축

6주차.key

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Chapter. 5 Embedded System I Bootloader, Kernel, Ramdisk Professor. Jaeheung, Lee

RaspberryPi 개발환경구축 II 1 제 03 강 개발환경구축 II 가상머신환경구축 (VMware Player, VM(Ubuntu), VMTools, 폴더공유 ) 필수패키지설치 Tool Chain( 크로스컴파일러 ) 설치크로스컴파일및호스트컴파일 NFS 서비스한글사

ABC 11장

Transcription:

RaspberryPi U-Boot & GPIO 제어 1 제 12 강 U-Boot + GPIO 제어 부트로더 U-Boot 부트로더 raw GPIO 제어 (LED, BTN) LED, BTN 제어

RaspberryPi U-Boot & GPIO 제어 2 부트로더 * boot loader : 시스템초기화후 OS로부팅 : 부트로더의기능 -시스템초기화 -시스템동작에필요한환경설정 -운영체제부팅 -메모리관리 -시스템모니터링등 * boot loader 종류 : LILO, GRUB, Loadlin, EtherBoot, Blob, PMON, RedBoot, U-Boot 등

부트로더 ( 계속 ) * ARM 의부트로더동작흐름도 RaspberryPi U-Boot & GPIO 제어 3

RaspberryPi U-Boot & GPIO 제어 4 부트로더 ( 계속 ) * 부트로더동작순서 1) 1st stage bootloader(rom에위치 ) : 제조과정에서 SoC에프로그래밍 ( 사용자에의해재프로그래밍불가 ) : SD카드의 FAT32 부트파티션마운트후, 2 nd 부트로더실행 2) 2nd stage bootloader (bootcode.bin) : fixedup.dat 참조하여 SDRAM 파티션및활성화 : 3rd 부트로더 (start.elf) 를 SDRAM에적재후실행 3) 3rd stage bootloader (start.elf) : User code를메모리에적재하고실행 *) User code( 리눅스커널, U-boot, 응용프로그램등 ) : 이진형태의파일 : 통상 kernel.img라명명된커널이미지및부가파일들 : 또다른부트로더 ( 예, U-boot), 혹은응용프로그램일수있음

RaspberryPi U-Boot & GPIO 제어 5 부트로더 ( 계속 ) * /boot 디렉터리의주요파일 pi@raspberrypi:/boot $ ls -al -rwxr-xr-x 1 root root 26108 Jul 10 09:15 bcm2710-rpi-3-b-plus.dtb -rwxr-xr-x 1 root root 52296 Jul 10 09:15 bootcode.bin -rwxr-xr-x 1 root root 142 Jan 21 2019 cmdline.txt -rwxr-xr-x 1 root root 1727 Jul 27 02:03 config.txt -rwxr-xr-x 1 root root 6701 Jul 10 09:15 fixup.dat -rwxr-xr-x 1 root root 5000184 Jul 10 09:15 kernel.img -rwxr-xr-x 1 root root 5281136 Jul 10 09:15 kernel7.img drwxr-xr-x 2 root root 14336 Jul 10 09:15 overlays -rwxr-xr-x 1 root root 2873444 Jul 10 09:14 start.elf

U-Boot 부트로더 ( 계속 ) * U-Boot 로부팅할때조치 RaspberryPi U-Boot & GPIO 제어 6 1) 소스컴파일후생성된 u-boot.bin을 /boot 디렉터리에위치 2) u-boot.bin가실행되도록 /boot/config.txt 편집 * 가상머신에로그인후슈퍼유저로전환 ifc413@ubuntu:~$ sudo su root@ubuntu:/home/ifc413# cd root@ubuntu:~#

U-Boot 부트로더 ( 계속 ) * U-Boot 소스다운로드 ( 방법 1) : git 툴을활용하여다운로드 RaspberryPi U-Boot & GPIO 제어 7 # apt-get update # apt-get upgrade # apt-get install git // git 패키지설치 # git clone git://git.denx.de/u-boot.git // 현작업디렉터리에./u-boot로다운로드됨 # ls./u-boot

U-Boot 부트로더 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 8 * CD 의 /u-boot/u-boot.tar.gz 활용 ( 방법 2) : SAMBA 서비스로공유하는경우 # ls /mnt/hgfs/shared/ # cp /mnt/hgfs/shared/achro-em/u-boot.tar.gz./ # tar xvf u-boot.tar.gz // 풀기 # ls./u-boot

U-Boot 부트로더 ( 계속 ) * 소스구성 : root@ubuntu:~# cd u-boot root@ubuntu:~/u-boot# ls RaspberryPi U-Boot & GPIO 제어 9./configs : 타깃보드용의환경설정파일들위치./arch : 특정아키텍쳐관련소스./examples : 테스트용예제

U-Boot 부트로더 ( 계속 ) * U-Boot 환경설정파일 RaspberryPi U-Boot & GPIO 제어 10 :./configs에타깃보드용환경설정파일들위치 : 라즈베리파이 3B+ 보드용은 rpi_3_32b_defconfig root@ubuntu:~/u-boot# ls./configs/rpi*

U-Boot 부트로더 ( 계속 ) * 라즈베리파이용 U-Boot 환경설정 : U-Boot 홈디렉터리에서 RaspberryPi U-Boot & GPIO 제어 11 # make rpi_3_32b_defconfig // 오류발생참고 ) 오류발생시조치 => bison, flex 패키지설치 # apt install bison # apt install flex # make rpi_3_32b_defconfig // 오류없음 : U-Boot의환경설정내용이.config 히든파일로저장

U-Boot 부트로더 ( 계속 ) * U-Boot 컴파일 # make -j4 : -j4 옵션은코어의개수지정 # ls RaspberryPi U-Boot & GPIO 제어 12 => u-boot.bin 이 U-Boot 의이진파일임 타깃보드의 /boot 디렉터리로복사

U-Boot 부트로더 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 13 * 부트로더포팅 ( 방법 1.. NFS 서비스를통해 ) : NFS 서버측 # cp u-boot.bin /nfs // NFS 서비스디렉터리로복사 # ls /nfs h_hello t_hello u-boot.bin

U-Boot 부트로더 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 14 * 부트로더포팅 ( 방법 1.. NFS 서비스를통해 ) : NFS 클라이언트 ( 라즈베리파이보드 ) 측 -putty 접속하여로그인후 pi@raspberrypi:~ $ sudo su // 슈퍼유저로전환 root@raspberrypi:/home/pi# cd root@raspberrypi:~# ls - 타깃보드의 /boot 파티션으로복사 # mount -t nfs 192.168.0.20:/nfs /share # ls /share h_hello t_hello u-boot.bin # cd /boot # cp /share/u-boot.bin /boot # ls *.bin bootcode.bin u-boot.bin

U-Boot 부트로더 ( 계속 ) * 부트로더포팅 RaspberryPi U-Boot & GPIO 제어 15 : 방법2) SD 카드에관련파일기록 ( 미실습 ) : SD카드를 USB통해연결후, boot 파티션이름확인 # lsblk // boot 파티션 sdb1 주목 ( SD 카드 )!! # mkdir /mnt # mount /dev/sdb1 /mnt // 마운트 # cp u-boot.bin /mnt // 부트로더복사 # nano /mnt/config.txt // 환경파일편집 kernel = u-boot.bin # sync # umount /mnt // 마운트해제 : SD 카드를라즈베리파이보드에장착후부팅

U-Boot 부트로더 ( 계속 ) * /boot 에 u-boot.bin 확인 RaspberryPi U-Boot & GPIO 제어 16 : 어떤방법으로든 /boot 디렉터리에위치해야함 # ls *.bin bootcode.bin u-boot.bin * config.txt 파일편집 : 커널이미지파일대신 U-Boot 이진파일을실행하도록설정 # nano config.txt... # B-boot loader kernel=u-boot.bin # reboot // 재부팅

U-Boot 부트로더 ( 계속 ) * u-boot 통한커널부트 RaspberryPi U-Boot & GPIO 제어 17 : 실습을위해 SBC 구축을권고함 ( 모니터, 키보드연결 ) : 전원인가후즉시키누를것!!! : 다음의부트로더프롬프트가나타남 U-Boot> : 부트로더의내부명령활용

U-Boot 부트로더 ( 계속 ) * U-Boot 내부명령 help.. 내부명령에대한도움말 RaspberryPi U-Boot & GPIO 제어 18 printenv... 환경변수의설정내역출력 setenv... 환경변수에값설정 setenv ipaddr 211.188.17.38 ( ip address 설정 ) setenv serverip 211.188.17.39 ( server address 설정 ) saveenv... 환경변수설정내역저장 ( uboot.env 파일로 FAT 에 ) ${kernel_addr_r}... 내부명령에서환경변수인용시사용형식 gpio... GPIO 제어명령 md... 메모리내용출력 (memory dump) tftpboot... TFTP 클라이언트명령 go.. 메모리내응용프로그램실행 기타등등...

U-Boot 부트로더 ( 계속 ) * TFTP 서버구축 ( 가상머신에 ) RaspberryPi U-Boot & GPIO 제어 19 # apt-get install tftpd-hpa tftp-hpa // 패키지설치 # gedit /etc/default/tftp-hpa // 환경설정파일생성 # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/tftpboot" // 서비스디렉터리유의 TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure # mkdir /tftpboot // 서비스디렉터리생성 # chown nobody /tftpboot # chmod -R 777 /tftpboot # servcie tftpd-hpa restart // 서비스재개

U-Boot 부트로더 ( 계속 ) * TFTP 서버구동확인 : 서비스여부파악명령 # servcie tftpd-hpa status RaspberryPi U-Boot & GPIO 제어 20 : 혹은, 서비스디렉터리에임의파일 (test.txt) 위치시키고다운로드테스트 # tftp localhost > get test.txt > quit # ls test.txt

U-Boot 부트로더 ( 계속 ) * U-Boot 에서 TFTP 서비스받기 : 양측의 IP 주소설정후, : tftpboot 명령사용 RaspberryPi U-Boot & GPIO 제어 21 U-boot> setenv ipaddr 192.168.0.40 // 개발보드의 IP 주소설정 U-boot> setenv serverip 192.168.0.20 // 서버 ( 가상머신 ) 의 IP 주소설정 U-boot> tftpboot 0x0C100000 hello_world.bin

U-Boot 부트로더 ( 계속 ) * 원상복구방법 RaspberryPi U-Boot & GPIO 제어 22 : /boot/config.txt 편집하여관련부분제거 : kernel=u-boot.bin을삭제혹은주석처리, 저장후재부팅 : Windows 환경의경우 -SD 카드내의 config.txt 파일의끝에있는 kernel=u-boot.bin 부분을삭제혹은주석처리후저장하여사용

U-Boot 부트로더 ( 계속 ) [ 실습 1] B-Boot 에서 GPIO 핀제어 RaspberryPi U-Boot & GPIO 제어 23 : LED 회로를 BCM-GPIO #18에연결 : SBC 구축상태를권고함 U-Boot> help // 내부명령목록 U-Boot> gpio // gpio 제어명령 gpio <input set clear toggle> <pin> U-Boot> gpio set 18 // LED ON U-Boot> gpio clear 18 // LED OFF U-Boot> gpio toggle 18 // LED toggle

U-Boot 부트로더 ( 계속 ) [ 실습 2] hello_world.bin 실행 : 다음의파일참조 RaspberryPi U-Boot & GPIO 제어 24./arch/arm/armconfig.mk // standalone 응용의적재될메모리주소확인./examples/standalone/Makefile./examples/standalone/hello_world.c : 위소스는이미컴파일됨 : hello_world.bin을 TFTP 서비스디렉터리로이동후, B-boot> tftpboot 0x0C100000 hello_world.bin B-boot> md 0x0C100000 B-boot> go 0x0C100000

RaspberryPi U-Boot & GPIO 제어 25 $ cat./arch/arm/config.mk # SPDX-License-Identifier: GPL-2.0+ # # (C) Copyright 2000-2002 # Wolfgang Denk, DENX Software Engineering, wd@denx.de. ifndef CONFIG_STANDALONE_LOAD_ADDR ifneq ($(CONFIG_ARCH_OMAP2PLUS),) CONFIG_STANDALONE_LOAD_ADDR = 0x80300000 else CONFIG_STANDALONE_LOAD_ADDR = 0x0c100000 #*) endif endif... $ cat./examples/standalone/makefile # SPDX-License-Identifier: GPL-2.0+ # # (C) Copyright 2000-2006 # Wolfgang Denk, DENX Software Engineering, wd@denx.de. extra-y := hello_world extra-$(config_smc91111)... += smc91111_eeprom

RaspberryPi U-Boot & GPIO 제어 26 $ cat./examples/standalone/hello_world.c // SPDX-License-Identifier: GPL-2.0+ /* * (C) Copyright 2000 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. */ #include <common.h> #include <exports.h> int hello_world (int argc, char * const argv[]) { int i; // main() 아님 /* Print the ABI version */ app_startup(argv); printf ("Example expects ABI version %d\n", XF_VERSION); printf ("Actual U-Boot ABI version %d\n", (int)get_version()); printf ("Hello World\n");...

rawgpio 제어 RaspberryPi U-Boot & GPIO 제어 27 * GPIO(General purpose input output) : 입력이나출력을포함한동작이사용자에의해제어되는디지털신호핀 : 하나의입출력핀에여러기능부여로복잡한구조 : 기본적으로입력과출력이가능하며, 하나의핀은 GPIO로혹은다른기능으로도사용가능 : 타깃보드에서총 54 개의 GPIO 핀제공

rawgpio 제어 ( 계속 ) * BCM2835 의메모리맵 RaspberryPi U-Boot & GPIO 제어 28 : BCM2837 의 IO Peripherals Base 주소... 0x3F00_0000

rawgpio 제어 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 29 * GPIO 핀블록도및관련레지스터

rawgpio 제어 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 30 * GPIO 관련레지스터들의베이스주소 : IO Peripherals Base(0x3F00_0000) + 0x0020_0000 : 즉, 0x3F20_0000

rawgpio 제어 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 31 * GPIO 관련레지스터 ( 대략 13 종 ) : 주요레지스터의물리주소및기능 PhysicalAddr Field Name Description Size Read/Write 0x3F20_0000 GPFSEL0 GPIO Function Select 0 32 R/W 0x3F20_0004 GPFSEL1 GPIO Function Select 1 32 R/W 0x3F20_0008 GPFSEL2 GPIO Function Select 2 32 R/W 0x3F20_000C GPFSEL3 GPIO Function Select 3 32 R/W 0x3F20_0010 GPFSEL4 GPIO Function Select 4 32 R/W 0x3F20_0014 GPFSEL5 GPIO Function Select 5 32 R/W 0x3F20_0018 - Reserved - - 0x3F20_001C GPSET0 GPIO Pin Output Set 0 32 W 0x3F20_0020 0x3F20_0024 GPSET1 GPIO Pin Output Set 1 32 W - Reserved - - 0x3F20_0028 GPCLR0 GPIO Pin Output Clear 0 32 W 0x3F20_002C GPCLR1 GPIO Pin Output Clear 1 32 W 0x3F20_0030 0x3F20_0034 - Reserved - - GPLEV0 GPIO Pin Level 0 32 R 0x3F20_0038 GPLEV1 GPIO Pin Level 1 32 R 0x3F20_003C... - Reserved - -

rawgpio 제어 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 32 * GPFSELn(GPIO Function Select Registers) : GPIO 핀의입력용 / 출력용, 다른기능설정입력용 000, 출력용 001, 다른기능 ( 데이터시트참조 ) : 각핀당 3비트씩소요, 각레지스터의상위2비트비사용 : 1개레지스터에 LSB부터할당하여 10개 GPIO핀설정 : 예 ) BCM_GPIO #18 출력용, BCM_GPIO #1 입력용 GPIO_9 GPIO_8... GPIO_2 GPIO_1 GPIO_0 31 30 29 28 27 26 25 24 8 7 6 5 4 3 2 1 0 GPFSEL0 - - 0 0 0 GPFSEL1 - - 0 0 1 GPFSEL2 - - GPFSEL3 - - GPFSEL4 - - GPFSEL5 - - - - - - - -

rawgpio 제어 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 33 * GPSETn(GPIO Pin Output Set Registers) : GPIO 핀에 High 신호를출력할때사용 : 핀번호위치에 1을설정하면, High 신호출력 : 예 ) BCM_GPIO #23 에 High 출력 31 30 29 28 27 26 25 24 23 22 21... 5 4 3 2 1 0 GPSET0 1 GPSET1 - - - - - - - - - -

rawgpio 제어 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 34 * GPCLRn(GPIO Pin Output Clear Registers) : GPIO 핀에 Low 신호를출력할때사용 : 핀번호위치에 1을설정하며, Low 신호출력 : 예 ) BCM_GPIO #23 에 Low 출력 31 30 29 28 27 26 25 24 23 22 21... 5 4 3 2 1 0 GPCLR0 1 GPCLR1 - - - - - - - - - -

rawgpio 제어 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 35 * GPLEVn(GPIO Pin Level Registers) : GPIO 핀에인가된신호를반영하는레지스터 : 입력장치의신호를입력받을때사용 : 예 ) BCM_GPIO #23 의신호 31 30 29 28 27 26 25 24 23 22 21... 5 4 3 2 1 0 GPCLR0 x GPCLR1 - - - - - - - - - -

rawgpio 제어 ( 계속 ) * GPIO 핀관련물리주소 RaspberryPi U-Boot & GPIO 제어 36 : 출력용디바이스 ( 예, LED.. BCM_GPIO#18) : 입력용디바이스 ( 예, BTN.. BCM_GPIO#17) #define GPIO_BASE 0x3F200000 // for BCM2836, BCM2837 // address offset of registers for GPIO #define GPFSEL1 0x04 #define GPSET0 0x1C #define GPCLR0 0x28 #define GPLEV0 0x34 char * gpio; gpio = (char *)GPIO_BASE; // 물리주소

rawgpio 제어 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 37 * 출력용디바이스 ( 예, LED.. BCM_GPIO#18) : 출력용 (001)...GPFSEL1 레지스터 // 19 18 11 10 // GPFSEL1 = 0bxx xxx 001 xxx xxx xxx xxx xxx xxx xxx xxx; gpio[gpfsel1 / 4] &= ~(6 << 24); // #18, output, ~(001)=110(6) : High 출력할때... GPSERT0 레지스터 // 29 20 19 10 9 0 // GPSET0 = 0b00 0000000000 0100000000 0000000000; gpio[gpset0 / 4] = (1 << 18); // LED ON : Low 출력할때... GPCLR0 레지스터 // 29 20 19 10 9 0 // GPCLR0 = 0b00 0000000000 0100000000 0000000000; gpio[gpclr0 / 4] = (1 << 18); // LED OFF

rawgpio 제어 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 38 * 입력용디바이스 ( 예, BTN.. BCM_GPIO#17) : 입력용 (000)...GPFSEL1 레지스터 // 19 18 17 11 10 // GPFSEL1 = 0bxx xxx xxx 000 xxx xxx xxx xxx xxx xxx xxx xxx; gpio[gpfsel1 / 4] &= ~(7 << 21); // #17, input, ~(000)=111(7) : 신호읽기... GPLEV0 레지스터 // 29 20 19 10 9 0 // GPLEV0 = 0bXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX; // AND 0b00 0000000000 0010000000 0000000000; ret = (gpio[gplev0 /4] & (1 << 17)) >> 17; // press? // ret는 0, 혹은 1 : 기타레지스터가사용될수있음

rawgpio 제어 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 39 [ 실습 3] LED 제어 ( 부트로더실행방식 ) : LED를 ON/OFF하기를반복하는 standalone app. : GPIO 핀의물리주소로접근하여제어 $ cd./examples/standalone $ nano Makefile... extra-y... := bootledgpio_01 // 작성할파일명으로 $ nano bootledgpio_01.c //======================================= // bootledgpio_01.c // BCM_GPIO #18, LED // to execute like U-boot bootloader //======================================= #include <common.h> // U-boot

RaspberryPi U-Boot & GPIO 제어 40 #include <exports.h> // U-boot #define GPIO_BASE 0x3F200000 // for BCM2836, BCM2837 // address offset of registers for BCM_GPIO #18 #define GPFSEL1 0x04 #define GPSET0 0x1C #define GPCLR0 0x28 int bootledgpio_01(void) { char * gpio_mmap; volatile unsigned int * gpio; printf("[rawgpio testing...led like U-boot]\n"); gpio_mmap = (char *)GPIO_BASE; // 물리주소 gpio = (volatile unsigned int *)gpio_mmap; // 19 18 11 10 // GPFSEL1 = 0bxx xxx 001 xxx xxx xxx xxx xxx xxx xxx xxx; gpio[gpfsel1 / 4] &= ~(6 << 24); // #18, output, ~(001)=110(6) while(1) { // 29 20 19 10 9 0 // GPSET0 = 0b00 0000000000 0100000000 0000000000; gpio[gpset0 / 4] = (1 << 18); // LED ON printf("led ON...\n");

RaspberryPi U-Boot & GPIO 제어 41 mdelay(100); } // 29 20 19 10 9 0 // GPCLR0 = 0b00 0000000000 0100000000 0000000000; gpio[gpclr0 / 4] = (1 << 18); // LED OFF printf("led OFF...\n"); mdelay(100); } return 0; * 컴파일 $ cd../../ $ sudo make clean $ sudo make j4 $ ls

RaspberryPi U-Boot & GPIO 제어 42 * TFTP 서비스디렉터리로 bootledgpio_01..bin 파일복사후, B-boot> tftpboot 0x0C100000 bootledgpio_01.bin B-boot> go 0x0C100000 ==> 운영체제없이부트로더가실행되는방식으로 GPIO 핀에연결된디바이스를 물리주소를이용하여제어가능!!!!

rawgpio 제어 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 43 [ 실습 4] 커널이미지로부팅... 추후시도할것 : TFTP 서비스디렉터리에관련파일위치후, U-boot> setenv ipaddr 192.168.0.40 U-boot> setenv serverip 192.168.0.20 U-boot> tftpboot ${kernel_addr_r} kernel7.img U-boot> tftpboot ${fdt_addr_r} bcm2710-rpi-3-b-plus.dtb U-boot> bootz ${kernel_addr_r} - {fdt_addr_r}

rawgpio 제어 ( 계속 ) RaspberryPi U-Boot & GPIO 제어 44 [ 실습 5] LED 제어용부트로더... 추후, 천천히 : LED 제어전용부트로더형태로구현

응용과제 [ 응용 1] GPIO LED 및 BTN 제어 : U-Boot 부트로더실행방식으로 : LED와 BTN 회로활용 : 수행동작은각자정의할것 RaspberryPi U-Boot & GPIO 제어 45