nRF51822 GNU Codebase and Sample Project
nRF51822 GNU 코드베이스와 샘플 프로젝트
The ARM toolchain configured in the previous section allows you to build binaries for virtually any embedded device that uses an ARM processor.
이전 섹션에서 구성된 ARM 도구 체인을 사용하면 ARM 프로세서를 사용하는 거의 모든 임베디드 장치에 대한 바이너리를 빌드할 수 있습니다.
But to help give you an idea of what’s involved with low-level embedded development in the real world, the following simple project is designed around Nordic’s nRF58122-EK (see “nRF51822-EK (Nordic Semiconductors)” on page 75) using GCC and open source tools.
하지만 실제 세계에서 저수준 임베디드 개발에 무엇이 포함되는지에 대한 아이디어를 제공하기 위해 다음의 간단한 프로젝트는 GCC 및 오픈 소스 도구를 사용하여 Nordic의 nRF58122-EK (75페이지의 "nRF51822-EK (Nordic Semiconductors)" 참조)를 중심으로 설계되었습니다.
The same principles and design process apply to any other embedded processor, though you will need to find startup code and tools from your silicon vendor or online to work with a different microcontroller or SoC.
다른 임베디드 프로세서에도 동일한 원칙과 설계 프로세스가 적용되지만, 다른 마이크로컨트롤러나 SoC를 사용하려면 실리콘 공급업체나 온라인에서 시작 코드와 도구를 찾아야 합니다.
The code base isn’t exhaustive, but it should serve as a decent starting point for your own projects.
코드 베이스가 완전하지는 않지만 자신의 프로젝트를 위한 적절한 시작점 역할을 해야 합니다.
It allows you to compile your firmware on a variety of platforms (Windows, OS X, or Linux) and provides a basic project structure that should be easy to understand and maintain.
이를 통해 다양한 플랫폼 (Windows, OS X 또는 Linux)에서 펌웨어를 컴파일할 수 있으며 이해하고 유지 관리하기 쉬운 기본 프로젝트 구조를 제공합니다.
The nRF51822 GNU codebase, along with all the other sample code for this book, is hosted in the GitHub repository for this book.
이 책의 다른 모든 샘플 코드와 함께 nRF51822 GNU 코드베이스는 이 책의 GitHub 저장소에서 호스팅됩니다.
It’s worth looking at this repository for the latest code and any additional suggestions on working with the codebase that might have been added after publication of this book.
이 책이 출판된 후 추가되었을 수 있는 코드베이스 작업에 대한 최신 코드와 추가 제안 사항을 보려면 이 저장소를 살펴볼 가치가 있습니다.
Going into exhaustive detail of Nordic’s APIs and BLE stack is beyond the scope of this chapter and deserves a book in itself, but we’ve made a conscious effort to keep the sample code as minimal, clear, precise, and easy to understand as possible.
Nordic의 API와 BLE 스택에 대한 자세한 내용은 이 장의 범위를 벗어나며 책 한 권 분량에 해당하지만, 샘플 코드를 가능한 한 최소한으로, 명확하고, 정확하고, 이해하기 쉽게 유지하기 위해 의식적으로 노력했습니다.
The following sections cover how to set up your PC with everything you need to start working with this codebase, favoring easy-to-install tools to build a simple heart rate monitor project.
다음 섹션에서는 이 코드베이스 작업을 시작하는 데 필요한 모든 것을 PC에 설정하는 방법을 다루며, 간단한 심박수 모니터 프로젝트를 구축하기 위한 설치하기 쉬운 도구를 선호합니다.
Getting the nRF51822 GNU Codebase
nRF51822 GNU 코드베이스 가져오오기
The nRF51822 GNU Codebase is available within the GitHub repository for this book, along with all the other sample code from this book.
nRF51822 GNU 코드베이스는 이 책의 다른 모든 샘플 코드와 함께 이 책의 GitHub 저장소에서 사용할 수 있습니다.
If you are using Linux or OS X, you probably already have Git available on the command line.
Linux 또는 OS X를 사용하고 있다면 이미 명령줄에서 Git을 사용할 수 있을 것입니다.
To get the latest version of the code, go to the root folder of your project and enter the following command:
최신 버전의 코드를 얻으려면 프로젝트의 루트 폴더로 이동하여 다음 명령을 입력하십시오:
If you are on Windows, you can install Git from a precompiled binary (for example, msysgit) and run the previous command.
Windows를 사용하는 경우 미리 컴파일된 바이너리(예: msysgit)에서 Git을 설치하고 이전 명령을 실행할 수 있습니다.
If you prefer to avoid using Git and avoid version control altogether, you can also simply download an archive of the latest code by going to the GitHub repository and clicking Download ZIP.
Git 사용을 피하고 버전 제어도 피하고 싶다면 GitHub 저장소로 이동하여 ZIP 다운로드를 클릭하여 최신 코드 아카이브를 다운로드할 수도 있습니다.
Once you have a local copy of the nRF51822 codebase, you should end up with a file structure resembling Figure 10-3.
nRF51822 코드베이스의 로컬 복사본이 있으면 그림 10-3과 유사한 파일 구조로 끝나야 합니다.
The projects folder contains sample projects.
프로젝트 폴더에는 샘플 프로젝트가 포함되어 있습니다.
For any new project that you create based on this codebase, add a new folder here with a meaningful name describing your project.
이 코드베이스를 기반으로 만드는 새 프로젝트의 경우 프로젝트를 설명하는 의미 있는 이름을 사용하여 여기에 새 폴더를 추가하세요.
To help you get started, we’ve included a sample heart rate monitor project in the hrm folder.
시작하는 데 도움이 되도록 hrm 폴더에 샘플 심박수 모니터 프로젝트를 포함했습니다.
This project implements the standard heart rate service as defined by the Bluetooth SIG.
이 프로젝트는 Bluetooth SIG에서 정의한 표준 심박수 서비스를 구현합니다.
The tools folder gives you a convenient location to store OS-specific tools that you use during development.
도구 폴더는 개발 중에 사용하는 OS별 도구를 저장할 수 있는 편리한 위치를 제공합니다.
Including your tools here ensures that they are added to your version control system and guarantees they’ll be available at any point in the future.
여기에 도구를 포함하면 해당 도구가 버전 제어 시스템에 추가되고 향후 언제든지 사용할 수 있음이 보장됩니다.
You might even want to add the binaries for your GNU toolchain here, to avoid any ambiguity about the version used when building your firmware and make debugging easier months or years down the road.
펌웨어를 구축할 때 사용되는 버전에 대한 모호성을 피하고 몇 달 또는 몇 년 후에 디버깅을 더 쉽게 만들기 위해 여기에 GNU 도구 체인용 바이너리를 추가할 수도 있습니다.
The lib directory should contain the SDK, SoftDevice, and any other propri etary files from Nordic.
lib 디렉터리에는 SDK, SoftDevice 및 Nordic의 기타 고유 etary 파일이 포함되어야 합니다.
You’ll need to download these files from Nordic’s website directly, because licensing issues prohibit us from including them.
라이센스 문제로 인해 해당 파일을 포함할 수 없으므로 Nordic 웹사이트에서 이러한 파일을 직접 다운로드해야 합니다.
In order to download the SDK and an appropriate SoftDevice for the nRF51822 from Nordic Semiconductor’s website you will need to create a MyPages account and register the product key that was printed on the packaging for your nRF51822-EK.
Nordic Semiconductor 웹사이트에서 nRF51822용 SDK와 적절한 SoftDevice를 다운로드하려면 MyPages 계정을 만들고 nRF51822-EK 포장에 인쇄된 제품 키를 등록해야 합니다.
This product key gives you access to all of the resources available for this chipset, so be sure to keep this product key somewhere safe, in case you need to reuse it in the future.
이 제품 키를 사용하면 이 칩셋에 사용 가능한 모든 리소스에 액세스할 수 있으므로 나중에 다시 사용해야 할 경우를 대비하여 이 제품 키를 안전한 곳에 보관하십시오.
After downloading the files, add them to the lib directory with the folder structure shown in Figure 10-4.
파일을 다운로드한 후 그림 10-4와 같은 폴더 구조로 lib 디렉터리에 추가합니다.
Once you’ve updated your project to include these files, you’re ready to compile your first program.
이러한 파일을 포함하도록 프로젝트를 업데이트하면 첫 번째 프로그램을 컴파일할 준비가 된 것입니다.
If you have set up your GNU toolchain properly, including the ARM cross-compiler and any associated tools properly (as described earlier in this chapter), compiling should be as simple as dropping down to the command line, moving into the appropriate project folder (e.g., /projects/hrm), and running the following command:
이 장에서 앞서 설명한 대로 ARM 크로스 컴파일러와 관련 도구를 포함하여 GNU 툴체인을 올바르게 설정했다면, 명령줄로 가서 적절한 프로젝트 폴더 (예: /projects/hrm)로 이동한 후 다음 명령을 실행하기만 하면 컴파일이 매우 간단해집니다:
This will cause the make utility to interpret the makefile, which tells the compiler and toolchain exactly how to convert the source code in your folder into a binary image that can run on the target hardware.
이렇게 하면 make 유틸리티가 makefile을 해석하게 되고, makefile은 컴파일러와 툴체인에게 폴더의 소스 코드를 대상 하드웨어에서 실행 가능한 바이너리 이미지로 변환하는 방법을 정확히 알려줍니다.
make starts the makefile interpreter, clean tells make to remove any previous build artifacts and start any cross-compilation with a clean slate, and release tells make to optimize the code for production situations, removing any unused code and extra debug information.
make는 makefile 인터프리터를 시작하고, clean은 make에게 이전 빌드 아티팩트를 제거하고 깨끗한 상태에서 크로스 컴파일을 시작하라고 지시하며, release는 make에게 프로덕션 상황에 맞게 코드를 최적화하고 사용되지 않는 코드와 추가 디버그 정보를 제거하라고 지시합니다.
If this were a debug build, you could alternatively enter make clean debug, though this would produce larger executable code, because the binary data includes more debug information and unused code generally isn’t removed.
디버그 빌드인 경우, 대신 make clean debug를 입력할 수 있습니다. 하지만 이렇게 하면 더 큰 실행 가능 코드가 생성됩니다. 바이너리 데이터에 더 많은 디버그 정보가 포함되어 있고 일반적으로 사용되지 않는 코드는 제거되지 않기 때문입니다.
If everything was set up correctly, your command-line results should look similar to Figure 10-5.
모든 것이 올바르게 설정되었다면 명령줄 결과는 그림 10-5와 유사해야 합니다.
This indicates that all of the .c files have been converted to object code (files with a .o extension), all of this object code has been assembled, and the linker has merged all of this data into a single file (ble_hrm_s110_xxaa.out in this case).
이는 모든 .c 파일이 객체 코드 (확장자가 .o인 파일)로 변환되었고, 이 모든 객체 코드가 어셈블되었으며, 링커가 이 모든 데이터를 단일 파일 (이 경우 ble_hrm_s110_xxaa.out)로 병합했음을 나타냅니다.
The following values are sizes (in bytes) that represent how much space the code took once compiled, assembled, and linked:
다음 값은 코드가 컴파일, 어셈블 및 링크된 후 차지하는 공간을 나타내는 크기 (바이트) 입니다.
text - The amount of data that ended up in flash memory, which consists of executable instructions and read-only data.
text - 실행 가능한 명령어와 읽기 전용 데이터로 구성된 플래시 메모리에 저장되는 데이터의 양입니다.
Everything in this section will be written to flash memory.
이 섹션의 모든 내용은 플래시 메모리에 기록됩니다.
The amount of space used by initialized data, which are variables that have a specific value assigned to them at startup (for example, int16_t i = 1023, which is initialized to a specific value).
초기화된 데이터가 사용하는 공간의 양은 시작 시 특정 값이 할당된 변수입니다 (예: 특정 값으로 초기화되는 int16_t i = 1023).
Everything in this section will be stored in flash and then copied to SRAM, which is usually a precious resource on most small microcontrollers.
이 섹션의 모든 내용은 플래시에 저장된 다음 일반적으로 대부분의 소형 마이크로 컨트롤러에서 귀중한 리소스인 SRAM에 복사됩니다.
The amount of space used by uninitialized data, which are variables that don’t have a value assigned to them (for example, int16_t i, which has no value assigned to it).
값이 할당되지 않은 변수인 초기화되지 않은 데이터 (예: 값이 할당되지 않은 int16_t i)가 사용하는 공간의 양입니다.
Everything in this section will be allocated in SRAM.
이 섹션의 모든 내용은 SRAM에 할당됩니다.
dec - The size of all data combined, including both flash and SRAM data.
dec - 플래시 및 SRAM 데이터를 모두 포함하여 결합된 모든 데이터의 크기입니다.
The last two lines are the output from a helpful tool called arm-none-eabi-objcopy, which converts the .out file into other file formats that third-party tools might find easier to work with, including Intel Hex, which is a common file format when working with embedded systems.
마지막 두 줄은 arm-none-eabi-objcopy라는 유용한 도구의 출력으로, .out 파일을 타사 도구에서 작업하기 쉬운 다른 파일 형식으로 변환합니다. 여기에는 임베디드 시스템에서 작업할 때 일반적으로 사용되는 파일 형식인 Intel Hex가 포함됩니다.
Writing to the nRF51822
nRF51822에 쓰기
To write your program code to the non-volatile memory on the development board in the nRF51822-EK, you can use Nordic’s nRFGo Studio utility, which is available on the same MyPages section of Nordic’s website where you downloaded the SDK and SoftDevice (in “nR51822 GNU Codebase Structure” on page 150).
nRF51822-EK의 개발 보드에 있는 비휘발성 메모리에 프로그램 코드를 쓰려면 Nordic의 nRFGo Studio 유틸리티를 사용할 수 있습니다. 이 유틸리티는 SDK와 SoftDevice를 다운로드한 Nordic 웹사이트의 MyPages 섹션에서 사용할 수 있습니다 (150페이지의 "nR51822 GNU 코드베이스 구조" 참조).
nRFGoStudio is currently a Windows-only tool, but Roland King has created an OS X alternative called rknrfgo.
nRFGoStudio는 현재 Windows 전용 도구이지만 Roland King은 rknrfgo라는 OS X 대안을 만들었습니다.
This unofficial application implements a subset of the functionality provided by nRFGo Studio, allowing you to program the flash memory on the nRF51822 using an easy-to-use GUI.
이 비공식 애플리케이션은 nRFGo Studio에서 제공하는 기능의 하위 집합을 구현하여 사용하기 쉬운 GUI를 사용하여 nRF51822의 플래시 메모리를 프로그래밍할 수 있습니다.
You can also program the flash memory on the nRF51822 directly from the command-line on Windows, OS X, or Linux using Segger’s J-Link drivers and the associated tools.
Segger의 J-Link 드라이버 및 관련 도구를 사용하여 Windows, OS X 또는 Linux의 명령줄에서 직접 nRF51822의 플래시 메모리를 프로그래밍할 수도 있습니다.
Documentation and examples of how to work with the J-Link are available on Segger’s website.
J-Link 작업 방법에 대한 문서 및 예는 Segger 웹사이트에서 확인할 수 있습니다.
If this is the first time that you are using your development board, you will need to write the SoftDevice .hex file to flash first.
개발 보드를 처음 사용하는 경우 먼저 플래시할 SoftDevice .hex 파일을 작성해야 합니다.
This writes Nordic’s BLE stack to the lower half of flash memory on the device.
이는 Nordic의 BLE 스택을 장치의 플래시 메모리 하위 절반에 씁니다.
To do this, find the .hex file for your SoftDevice (which was downloaded from Nordic’s website as part of the SoftDevice package) and select it in the Program SoftDevice tab of nRFGoStudio, as shown in Figure 10-6.
이렇게 하려면 SoftDevice의 .hex 파일을 찾고 (Nordic 웹사이트에서 SoftDevice 패키지의 일부로 다운로드) 그림 10-6과 같이 nRFGoStudio의 Program SoftDevice 탭에서 선택합니다.
The SoftDevice generally needs to be written only once, unless you want to update to a different version.
SoftDevice는 다른 버전으로 업데이트하려는 경우가 아니면 일반적으로 한 번만 작성하면 됩니다.
The user code will need to be updated every time you make a change to your program, but this user code usually won’t affect the SoftDevice, because they are stored in separate regions of flash.
사용자 코드는 프로그램을 변경할 때마다 업데이트해야 하지만 이 사용자 코드는 별도의 플래시 영역에 저장되기 때문에 일반적으로 SoftDevice에 영향을 주지 않습니다.
Once the SoftDevice has been written, you can write your custom application code to the top half of memory, using the .hex file generated previously and the same nRFGo Studio tool, switching to the Program Application tab shown in Figure 10-7.
SoftDevice가 작성되면 이전에 생성한 .hex 파일과 동일한 nRFGo Studio 도구를 사용하여 메모리 상단 절반에 사용자 지정 애플리케이션 코드를 작성할 수 있으며 그림 10-7에 표시된 프로그램 애플리케이션 탭으로 전환합니다.
At this point, your application code has been written to the nRF51822 SoC and should start executing automatically.
이 시점에서 애플리케이션 코드가 nRF51822 SoC에 작성되었으며 자동으로 실행되기 시작해야 합니다.
The application code will be able to make calls to the low-level SoftDevice for any BLE-specific functionality, and if everything is running properly, you should see LED0 on the PCA10001 development board blinking.
애플리케이션 코드는 BLE 관련 기능을 위해 하위 수준 SoftDevice를 호출할 수 있으며 모든 것이 제대로 실행되면 PCA10001 개발 보드의 LED0이 깜박이는 것을 볼 수 있습니다.
You can test the code you compiled by running an application on a BLE-enabled phone or tablet.
BLE 지원 휴대폰이나 태블릿에서 애플리케이션을 실행하여 컴파일한 코드를 테스트할 수 있습니다.
First, download Nordic’s nRF Utility from Apple’s App Store or Google Play.
먼저, Apple App Store나 Google Play에서 Nordic의 nRF Utility를 다운로드하세요.
After installing the app, simply select HRM from the main menu and click Connect, which should show something similar to Figure 10-8.
앱을 설치한 후 기본 메뉴에서 HRM을 선택하고 연결을 클릭하면 그림 10-8과 비슷한 내용이 표시됩니다.
Using Nordic’s nRF Utility to visualize heart rate monitor data
Nordic의 nRF Utility를 사용하여 심박수 모니터 데이터 시각화
If you want to have a different look at exactly what your nRF51822 and application code are transmitting over the air, or if something doesn’t look quite right to you, you can also try using any of the debug tools discussed in Chapter 6.
nRF51822와 애플리케이션 코드가 무선으로 전송하는 내용을 정확히 다르게 보고 싶거나 무언가 이상해 보이는 경우 6장에서 설명한 디버그 도구를 사용해 볼 수도 있습니다.