원본 문서는 아래 링크 참조 바랍니다.
COMPUTE MODULE ATTACHING & ENABLEING PERIPHERALS GUIDE
개요
This guide is designed to help developers using the Compute Module get to grips with how to wire up peripherals to the Compute Module pins, and how to make changes to the software to enable these peripherals to work correctly.
이 가이드는 컴퓨팅 모듈을 사용하는 개발자가 컴퓨팅 모듈핀에 주변 기기를 연결하는 방법과 제대로 동작하려면 이러한 주변 장치를 사용할 수 있도록 소프트웨어를 변경하는 방법을 이해할 수 있도록 설계되었습니다.
The Compute Module contains the Raspberry Pi BCM2835 System On Chip (SoC) or "processor", memory and eMMC (eMMC is basically like an SD card but soldered onto the board, eMMC (unlike SD cards) is specifically designed to be used as a disk and has extra features that make it more reliable in this use case). Most of the pins of the SoC (GPIO, 2 CSI camera interfaces, 2 DSI display interfaces, HDMI etc.) are freely available and can be wired up as the user sees fit (or if unused can usually be left unconnected). The Compute Module is a DDR2 SODIMM form factor compatible module, so any DDR2 SODIMM socket should be able to be used (note the pinout is NOT the same as an actual SODIMM memory module).
이 컴퓨터 모듈은 라즈베리파이 BCM2835 시스템 온 칩(SoC) 또는 “ 프로세서”와 메모리, eMMC로 구성되어 있습니다.(eMMC는 기본적으로 SD카드와 동일하지만 보드에 납땜이 되어있으며, eMMC는 SD 카드와는 다르게 특별하게 Disk로 사용될 수 있으며 여기서는 더 신뢰할 수 있도록 추가 기능을 갖도록 설계되어있습니다.) SoC 대부분의 핀들은(GPIO,2 CSI 카메라 인터페이스, 2 DSI 디스플레이 인터페이스, HDMI etc) 자유롭게 사용할 수 있으며, 사용자가 적절하게 연결하여 사용할 수 있습니다.(사용하지 않을 경우 연결하지 않아도 됩니다.) 컴퓨터 모듈은 DDR2 SODIMM 폼펙터 호환 모듈이므로, DDR2 SODIMM 소켓을 사용해야 합니다.
To use the Compute Module a user needs to design a (relatively simple) 'motherboard' that can provide power to the Compute Module (3.3V and 1.8V at minimum) and wires the pins up to the required peripherals for the user's application. Raspberry Pi provide a minimal motherboard for the Compute Module (called the Compute Module IO Board or CMIO Board) which powers the module, brings out the GPIO to pin headers, brings the camera and display interfaces out to FFC connectors, provides HDMI, USB and an 'ACT' LED as well as the ability to program the eMMC of a module via USB from a PC or Raspberry Pi.
This guide first explains the boot process and how Device Tree is used to describe attached hardware (which are essential things to understand when designing with the Compute Module). It then provides a worked example of attaching an I2C and an SPI peripheral to a CMIO Board and creating the Device Tree files necessary to make both peripherals work under Linux (starting from a vanilla Raspbian OS image).
이 가이드는 처음에 부트 프로세스를 설명하고, 장착되어 있는 하드웨어를 표현하는 디바이스 트리가 어떻게 사용되는지 설명합니다. CMIO 보드에 I2C와 SPI 주변장치를 부착하는 것과 리눅스에서 두가지 주변장치가 동작될 수 있도록 디바이스 트리 파일을 만드는 사례를 제공합니다.
Note that using Device Tree is the officially supported method of doing things (for both a Compute Module and a Raspberry Pi), you can at the moment turn off device tree in the kernel altogether but we won't be providing support for this.
디바이스 트리를 사용하는 것을 공식적으로 지원합니다.(컴퓨터 모귤과 라즈베리 파이). 당신이 디바이스 트리를 커널에서 해제할 수 있지만 우리는 그에 대한 지원을 제공하지 않습니다.
BCM283X GPIOS
BCM283x has 3 banks of General Purpose Input Output (GPIO) pins (28 pins on Bank0, 18 pins on Bank1 and 8 pins on Bank2; 54 pins in total). These pins can be used as true GPIO (i.e. software can set them as inputs or outputs, read and/or set state and use them as interrupts) but also can be set to 'alternate functions' such as I2C, SPI, I2S, UART, SD card and others.
BCM283X는 3 뱅크 구조의 범용입출력(GPIO)을 가지고 있습니다.( Bank 0 -28pin, Bank 1-18pin, Bank 2 – 8pin, 으로 총 54pin임) 이들 핀들은 실제 GPIO(즉, input 또는 output, 설정값을 읽거나 인터럽트로 설정가능합니다.) 사용할 수 있을 뿐만 아니라, I2C, SPI, I2S, UART, SD 카드등과 같은 대체 기능으로 설정할 수 있습니다.
On a Compute Module both Bank0 and Bank1 are free to use with Bank2 used for eMMC and HDMI hot plug detect and ACT LED / USB boot control.
컴퓨터 모듈에 있는 Bank0와 Bank1 둘다 Bank2를 이용해서 자유롭게 eMMC와 HDMI Hot flug 검출과 ACT LED/USB boot control를 할 수 있다.
It is useful on a running system to look at the state of each of the GPIO pins (what function they are set to, and the voltage level at the pin) - so that one can see if the system is set up as expected (this is particularly useful to see if a Device Tree is working as expected or to get a look at the pin states during hardware debug).
시스템 동작중에 GPIO 핀들의 각각의 상태를 보는데 유용합니다.(어떤 기능으로 설정되어 있는지, 그리고 그핀의 전압레벨이 얼마인지) 시스템이 예상되로 설정되어 있는지 볼 수 있습니다.(이것은 하드웨어 디버깅하는 동안에 핀 상태를 보거나 디바이스 트리가 예상되로 동작하는지 보는데 특히 유용합니다.
Raspberry Pi provide the raspi-gpio
package which is a tool for hacking / debugging GPIO (NOTE you need to run it as root). To install raspi-gpio
:
라즈베리파이는 GPIO 해킹/디버깅(주:루트로 실행)을 위한 툴인 raspi-gpio 패키지를 제공합니다.
sudo apt-get install raspi-gpio
If apt-get
can't find the raspi-gpio
package you need to do an update first:
만약 apt-get으로 raspi-gpio 패키지를 찾을 수 없다면 먼저 update를 해야 합니다.
sudo apt-get update
To get help on raspi-gpio
run it with the help
argument:
Raspi-gpio에 대한 도움말을 보려면, help 인수와 함꼐 실행하십시오.
sudo raspi-gpio help
For example to see the current function and level of all GPIO pins use:
예를들어 모든 GPIO핀들의 현재의 기능과 레벨을 보기 위해서는 다음의 명령어를 사용할 수 있습니다.
sudo raspi-gpio get
Note raspi-gpio
can be used with the funcs
argument to get a list of all supported GPIO functions per pin, it will print out a table in CSV format. The idea is to pipe the table to a .csv
file and then load this file using e.g. Excel:
주) raspi-gpio는 각 핀마다 지원하는 GPIO 기능 모두의 리스트를 얻기 위한 인수인 funcs와 같이 사용할 수 있으며, 이것은 CSV 형식 테이블로 출력됩니다. .csv 파일로 테이블이 보내지고나서 이파일을 엑셀등을 이용해서 로드합니다.
sudo raspi-gpio funcs > gpio-funcs.csv
BCM283X BOOT PROCESS
BCM283x devices consist of a VideoCore 'GPU' and ARM 'CPU' cores. The GPU is in fact a system consisting of a DSP processor and hardware accelerators for imaging, video encode and decode, 3D graphics and image compositing.
BCM283X 디바이는 VideoCore’GPU’와 ARM’CPU’ 코어로 구성되어있습니다. GPU는 DSP 프로세서와 이미징, 비디오 인코드와 디코드, 3D 그래픽과 이미지 합성하는 하드웨어 가속기로 이루어진 시스템입니다.
In BCM283x devices it is the DSP core in the GPU that boots first and is responsible for general setup and housekeeping before booting up the main ARM processor(s).
BCM283x 디바이스에서 GPU내 DSP 코어는 첫번째로 부트되고 메인 ARM processor 부팅전에 일반적인 설정과 관리를 담당한다.
The BCM283x devices as used on Raspberry Pi and Compute Module boards have a 3 stage boot process:
라즈베리파이와 컴퓨터 모듈 보드에 사용되는 BCM283x 디바이스는 3단계 부트 프로세스를 가지고 있다.
1. The GPU DSP comes out of reset and executes code from a small internal ROM (the Boot ROM). The sole purpose of this code is to load a 'second stage' boot loader via one of the external interfaces. On a Pi or Compute Module this code first looks for a 2nd stage boot loader on the SD card (eMMC) and expects it to be called bootcode.bin
and be on the first partition (which must be FAT32). If no SD card is found or no bootcode.bin
is found, the Boot ROM sits and waits in 'USB boot' mode, waiting for a host to give it a second stage boot loader via the USB interface.
1. GPU DSP는 작은 내부 ROM(Boot ROM)으로부터 코드를 리셋하고 실행합니다. 이 코드의 유일한 목적은 특정 외부 인터페이스를 통해 두번째 단계 부트로더를 로딩하는 것입니다. 파이 또는 컴퓨터 모둘에서 이코드는 먼저SD 카드(eMMC)에서 첫번째 파티션(FAT32이어야함)에 있을 것으로 기대되는bootcode.bin
인 2단계 부트로더를 찾습니다. 만약 SD카드가 없거나 bootcode.bin
이 없으면, USB 인터페이스를 통한 2단계 부트로더를 제공하는 Host를 기다리기 위해 ‘USB boot’ 모드로 대기한다.
2. The second stage boot loader (bootcode.bin
on the sdcard or usbbootcode.bin
for usb boot) is responsible for setting up the LPDDR2 SDRAM interface and various other critical system funcions and then loading and executing the main GPU firmware (called start.elf
, again on the primary SD card partition).
2. 2단계 부트로더(bootcode.bin
on the sdcard or usbbootcode.bin
for usb boot)는 LPDDR2 SDRAM 인터페이스와 다양한 다른 중요 시스템 기능을 설정하고, 메인 GPU 펌웨어를 로딩하고 실행한다. (called start.elf
, again on the primary SD card partition)
3. start.elf takes over and is responsible for further system setup and booting up the ARM processor subsystem, and contains the firmware that runs on the various parts of the GPU. It first reads dt-blob.bin to determine initial GPIO pin states and GPU-specific interfaces and clocks, then parses config.txt. It then loads an ARM device tree file (e.g. bcm2708-rpi-cm.dtb for a Compute Module) and any device tree overlays specified in config.txt before starting the ARM subsystem and passing the device tree data to the booting Linux kernel.
3. start.elf 는 ARM 프로세서 서브시스템의 부팅과 추가 시스템 설정할 책임이 있으며 GPU의 다양한 부분들을 실행하는 펌웨어를 포함하고 있습니다.
초기 GPIO 핀 상태와 GPU-특정 인터페이스와 클럭를 결정하기 위해 dt-blob.bin 을 먼저 로드하고나서 config.txt 구분 분석을 한다. ARM 디바이스 트리 파일(e.g. bcm2708-rpi-cm.dtb for a Compute Module) 을 로드하고, ARM 서브 시스템을 시작하고 디바이스 트리 데이터를 부팅 리눅스 커널에 전달하기 전에 config.txt 에 지정된 특정 device tree를 덮어씌운다.
DEVICE TREE
Device Tree is a special way of encoding all the information about the hardware attached to a system (and consequently required drivers).
디바이스 트리는 시스템에 부착된 하드웨어에 관한 모든 정보를 인코딩하는 특별한 방법이다 (필요한 드라이버)
On a Pi or Compute Module there are several files in the first FAT partition of the SD/eMMC that are binary 'Device Tree' files. These binary files (usually with extension .dtb
) are compiled from human readable text descriptions (usually files with extension .dts
) by the Device Tree compiler..
Pi나 컴퓨터 모듈에는 SD/eMMC의 첫 FAT 파티션내에 바이너리’Device Tree’ 파일들이 여러개 있습니다. 이들 바이너리 파일들은(일반적으로 확장자가 .dtb임) 디바이스 트리 컴파일러에 의해 인간이 읽을 수 있는 텍스트 설명서로 컴파일 됩니다.
On a standard Raspbian image in the first (FAT) partition you will find two different types of device tree files, one is used by the GPU only and the rest are standard ARM device tree files for each of the BCM283x based Pi products:
- dt-blob.bin (used by the GPU)
- bcm2708-rpi-b.dtb (Used for Pi model A and B)
- bcm2708-rpi-b-plus.dtb (Used for Pi model B+ and A+)
- bcm2709-rpi-2-b.dts (Used for Pi 2 model B)
- bcm2708-rpi-cm.dtb (Used for Pi Compute Module)
표준 라즈베리안 이미지의 첫번째(FAT) 파티션내에서 두종류의 디바이스 트리 파일을 발견할 수 있다. 하나는 GPU에서만 사용되고, 나머지 하나는 BCM283x 기반 PI 제품들 각각에 대한 표준 ARM 디바이스 트리 파일이다.
NOTE on Raspbian releases 2015-05-05 and earlier bcm2708-rpi-cm.dtb
is missing, do a sudo rpi-update
to get it.
(참고) 2015-05-05 릴리즈한 Raspbian과 이전에는 bcm2708-rpi-cm.dtb
이 없습니다. sudo rpi-update
를 실행해서 설치하십시요.
NOTE dt-blob.bin
by default does not exist as there is a 'default' version compiled into start.elf
, but for most Compute Module projects it will be necessary to provide a dt-blob.bin
(which overrides the default in-built one).
(참고)start.elf
를 컴파일한 기본 버전인 dt-blob.bin
은 기본적으로 존재하지 않지만, 대부분의 컴퓨터 모듈 프로젝트를위해서는 dt-blob.bin
을 준비할 필요가 있다.(기존에 설치되어 있는 것을 덮어씌워진 것)
Note that dt-blob.bin
is in compiled device tree format, but is only read by the GPU firmware to set up functions exclusive to the GPU - see below.
(참고) dt-blob.bin
는 디바이스 트리형식으로 캄파일되어 있지만, GPU 전용 기능 설정을 위해 GPU 펌웨어에 의해 읽혀집니다.
A guide to creating dt-blob.bin is here. A comprehensive guide to the Linux Device Tree for Raspberry Pi is here.(추가번역 할 것)
Dt-blob.bin을 만드는 가이드는 here.에 있다. 라즈베라파이에 대한 디바이스 트리에 포괄적인 가이드는 here.에 있다.
During boot, the user can specify a specific ARM device tree to use via the device_tree
parameter in config.txt
(e.g. add the line device_tree=mydt.dtb
to config.txt
where mydt.dtb
is the dtb file to load instead of one of the standard ARM dtb files).
부팅하는 동안, 사용자는 config.txt
내 device_tree
파라메터를 통해 특정 ARM 디바이스 트리를 지정할 수 있습니다. (예를 들어 config.txt
에 line device_tree= mydt.dtb
추가하면 표준 ARM dtb 파일 대신에 mydt.dtb
이 로드 됩니다.)
In addition to loading an ARM dtb, start.elf
supports loading aditional Device Tree 'overlays' via the dtoverlay
parameter in config.txt
. (e.g. add as manydtoverlay=myoverlay
lines as required overlays to config.txt
noting that overlays live in /overlays
and are suffixed -overlay.dtb
e.g. /overlays/myoverlay-overlay.dtb
). Overlays are merged with the base dtb file before the data is passed to the Linux kernel when it starts.
ARM dtb의 로딩뿐만 아니라, start.elf
는 config.txt
내의 ‘overlays’ dtoverlay
파라메터를 통해 추가적인 디바이스 트리의 로딩을 지원한다.( 예를 들어
Overlays는 데이터가 리눅스 커널에 전달되기전에 기준 dtb 파일과 병합된다.
Overlays are used to add data to the base dtb that describes non board-specific hardware, which includes GPIO pins used and their function as well as the device(s) attached (so correct drivers can be loaded). The convention is that on a Raspberry Pi all hardware attached to the Bank0 GPIOs (the GPIO header) should be described using an overlay. On a Compute Module all hardware attached to the Bank0 and Bank1 GPIOs should be described in an overlay file.
You don't have to follow these conventions (you can roll all information into one single dtb file, replacing bcm2708-rpi-cm.dtb
) but following the conventions means that you can use a 'standard' Raspbian release with its standard base dtb and all the product-specific information is contained in a separate overlay. Occasionally the base dtb might change - usually in a way that will not break overlays - which is why using an overlay is suggested.
오버레이는 장착된 디바이스 뿐만 아니라 사용된 GPIO 핀들과 그 기능을 포함한 비특정 하드웨어의 설명을 기준 dtb에 데이터를 추가하기 위해 사용됩니다. (따라서 올바른 드라이버가 로드됩니다.) 규칙은 라즈베리파이의 Bank 0 GPIO(GPIO Header)에 장착된 모든 하드웨어는 오버레이를 사용해서 설명되어야 합니다. 컴퓨터 모듈의 Bank0와 Bank1 GPIO에 설치된 모든 하드웨어는 어버레이 파일 내에 설명되어져야 합니다. 규칙을 따를 필요는 없습니다(bcm2708-rpi-cm.dtb
를 교체하여 특정한 하나의 dtb 파알안에 모든 정보를 롤백 할 수 있습니다.) 하지만 규칙을 따른 다는 것은 표준에 기반한 dtb를 갖는 표준 라즈베리안 배포 를 사용할 수 있음을 의미하고, 모든 제품 규격 정보는 분리된 오버레이내에 포함되어야 합니다. 가끔 기본 dtb가 변경되므로 – 일반적으로 오버레이가 분리되지 않는 방법으로 - 왜 오버레이를 사용하도록 제안하는지 그 이유입니다.(?)
DT-BLOB.BIN
When start.elf
runs it first reads something called dt-blob.bin
which is a special form of Device Tree blob which tells the GPU how to (initially) set up the GPIO pin states, and also any information about GPIOs/peripherals that are controlled (owned) by the GPU (rather than being used via Linux on the ARM). For example the Raspberry Pi Camera peripheral is managed by the GPU, and the GPU needs exclusive access to an I2C interface to talk to it (I2C0 on most Pi Boards and Compute Module is nominally reserved for exclusive GPU use) as well as a couple of control pins. The information on which GPIO pins the GPU should use for I2C0 and to control the camera functions comes from dt-blob.bin
. (NOTE the start.elf
firmware has a 'built-in' default dt-blob.bin
which is used if no dt-blob.bin
is found on the root of the first FAT partition, but most Compute Module projects will want to provide their own custom dt-blob.bin
).
Note that dt-blob.bin
specifies which pin is for HDMI hot plug detect (though this should never change on Compute Module) and can also be used to set up a GPIO to be a GPCLK output and specify and ACT LED that the GPU can use while booting. Other functions may be added in future. For information on dt-blob.bin
see here.
start.elf
가 실행될 때 GPU가 초기 GPIO 핀 상태를 어떻게 설정할지를 설명하고, GPU에 의해(ARM의 리눅스를 통해 사용되기 보다는) 콘트롤되는 GPIOs/주변회로에 대한 특정 정보인 디바이스 트리 집합체의 특별한 형태인dt-blob.bin
를 제일 먼저 읽는다. 예를 들어 라즈베리파이 카메라 장치는 GPU에 의해 관리되고 GPU는 I2C 인터페이스에 카메라 장치와 연결하기 위해 단독으로 엑세스할 필요가 있다. (대부분의 파이 보드와 컴퓨터 모듈의 I2C0는 통상 단독으로 GPU가 사용하도록 예약되어 있습니다.) GPU는 I2C0를 사용해서 카메라 기능을 콘트롤해야 하며, GPIO 핀들의 정보는 dt-blob.bin
.로부터 옵니다.
((참고) start.elf
펌웨어는. 만약 dt-blob.bin
을 첫번째 FAT 파티션의 루트에서 찾을 수 없을 경우 사용되는 내장된 기본 dt-blob.bin
.을 가지고 있습니다. 하지만 대부분의 컴퓨터 모듈 프로젝트는 사용자 정의의 dt-blob.bin
을 준비해야 합니다.)
((참고) dt-blob.bin
.는 HDMI hot plug 검출(비록 컴퓨터 모듈에서는 절대 변경할 수 없습니다만)을 위한 핀을 명시합니다. 그리고 또한 GPU가 부팅되는 동안에 사용할 수 있는 ACT LED, GPIO와 GPCLK 출력을 설정하고 명시하는데 사용될수 있습니다. 다른 기능들은 미래에 추가 될것이며 상세한 정보는 여기를 참고 하세요.
minimal-cm-dt-blob.dts is an example .dts
device tree file that sets up the HDMI hot plug detect and ACT LED (these are GPIOs 46 and 47 which we state must be used only for these functions on all Compute Module designs) and sets all other GPIOs to be inputs with default pulls.
minimal-cm-dt-blob.dts는 .dts
디바이스 트리 파일의 예제로 HDMI hot plug detect와 ACT LED(모든 컴퓨터 모듈 설계에 적용되는 GPIO 46, 47의 사례)를 설정하고 다른 GPIO는 기본 레벨를 갖도록 설정합니다.
To compile the minimal-cm-dt-blob.dts
to dt-blob.bin
use the Device Tree Compiler dtc
:
minimal-cm-dt-blob.dts
을 dt-blob.bin
로 컴파일 하기 위해서는 디바이스 트리 컴파일러 dtc
:를 사용합니다.
dtc -I dts -O dtb -o dt-blob.bin minimal-cm-dt-blob.dts
ARM LINUX DEVICE TREE
After start.elf
has read dt-blob.bin
and set up the initial pin states and clocks, it reads config.txt
which contains many other options for system setup (see here for a comprehensive guide).
start.elf
는 dt-blob.bin
읽고 초기 핀 상태와 클럭들을 설정 한 후에, 시스템 설정을 위한 많은 다른 옵션들 포함하는 config.txt
(포괄적인 가이드는here를 참조)를 읽습니다.
After reading config.txt
another device tree file specific to the board the hardware is running on is read; this is bcm2708-rpi-cm.dtb
for a Compute Module. This file is a standard ARM Linux device tree file, which details how hardware is attached to the processor (what peripheral devices exist in the SoC and where, which GPIOs are used, what functions those GPIOs have, and what physical devices are connected). This file will set up the GPIOs appropriately (it will overwrite pin state set up in dt-blob.bin
if it is different) and will also try and load driver(s) for the specific device(s).
config.txt
를 읽은 후에, 하드웨어가 실행되고 있는 보드 고유의 다른 디바이스 트리 파일을 읽습니다. 이것은 컴퓨터 모듈을 위한 bcm2708-rpi-cm.dtb
입니다. 이파일은 표준 ARM 리눅스 트리 파일로 어떻게 하드웨어가 프로세서에 설치되는지 방법을 상세하게 나타낸다.(어떤 주변 장치가 SoC에 어디에 존재하는지와 어떤 GPIO를 사용하는지, 어떤 기능의 GPIO를 가지고 있는지, 어떤 주변 장치와 연결되어 있는지등..) 이파일은 GPIO들을 알맞게 설정하고( 만약 차이가 난다면 dt-blob.bin
를 덮어쓰고 핀 상태를 설정합니다.) 특정 디바이를 위한 드라이버를 로드하고 시도합니다.
Although the bcm2708-rpi-cm.dtb
file can be used to load all attached devices, the recommendation for Compute Moudule users is to leave this file alone (i.e. just use the one supplied in the standard Raspbian software image) and add devices using a custom 'overlay' file as previously described. The bcm2708-rpi-cm.dtb
file contains (disabled) entries for the various peripherals (such as I2C, SPI, I2S etc.) and no GPIO pin definitions (apart from the eMMC/SD Card peripheral which has GPIO defs and is enabled, because it is always on the same pins). The idea is the separate overlay file will enable the required interfaces, describe the pins used, and also describe the required drivers. The start.elf
firmware will read and merge the bcm2708-rpi-cm.dtb
and overlay data before giving the merged device tree to the Linux kernel as it boots up.
bcm2708-rpi-cm.dtb
파일이 모든 부착된 디바이스를 로드하기 위해 사용될 수 있으므로, 컴퓨트 모듈 사용자를 위한 권장사항으로 이파일 하나를 두고 (표준 라즈베리안 소프트웨어 이미지내 제공된 하나만을 사용) 이전 글에 설명한 것처럼 사용자 정의 ‘오버레이’ 파일을 사용해서 디바이스를 추가 하십시오. bcm2708-rpi-cm.dtb
파일은 다양한 주변장치의 비활성화된 항목(I2C,SPI,I2S,와 같은) 과 정의되지 않은 GPIO핀을 포함하고 있습니다.( 항상 같은 핀을 사용하는 eMMC/SD 카드 주변 장치는 GPIO defs으로 설정되므로 제외합니다) 별도의 오버레이 파일이은 필요한 인터페이스를 사용할 수 있게 사용된 핀들을 설명하며, 필요한 드라이버들을 설명할 것입니다. start.elf
펌웨어는 bcm2708-rpi-cm.dtb
을 읽거나 통합된 디바이스 트리를 리눅스 커널이 부팅되기 전의 오버레이 데이터와 합칠 것입니다.
DEVICE TREE SOURCE AND COMPILATION
The Raspbian image provides compiled dtb files, but where are the source dts files? They live in the Raspberry Pi Linux kernel branch, on GitHub. Look in the arch/arm/boot/dts
folder.
라즈베리안 이미지는 컴파일된 dtb 파일들을 제공합니다. dts 소스 파일들은 어디에 있을까요? 그들은 GitHub인 라즈베리파이 리눅스 커널 브렌치내에 있으며, arch/arm/boot/dts
폴더를 보세요.
Some default overlay dts files live in arch/arm/boot/dts/overlays
(corresponding overlays for standard hardware that can be attached to a Raspberry Pi in the Raspbian image are on the FAT partition in the /overlays
directory - note these assume certain pins as they are for use on a Raspberry Pi, so in general use the source of these standard overlays as a guide to creating your own unless you are using the exact same GPIO pins as you would be using if the hardware were plugged into the GPIO header of a Raspberry Pi).
기본 오버레이 dts 파일들은 arch/arm/boot/dts/overlays
에 있습니다. ( 라즈베리안 이지지에 라즈베리파이에 설치되어져 있는 표준 하드웨어에 해당되는 오버레이들은 FAT 파티션인 /overlays
에 있습니다.) (참고) 이들은 라즈베리 파이에서 사용하기 위한 특정 핀을 통제합니다. 따라서, 라즈베리파이의 GPIO 헤더 장착된 하드웨어로 사용되는 동일한 GPIO를 사용하지 않는한 일반적으로 사용자가 새롭게 만들기 위한 가이드로서 이들 표준 오버레이의 소스를 사용합니다.
To compile these dts files to dtb files requires an up-to-date version of the Device Tree compiler dtc
. More info can be found here, but the easy way to install an appropriate version on a Pi is to run:
dts 파일들을 dtb 파일들로 컴파일 하기위해서는 업데이트된 버전의 디바이스 트리 컴파일러 dtc
.가 필요하다. 추가적인 정보는 here에서 찾을 수 있다. 하지만 파이에 적절한 버전을 설치하기 쉬운 방법은 다음을 설치하는 것입니다.
sudo apt-get install device-tree-compiler
If you are building your own kernel then the build host also gets a version in scripts/dtc
, and you can arrange that your overlays are built automatically by adding them to Makefile
in arch/arm/boot/dts/overlays
and using the "dtbs" make target.
사용자 정의 커널을 빌드하고 Host을 구축한다면 scripts/dtc
내에 버전을 가져와서 그것들 arch/arm/boot/dts/overlays
내에서 Makefile
로 “dtbs”을 이용하여 타겟을 만들어 사용자 오버레이가 자동으로 빌드될수 있도록 정렬할 수 있습니다.
DEVICE TREE DEBUGGING(디바이스 트리 디버깅)
When the Linux kernel is booted on the ARM core(s) the GPU provides it with a fully assembled device tree (assembled from the base dts and any overlays). This full tree is available via the Linux proc interface in /proc/device-tree
, where nodes become directories and properties become files.
리눅스 커널이 ARM 코어들에서 부팅될 때, GPU는 종합적으로 생산된 디바이스 트리(기본 dts와 다른 오버레이들로부터 생산된)를 제공합니다. 이 종합 트리는/proc/device-tree
내에 있는 리눅스 프로세스 인터페이스를 통해 사용 가능합니다.
You can use dtc
to write this out as a human readable dts file for debugging (you can see the fully assembled device tree which is often very useful):
dtc -I fs -O dts -o proc-dt.dts /proc/device-tree
dtc
를 사용해서 사람이 읽을 수 있는 디버깅을 위한 dts파일로 출력할 수 있습니다.(종합 생산된 디바이스 트리를 보는데 유용한 합니다.)
As previously explained in the GPIO section it is also very useful to use raspi-gpio
to look at the setup of the GPIO pins to see if they are as you expect:
raspi-gpio get
GPIO 섹션에서 이미 설명한 것 처럼, raspi-gpio
를 사용하여 GPIO 핀의 설정을 보거나 기대값을 확인하는데 매우 유용하게 사용할 수 있다.
If something seems to be going awry useful information can also be found by dumping the GPU log messages:
sudo vcdbg log msg
만약 무언가 잘못된 것 같을 경우에 대한 유용한 정보를 GPU 로그 메시지를 덤핑해서 찾을 수도 있다.
You can include more diagnostics in the output by adding dtdebug=1
to config.txt
.
config.txt
의 dtdebug=1
를 줌으로서 출력에 추가적인 진단루틴을 포함할 수 있다.
GETTING HELP
Please use the Device Tree subforum on the Raspberry Pi forums to ask Device Tree related questions.
디바이스 트리 관련된 질문을 하기 위한 라즈베리파이 포럼에 있는 Device Tree subforum을 사용하세요
EXAMPLES
For these simple examples I used a CMIO board with peripherals attached via jumper wires.
간단한 예제로서 점프선이 통해 설치된 주변회로를 갖는 CMIO 보드를 사용합니다.
For each of the examples we assume a CM+CMIO board with a clean install of the latest Raspbian version on the CM. See instructions here.
각각 예제를 위해 CM 보드에 최신의 라즈베리안 버전이 설치된 깨끗한 CM+CMIO 보드를 사용합니다.
The examples here require internet connectivity, so a USB hub plus keyboard plus WiFi dongle (or Ethernet dongle) plugged into the CMIO USB port is recommended.
예제들은 인터넷 연결이 필요하며, USB 허브와 키보드, WiFi 동글(또는 이더넷 동글)이 꼽혀있는 CMIO USB 포트를 추천한다.
For Raspbian versions 2015-05-05 or earlier do a sudo rpi-update to make sure you have the latest firmware and bcm2708-rpi-cm.dtb
.
2015-05-05일자 라즈베리안 버전이나 이전 것은 “sudo rpi-update”를 통해 최신 펌웨어와 bcm2708-rpi-cm.dtb
.를 설치하시오.
If you suspect any issues or bugs with Device Tree it is always best to try a sudo rpi-update
to make sure you are using the latest firmware (WARNING if you have edited any of the default .dtb files in /boot
or /boot/overlays
these may be overwritten by rpi-update).
만약 디바이스 트리에 어떤 이슈나 버그가 의심된다면 sudo rpi-update
를 시도해서 최신 펌웨어를 사용하는 것이 항상 최선이다.(주의, 만약 /boot
또는/boot/overlays
기본 .dtb 파일을 수정했다면 이것들은 rpi-update에 이해 덮어 씌어질 것입니다.)
Please post any issues / bugs / questions on the Raspberry Pi Device Tree subforum.
라즈베리파이 디바이스 트리 서브포럼에 있는 이슈/버그/질문들을 게시해 주세요.
EXAMPLE 1 - ATTACHING AN I2C RTC
In this simple example we wire an NXP PCF8523 real time clock (RTC) to the CMIO board GPIO pins (3V3, GND, I2C1_SDA on GPIO44 and I2C1_SCL on GPIO45).
이 예제에서는 NXP PCF8523 real time clock (RTC)를 CMIO 보드 GPIO에 선으로 연결한다.(3V3, GND와 GPIO44에 I2C1_SDA, GPIO45에 I2C1_SCL)
Download minimal-cm-dt-blob.dts and copy it to the SD card FAT partition (located in /boot
when the CM has booted).
minimal-cm-dt-blob.dts를 SD 카드 FAT 파티션에 다운로드하고 카피하시오.(CM이 부팅될 때 /boot
에 위치한다.)
Edit minimal-cm-dt-blob.dts
and change the pin states of GPIO44 and 45 to be I2C1 with pull-ups:
sudo nano /boot/minimal-cm-dt-blob.dts
minimal-cm-dt-blob.dts
를 I2C1이 풀업되도록 GPIO44와 45의 핀상태를 수정하고 변경하시오.
Change lines:
pin@p44 { function = "input"; termination = "pull_down"; }; // DEFAULT STATE WAS INPUT NO PULL
pin@p45 { function = "input"; termination = "pull_down"; }; // DEFAULT STATE WAS INPUT NO PULL
to:
pin@p44 { function = "i2c1"; termination = "pull_up"; }; // SDA1
pin@p45 { function = "i2c1"; termination = "pull_up"; }; // SCL1
NOTE we could use this dt-blob.dts
with no changes, as the Linux Device Tree will (re)configure these pins during Linux kernel boot when the specific drivers are loaded, so it is up to you whether you modify dt-blob.dts
. I like to configure dt-blob.dts
to what I expect the final GPIOs to be, as they are then set to their final state as soon as possible (during the GPU boot stage) but this is not strictly necessary. You may find that in some cases you do need pins to be configured at GPU boot time so they are in a specific state when Linux drivers are loaded (e.g. maybe a reset line needs to be held in the correct orientation).
(참고) 특정 드라이버가 올라올는 리눅스 커널 부팅 기간에 이들 핀들은 리눅스 디바이스 트리가(재) 설정하므로 변경없는 dt-blob.dts
을 사용할 수 있습니다. 따라서 dt-blob.dts
를 수정할지 말지 결정해야 합니다. 여기서는 기대되는 최종 GPIO가 되도록 dt-blob.dts
를 설정합니다. 핀들은 최종 상태로 가능한 빨리 설정됩니다.(GPU 부팅 단계 동안에)하지만 이것은 절대적으로 필요한 것은 아닙니다. 어떤 경우는 그들은 리눅스 드라이버들이 로드될 때 특정 상태에 있는지(예로서 리셋라인 올바른 방향으로 유지될 필요가 있다) GPU 부팅 시간에 설정되어지기 위한 필요한 핀들을 찾을 수 있습니다.
Compile dt-blob.bin
:
sudo dtc -I dts -O dtb -o /boot/dt-blob.bin /boot/minimal-cm-dt-blob.dts
Grab example1-overlay.dts and put it in /boot
then compile it:
example1-overlay.dts를 받아서 /boot
에 넣고 그것을 컴파일 하시오.
sudo dtc -@ -I dts -O dtb -o /boot/overlays/example1-overlay.dtb /boot/example1-overlay.dts
Note the '-@' in the dtc
command line - this is necessary if you are compiling dts files with external references, as overlays tend to be.
(참고) dtc 명령어 라인에 있는 ‘-@’는 오버레이되는 방향으로 dts 파일들을 외부 참조하여 컴파일 하는 경우에 필요합니다.
Edit /boot/config.txt
and add the line:
dtoverlay=example1
/boot/config.txt
가 변경될 수 있도록 라인에 추가하시오
Now save and reboot. 저장하고 다시 부팅하시오.
Once rebooted you should see an rtc0 entry in /dev and running:
/dev내에 rtc0 항목을 볼 수 있어야 하며 동작한다면 다시 리부팅 된다.
sudo hwclock
하드웨어 클럭 타임으로 되돌아 가고, 에러는 없다.
EXAMPLE 2 - ATTACHING AN ENC28J60 SPI ETHERNET CONTROLLER
In this example we take the first RTC example and add another peripheral - an ENC28J60 SPI Ethernet Controller. The Ethernet controller is connected to SPI pins CE0, MISO, MOSI and SCLK (GPIO8-11 respectively), as well as GPIO12 for a falling edge interrupt, and of course GND and 3V3.
이번 예제는 첫번째 RTC 예제와 다른 주변 회로인 ENC28J60 이더넷 콘트롤러를 추가한다. 이더넷 콘트롤러는 SPI 핀들인 CE0,MISO,MOSI와 SCLK(GPIO8-11 각각) 뿐만 아니라, GND, 3V3와 폴링 엣지 인터럽트를 위한 GPIO12가 연결된다.
In this example we won't change dt-blob.bin
(though of course you can if you wish) and we should see that Linux Device Tree correctly sets up the pins.
이번 예제에서는 dt-blob.bin
가 변경되지 않고서(물론 당신이 원할수 있지만) 리눅스 디바이스 트리가 핀들을 올바르게 설정하는 것을 볼 수 있다.
Grab example2-overlay.dts and put it in /boot
then compile it:
sudo dtc -@ -I dts -O dtb -o /boot/overlays/example2-overlay.dtb /boot/example2-overlay.dts
example2-overlay.dts를 다운받고 /boot
에 넣은후 컴파일 하시오.
Edit /boot/config.txt
and add the line:
dtoverlay=example2
Now save and reboot.
Once rebooted you should see, as before, an rtc0 entry in /dev and running:
sudo hwclock
will return with the hardware clock time, and not an error.
You should also have Ethernet connectivity: 이더넷 연결할수 있다.
ping 8.8.8.8
should work.
finally running:
sudo raspi-gpio get
should show that GPIO8-11 have changed to ALT0 (SPI) functions.
GPIO8-11 ALT0(SPI) 기능으로 변경된 것을 볼 수 있다.
ATTACHING A CAMERA OR CAMERAS
To attach a camera or cameras see the documentation here
This document is a work in progress and is intended for advanced users.
(이문서는 진행중인 작업이며, 고급 사용자를 위한 것입니다.)
For the camera to work with the compute module, the firmware needs to be July 23rd 2014 or newer (use vcgencmd version
to check).
컴퓨터 모듈에서 카메라를 작동하기 위해서는, 2014년 7월 23일자나 그 이후 최신 펌웨어가 필요합니다. 확인하기 위해 vcgencmd version
를 사용하시오.
QUICKSTART
- On the compute module, run sudo raspi-config and enable the camera.
- Next, run sudo wget http://goo.gl/lozvZB -O /boot/dt-blob.bin
- Connect adapter board and camera to CAM1 port.
4. Connect GPIO pins together as shown below.
5. (Optional) To add an additional camera, repeat step 3 with CAM0 and connect the GPIO pins for the second camera.
6. Finally, reboot for the dt-blob.bin file to be read
Software support
Recent raspicam binaries (raspivid and raspistill) have the -cs (--camselect) option to specify which camera should be used
최신 라즈파이캠 바이너리는(raspivid와 raspistill) 어떤 카메라를 사용할지 정의하기 위한 –cs (--camselect) 옵션을 가지고 있다.
(sudo raspistill –cs 1 –o ex.jpg 와 같이 사용한다.)
From other applications, MMAL can be told which camera to use by setting MMAL_PARAMETER_CAMERA_NUM accordingly.
다른 어플리케이션으로부터, MMAL은 MMAL_PARAMETER_CAMERA_NUM 설정에 맞춰서 어떤 카메라를 사용할지 표현해 준다.
MMAL_PARAMETER_INT32_T camera_num = {{MMAL_PARAMETER_CAMERA_NUM, sizeof(camera_num)}, CAMERA_NUMBER};
status = mmal_port_parameter_set(camera->control, &camera_num.hdr);
ADVANCED
The 15-way 1mm FFC camera connector on the Raspberry Pi model A and B is attached to the CAM1 interface (though only uses 2 of the 4 available lanes).
라즈베리파이 모델 A와 B에는 15-way 1mm FFC 카메라 콘넥터가 CAM1 인터페이스에 설치되어있다.(비록 4개의 가능한 레인중 2개만 사용하지만..)
The Compute Module IO Board has a 22-way 0.5mm FFC for each camera port, with CAM0 being a 2-lane interface and CAM1 being the full 4-lane interface.
컴퓨터 모듈 IO 보드는 각 카메라 포트를 위한 22-way 0.5mm FFC 가지고 있으며, CAM0는 2-lane 인터페이스와 CMA1은 총 4-lane 인터페이스로 되어 있다.
To attach a standard Raspberry Pi Camera to the Compute module IO Board a small adaptor board is available that adapts the 22W FFC to the Pi 15W FFC.
표준 라즈베리파이 카메라를 컴퓨터 모듈에 IO 보드에 설치하기 위해서는 22W FFC를 Pi 15W FFC 적용할수 있는 작은 어뎁터 보드로 가능하다.
To make the Raspberry Pi Camera work with a standard Raspian OS the GPIOs and I2C interface must be wired to the CAM1 connector. This is done by bridging the correct GPIOs from the J6 GPIO connector to the CD1_SDA/SCL and CAM1_IO0/1 pins on the J5 connector using jumper wires. Additionally, a dt-blob.bin file needs to be provided to override default pin states (the dt-blob.bin file is a file that tells the GPU what pins to use when controlling the camera, for more information on this see the relevant section in the guide to attaching peripherals to a Compute Moule here).
표준 라즈베리안 OS에서 라즈베리파이 카메라를 동작시키기 위해서는 GPIO와 I2C 인터페이스가 CAM1 콘넥터에 연결되어 있어야 합니다. 이것은 점퍼선을 이용하여 J6 GPIO 콘넥터에 있는 CD1_SDA/SCL과 CAM1_IO0/1 핀을 J5 콘넥터에 연결하여 수행됩니다. 추가적으로, dt-blod.bin 파일은 기본 핀 상태를 우선 제공할 필요가 있습니다.(dt-blob.bin 파일은 GPU가 카메라를 콘트롤할때 사용하는 핀을 말해주는 파일로서 더 많은 정보는 관련된 섹션을 참조하시오 here – 앞에서 설명한 부분임.)
The pin numbers below are provided only as an example. LED and SHUTDOWN pins can be shared by both cameras, if required. The SDA and SCL pins must be either GPIO0 and GPIO1 or GPIO28 and 29 and must be individual to each camera.
아래의 핀번호들은 단지 예로서 제공됩니다. LED와 SHUTDOWN 핀들은 양쪽 카메라에 의해서 공유될수 있습니다. 필요한 것은 SDA와 SCL핀은 GPIO0나 GPIO1 또는 GPIO28과 29 둘중 하나로 연결되어야 하며 각 카메라에 개별적이어야 합니다.
STEPS TO ATTACH A RASPBERRY PI CAMERA (TO CAM1)
- Attach the 0.5mm 22W FFC flexi (included with the adaptor board) to the CAM1 connector (flex contacts face down).
- Attach the camera adaptor board to the other end of the 0.5mm flex (flex contacts face down).
- Attach a Raspberry Pi Camera to the other, larger 15W 1mm FFC on the camera adaptor board (contacts on the Raspberry Pi Camera flex must face up).
- Attach CD1_SDA (J6 pin 37) to GPIO0 (J5 pin 1).
- Attach CD1_SCL (J6 pin 39) to GPIO1 (J5 pin 3).
- Attach CAM1_IO1 (J6 pin 41) to GPIO2 (J5 pin 5).
- Attach CAM1_IO0 (J6 pin 43) to GPIO3 (J5 pin 7).
The numbers in brackets are conventional, physical pin numbers, numbered from left to right, top to bottom. The numbers on the silkscreen correspond to the Broadcom SoC GPIO numbers.
괄호안에 있는 번호는 일반적으로 물리적 핀 번호이고 번호는 좌에서 우로, 위에서 아래로 붙여진다. 실크스크린 위의 번호들은 Broadcom SoC GPIO 번호에 상응하는 것이다.
.CONFIGURING DEFAULT PIN STATES
The GPIOs used by the camera, default to input mode on the compute module. In order to override the default pin states and define the pins used by the camera, we need to create a dt-blob.bin file from a source dts file with the relevant information for the GPU, and place this on the root of the first FAT partition.
카메라에 사용되는 GPIO는 컴퓨터 모듈에서 기본적으로 입력모드이다. 기본 핀 상태를 무시하고 카메라에 사용되는 핀들을 정의하기 위해서는 GPU를 위한 관련된 정보를 갖는 소스 dts 파일로부터 dt-blob.bin 파일을 만들어야 하고, 이것을 루트의 첫 FAT 파티션에 놓아야 한다.
(노란색 바탕에 대한 기술은 추가 정리해야 한다)
Sample device tree source files are provided at the bottom of this document.
The pin_config section in the pins_cm { }
(compute module) section of the source dts needs the camera's LED and power enable pins set to outputs:
소스 dts의 (컴퓨터 모듈) 섹션내의 Pin_config 섹션 pins_cm { }
은 카메라의 LED와 파워 인에이블 핀을 출력으로 설정한다.
pin@p2 { function = "output"; termination = "no_pulling"; };
pin@p3 { function = "output"; termination = "no_pulling"; };
To tell the firmware which pins to use and how many cameras to look for, add the following to the pin_defines section:
어떤 핀을 사용하고 얼마나 많은 카메라를 사용하지를 펌웨어에게 알려주기 위해서 pin_defines 섹션에 다음을 추가하시오.
pin_define@CAMERA_0_LED { type = "internal"; number = <2>; };
pin_define@CAMERA_0_SHUTDOWN { type = "internal"; number = <3>; };
pin_define@CAMERA_0_UNICAM_PORT { type = "internal"; number = <1>; };
pin_define@CAMERA_0_I2C_PORT { type = "internal"; number = <0>; };
pin_define@CAMERA_0_SDA_PIN { type = "internal"; number = <0>; };
pin_define@CAMERA_0_SCL_PIN { type = "internal"; number = <1>; };
HOW TO ATTACH TWO CAMERAS
Attach the second camera to the (CAM0) connector as before.
Connect up the I2C and GPIO lines.
- Attach CD0_SDA (J6 pin 45) to GPIO28 (J6 pin 1).
- Attach CD0_SCL (J6 pin 47) to GPIO29 (J6 pin 3).
- Attach CAM0_IO1 (J6 pin 49) to GPIO30 (J6 pin 5).
- Attach CAM0_IO0 (J6 pin 51) to GPIO31 (J6 pin 7).
5. The compute module's pin_config secion needs the second camera's LED and power enable pins configured:
6.
pin@p30 { function = "output"; termination = "no_pulling"; };
7. pin@p31 { function = "output"; termination = "no_pulling"; };
8. In the compute module's pin_defines section of the dts file, change theNUM_CAMERAS parameter to 2 and add the following:
9.
pin_define@CAMERA_1_LED { type = "internal"; number = <30>; };
10.
pin_define@CAMERA_1_SHUTDOWN { type = "internal"; number = <31>; };
11.
pin_define@CAMERA_1_UNICAM_PORT { type = "internal"; number = <0>; };
12.
pin_define@CAMERA_1_I2C_PORT { type = "internal"; number = <0>; };
13.
pin_define@CAMERA_1_SDA_PIN { type = "internal"; number = <28>; };
14.pin_define@CAMERA_1_SCL_PIN { type = "internal"; number = <29>; };
SAMPLE DEVICE TREE SOURCE FILES
As of 2015-04-17 some users are reporting issues with GPIO pin 2 and 3 for camera control. Pin 4 and 5 is reported to work. The issue is being investigated.
CHANGING THE DEFAULT PIN CONFIGURATION (23페이지 상단의 CONFIGURING DEFAULT PIN STATES에 관련된 내용임)
This feature is intended for advanced users. ( 이 기능은 고급 사용자를 위한 것입니다.)
As of July 15th 2014, the Raspberry Pi firmware supports custom default pin configurations through a user-provided device tree blob file. In order to ensure that your firmware is recent enough, please run vcgencmd version
.
2014년 7월15일자로 라즈베리 파이 펌웨어는 사용자가 제공하는 디바이스 트리 blob 파일을 통해 사용자 정의 기본 핀 구성을 지원합니다. 펨웨어가 최근 것인지 확인하기 위해서 vcgencmd version
.을 실행해 주십시오.
PROVIDING A CUSTOM DEVICE TREE BLOB
In order to compile a device tree source (dts) file into a device tree blob (dtb) file, the device tree compiler must be installed by running sudo apt-get install device-tree-compiler
. The dtc
command can then be used as follows:
디바이스 트리 소스(dts) 파일을 디바이스 트리 blob(dtb) 파일로 컴파일 하기 위해서, 디바이스 트리 컴파일러는 sudo apt-get install device-tree-compiler
.를 실행함으로서 설치 되어져야 합니다. 다음의 dtc 명령이 사용되어 질 수 있습니다.
sudo dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob.dts
NOTE: In the case of NOOBS installs, the dtb file should be placed on the recovery partition instead.
참고:NOOBS가 설치된 경우, dtb 파일은 리커버리 파티션에 대신 배치해야 합니다.
Similarly, a dtb file can be converted back to a dts file, if required.
마찬가지로 필요한 경우, dtb파일은 dts로 다시 변환될 수 있습니다.
dtc -I dtb -O dts -o dt-blob.dts /boot/dt-blob.bin
SECTIONS OF THE DT-BLOB
The dt-blob.bin is used to configure the binary blob (Videocore) at boot time. It is not something that the linux kernel uses (at the moment) although a kernel section will be added at a later stage when we move the Raspberry Pi kernel to use a dt-blob for configuration. The dt-blob is capable of configuring each of the different versions of the Raspberry Pi including the Compute Module to set up the alternate settings correctly. The following sections are valid in the dt-blob.
Dt-blob.bin은 부팅시간에 바이너리 blob(Videocore)의 환경 설정에 사용됩니다. 환경 설정용 dt-blob를 사용하기 위해서 라즈베리파이 커널로 이동할 때 비록 커널 섹션이 이후 단계에 추가 될지라도 리눅스 커널이 사용하는 것은 아니다(잠깐 동안). Dt-blob는 컴퓨터 모듈을 포함한 라즈베리파이의 다른 버전의 각각에 대해 대안 설정을 올바르게 설치하기 위해 환경 설정을 할 수 있다.다음 섹션은 dt-blob에 유효합니다.
1.videocore
This section contains the whole videocore blob information, all subsequent sections must be enclosed within this section(이 섹션은 전체 비디오코어 blob 정보를 포함하며, 이후의 모든 섹션은 이 섹션내에 묶어야 합니다.)
2.pins_*
There are up to eight separate pins_* sections, namely: (최대 8개의 별도의 pins_* 섹션이 있으며, 이름은: )
① pins_rev1 Rev1 pin setup. There are some difference because of the moved I2C pins
② pins_rev2 Rev2 pin setup. This includes the additional codec pins on P5
③ pins_bplus1 Model B+ rev 1.1, including the full 40pin connector
④ pins_bplus2 Model B+ rev 1.2, swapping the low-power and lan-run pins
⑤ pins_aplus Model A+, lacking Ethernet
⑥ pins_2b1 Pi 2 Model B rev 1.0, controls the SMPS via I2C0
⑦ pins_2b2 Pi 2 Model B rev 1.1, controls the SMPS via software I2C on 42&43
⑧ pins_cm The Compute Module, note the default for this is the default for the chip so can be a useful source of information about default pullups / downs on the chip.
Each pins_*
section can contain pin_config
and pin_defines
sections.
각각의 pins_*
섹션은 pin_config
와 pin_defines
섹션을 포함할 수 있다.
3. pin_config
The pin_config
section is used to configure the individual pins, each item in this section must be a named pin section, such as pin@p32
meaning GPIO32. There is a special section pin@default
which has the default settings for anything not specifically named in the pin_config section.
pin_config
섹션은 개별 핀들의 환경 설정을 위해 사용되어지며, 이 섹션의 각 아이템들은 반드시 GPIO32를 의미하는 pin@p32
와 같은 형식으로 이름이 붙여져야 한다. 특별한 섹션인 pin@default
는 pin_config 섹션내에 특별하게 이름이 붙여지지 않는 기본 설정을 갖는다.
4. pin@pinname
This section can contain any combination of the following items
(1)polarity
o active_high
o active_low
(2)termination
o pull_up
o pull_down
o no_pulling
(3)startup_state
o active
o inactive
(4)function
o input
o output
o sdcard
o i2c0
o i2c1
o spi
o spi1
o spi2
o smi
o dpi
o pcm
o pwm
o uart0
o uart1
o gp_clk
o emmc
o arm_jtag
(5) drive_strength_ma The drive strength is used to set a strength for the pins, please note you can only set the bank to a single drive strength. <8> <16> are valid values
5. pin_defines
This section is used to set specific videocore functionality to particular pins, this enables the user to move the camera power enable pin to somewhere different or the hdmi hotplug postion (i.e. things that linux have no control over). Please refer to the example dts file below
이 섹션은 특정 핀에 특정 비디오코어 기능을 설정하는 사용됩니다. 이것은 카메라 파워 설정 핀이나 hdmi hotplug 위치 을 어딘가 다른곳으로 이동하는 것을 가능하게 합니다.(즉, 리눅스에서는 콘트롤하지 않는 일임) 아래의 예제 dts 파일을 참조해 주세요.
CLOCK CONFIGURATION
It is possible to change the configuration of the clocks through this interface, although very difficult to predict the results! The configuration of the clocking system is very very complex, there are five separate PLLs each one has its own fixed (or variable in the case of PLLC) VCO frequency. Each VCO then has a number of different channels which can be set up with a different division of the VCO frequency. Then each of the clock destinations can then be configured to come from one of the clock channels (although there is a restricted mapping of source to destination so not all channels can be routed to all clock destinations).
이 인터페이스를 통해서 비록 결과를 예측하는 것이 매우 어렵지만 클럭 확경 설정을 변경하는 것이 가능합니다. 시스템 클럭킹의 환경설정은 매우 매우 복잡하며, 다섯개의 구분된 PLL들이 있으며 각각은 VOC 주파수로 고정됩니다.(또는 PLLC의 경우에서는 변수) 각각 VCO는 VOC 주파수의 다른 부문으로 설정될 수 있는 다른 채널의 수를 갖습니다. 클럭 각각의 목적지는 클럭 채널중 하나로부터 나오도록 환경 설정될수 있습니다.(비록 목적지에 소스의 제한된 맵핑이 있지만, 모든 채널은 모든 클럭 목적지에 라우팅될 수 없습니다.) - 무슨 말인지 이해 못하겠음.??
For this reason I'll just add here a couple of example configurations that you can use to alter very specific clocks. Beyond this it is something we'll add to when requests for clock configurations are made.
이러한 이유 때문에, 매우 특별한 클럭을 변경하는데 사용될 수 있는 환경설정 예제 몇 가지를 여기에 추가할 것입니다. 이 외에도 클럭 환경설정을 위해서 만드는 것이 요청될 때 추가할 것입니다.
clock_routing {
vco@PLLA { freq = <1966080000>; };
chan@APER { div = <4>; };
clock@GPCLK0 { pll = "PLLA"; chan = "APER"; };
};
clock_setup {
clock@PWM { freq = <2400000>; };
clock@GPCLK0 { freq = <12288000>; };
clock@GPCLK1 { freq = <25000000>; };
};
The above will set the PLLA to a source VCO running at 1.96608GHz (the limits for this VCO are 600MHz - 2.4GHz), the APER channel to /4 and configures GPCLK0 to be sourced from PLLA through APER. This is used specifically to give an audio codec the 12288000Hz it needs to do the 48000 range of frequencies.
위에서 1.96608GHz(이 VCO에 대한 한계는 600MHz-2.4GHz임)에 동작하는 소스 VCO에 PLLA를 설정하고, PLLA을 소스로하여 APER 채널을 4로 나누고 이를 GPLCLK0로 환경설정한다. 이것은 48000 주파수 범위를 하기 위해 필요로 하는 오디오 코덱 12288000Hz에 인가하기 위해 특별하게 사용됩니다.
SAMPLE DEVICE TREE SOURCE FILE
NOTE: As this is a new feature, there is no reference dts file which is guaranteed to be supported by future firmware revisions.
(참고) 이것은 새로운 기능이기 때문에 미래 펌웨어 리비전에 의해 지원되는 보장된 참조용 dts가 아닙니다.
The dts file used for the dtb compiled into the May 30th 2015 firmware can be downloaded from here.
이 dts 파일은 2015년 5월30일자 펌웨어를 컴파일한 dtb에 사용되어진다.
'Raspberry Pi관련 > Raspberry Pi Compute Module' 카테고리의 다른 글
Raspberry Pi 이해는 Compute Module를 사용해 보면 더 쉽게 이해됩니다. (0) | 2017.02.06 |
---|