

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Renesas RX65N에서 FreeRTOS OTA 데모를 다운로드, 빌드, 플래시, 실행합니다.
<a name="download-rx65n-ota"></a>

**중요**  <a name="deprecation-message"></a>
이 라이브러리는 더 이상 사용되지 않는 Amazon-FreeRTOS 리포지토리에서 호스팅됩니다. 새 프로젝트를 생성할 때는 [여기서 시작](freertos-getting-started-modular.md)하는 것이 좋습니다. 현재 사용되지 않는 Amazon-FreeRTOS 리포지토리를 기반으로 하는 기존 FreeRTOS 프로젝트가 이미 있는 경우에는 [Amazon-FreeRTOS Github 리포지토리 마이그레이션 가이드](github-repo-migration.md) 섹션을 참조하세요.

이 장에서는 Renesas RX65N에서 FreeRTOS OTA 데모 애플리케이션을 다운로드, 빌드, 플래시, 실행하는 방법을 보여줍니다.

**Topics**
+ [운영 환경 설정](#download-rx65n-ota-environment)
+ [AWS 리소스 설정](#download-rx65n-ota-setup)
+ [헤더 파일을 가져오고 구성하고 aws\$1demos 및 boot\$1loader를 빌드합니다.](#download-rx65n-ota-import-configure)

## 운영 환경 설정
<a name="download-rx65n-ota-environment"></a>

이 섹션의 절차에서는 다음 환경을 사용합니다.
+ **IDE**: e2 studio 7.8.0, e2 studio 2020-07
+ **도구 체인**: CCRX Compiler v3.0.1
+ **대상 디바이스**: RSKRX65N-2MB
+ **디버거**: E2, E2 Lite 에뮬레이터
+ **소프트웨어**: Renesas Flash Programmer, Renesas 보안 플래시 프로그래머.exe, Tera Term

**하드웨어를 설정하려면**

1. E2 Lite 에뮬레이터 및 USB 직렬 포트를 RX65N 보드 및 PC에 연결합니다.

1. 전원을 RX65N에 연결합니다.

## AWS 리소스 설정
<a name="download-rx65n-ota-setup"></a>

1. FreeRTOS 데모를 실행하려면 AWS IoT 서비스에 액세스할 권한이 있는 IAM 사용자가 있는 AWS 계정이 있어야 합니다. 아직 [AWS계정 및 권한 설정](freertos-prereqs.md#freertos-account-and-permissions)의 단계를 완료하지 않았다면 지금 수행합니다.

1. OTA 업데이트를 설정하려면 [OTA 업데이트 사전 조건](ota-prereqs.md)의 단계를 따릅니다. 특히 [MQTT를 사용한 OTA 업데이트 사전 조건](ota-mqtt-freertos.md)의 단계를 따르십시오.

1. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/home)을 엽니다.

1. 왼쪽 탐색 창에서 **관리**를 선택한 후 **사물**을 선택하여 사물을 하나 생성합니다.

    AWS IoT에서 사물이란 특정 디바이스 또는 논리적 엔터티의 표현입니다. 사물은 물리적 장치 또는 센서일 수 있습니다(예: 전구 또는 벽면 스위치). 또한 애플리케이션의 인스턴스와 같은 논리적 엔터티이거나에 연결되지 AWS IoT는 않지만에 연결된 디바이스(예: 엔진 센서 또는 제어판이 있는 자동차)와 관련된 물리적 엔터티일 수도 있습니다.는 사물을 관리하는 데 도움이 되는 사물 레지스트리를 AWS IoT 제공합니다.

   1. **생성**을 선택하고 **단일 사물 생성**을 선택합니다.

   1. 사물의 **이름**을 입력하고 **다음**을 선택합니다.

   1. [**Create certificate**]를 선택합니다.

   1. 생성된 세 개의 파일을 다운로드한 다음 **활성화**를 선택합니다.

   1. **정책 연결**을 선택합니다.  
![\[다운로드할 파일이 표시된 콘솔 화면\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/download-these-files-rx65n.png)

   1. [디바이스 정책](ota-mqtt-freertos.md#ota-mqtt-freertos-device-policy)에서 생성한 정책을 선택합니다.

      MQTT를 사용하여 OTA 업데이트를 수신하는 각 디바이스는에 사물로 등록해야 하며 AWS IoT 사물에는 나열된 것과 같은 연결된 정책이 있어야 합니다. `"Action"` 및 `"Resource"` 객체의 항목에 대한 자세한 내용은 [AWS IoT 핵심 정책 작업](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html) 및 [AWS IoT 핵심 작업 리소스](https://docs.aws.amazon.com/iot/latest/developerguide/iot-action-resources.html)에서 확인할 수 있습니다.

**참고**
      + `iot:Connect` 권한을 통해 디바이스는 MQTT를 AWS IoT 통해에 연결할 수 있습니다.
      +  AWS IoT 작업(`.../jobs/*`) 항목에 대한 `iot:Subscribe` 및 `iot:Publish` 권한을 사용하면 연결된 디바이스에서 작업 알림과 작업 문서를 수신하고 작업 실행 완료 상태를 게시할 수 있습니다.
      +  AWS IoT OTA 스트림(`.../streams/*`) 주제에 대한 `iot:Subscribe` 및 `iot:Publish` 권한을 통해 연결된 디바이스는 OTA 업데이트 데이터를 가져올 수 있습니다 AWS IoT. MQTT를 통해 펌웨어 업데이트를 수행하려면 이러한 권한이 필요합니다.
      + `iot:Receive` 권한을 통해 AWS IoT Core 는 연결된 디바이스에 해당 주제에 대한 메시지를 게시할 수 있습니다. MQTT 메시지를 전송할 때마다 이 권한을 확인합니다. 이 권한을 사용하면 주제를 현재 구독 중인 클라이언트에 대한 액세스 권한을 취소할 수 있습니다.

1. 코드 서명 프로필을 생성하고 코드 서명 인증서를 등록하려면 AWS

   1. 키와 인증을 생성하려면 [Renesas MCU 펌웨어 업데이트 디자인 정책](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy)의 섹션 7.3 "OpenSSL을 이용하여 ECDSA-SHA256 키 페어 생성"을 참조하세요.

   1. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/home)을 엽니다. 왼쪽 탐색 창에서 **관리**를 선택하고 **작업**을 선택합니다. **작업 생성**을 선택하고 **OTA 업데이트 작업 생성**을 선택합니다.

   1. **업데이트할 디바이스 선택**에서 **선택**을 선택하고 이전에 생성한 사물을 선택합니다. **다음**을 선택합니다.

   1. **FreeRTOS OTA 업데이트 작업 생성** 페이지에서 다음을 수행합니다.

      1. **펌웨어 이미지 전송을 위한 프로토콜 선택**에서 **MQTT**를 선택합니다.

      1. **펌웨어 이미지 선택 및 서명**에서 **나를 위해 새 펌웨어 이미지에 서명**을 선택합니다.

      1. **코드 서명 프로필**에서 **생성**을 선택합니다.

      1. **코드 서명 프로필 생성** 창에서 **프로필 이름**을 입력합니다. **디바이스 하드웨어 플랫폼**에서 **Windows 시뮬레이터**를 선택합니다. **코드 서명 인증서**에서 **가져오기**를 선택합니다.

      1. 인증서(`secp256r1.crt`), 인증서 프라이빗 키(`secp256r1.key`) 및 인증서 체인(`ca.crt`)을 찾아 선택합니다.

      1. **디바이스에 있는 코드 서명 인증서의 경로 이름**을 입력합니다. 그런 다음 **생성**을 선택합니다.

1. 에 대한 코드 서명에 대한 액세스 권한을 부여하려면의 단계를 AWS IoT따릅니다[에 대한 코드 서명에 대한 액세스 권한 부여 AWS IoT](code-sign-policy.md).

PC에 Tera Term이 설치되어 있지 않은 경우 [https://ttssh2.osdn.jp/index.html.en](https://ttssh2.osdn.jp/index.html.en)에서 다운로드하여 여기에 표시된 대로 설정할 수 있습니다. 디바이스의 USB 직렬 포트를 PC에 연결했는지 확인하세요.

![\[Tera Term 직렬 포트 설정 창\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/tera-team-rx65n.png)


## 헤더 파일을 가져오고 구성하고 aws\$1demos 및 boot\$1loader를 빌드합니다.
<a name="download-rx65n-ota-import-configure"></a>

시작하려면 최신 버전의 FreeRTOS 패키지를 선택합니다. 그러면 이 패키지가 GitHub에서 다운로드되고 자동으로 프로젝트로 가져와집니다. 그러므로 FreeRTOS 구성과 애플리케이션 코드 작성에 집중할 수 있습니다.

1. e2 studio 시작.

1. **파일**을 선택하고 **가져오기…**를 선택합니다.

1. **Renesas GitHub FreeRTOS(IoT 라이브러리 포함) 프로젝트**를 선택합니다.  
![\[e-squared studio 가져오기 창\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/import-renesas-project-rx65n.png)

1. **추가 버전 확인...**을 선택하여 다운로드 대화 상자를 표시합니다.  
![\[e-squared studio 다운로드 대화 창\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/check-more-version-rx65n.png)

1. 최신 패키지를 선택합니다.  
![\[e-squared studio 모듈 다운로드 대화 창\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/choose-latest-version-rx65n.png)

1. **동의**를 선택하여 최종 사용자 사용권 계약을 수락합니다.  
![\[e-squared studio EULA 대화 창\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/eula-rx65n.png)

1. 다운로드가 완료될 때까지 기다립니다.  
![\[다운로드 진행률 표시줄\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/downloading-rx65n.png)

1. **aws\$1demos** 및 **boot\$1loader** 프로젝트를 선택한 다음 **마침**을 선택하여 프로젝트를 가져옵니다.  
![\[프로젝트 가져오기 창\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/import-projects-rx65n.png)

1. 두 프로젝트 모두 프로젝트 속성을 엽니다. 탐색 창에서 **도구 체인 편집기**를 선택합니다.

   1. **현재 도구 체인**을 선택합니다.

   1. **현재 빌더**를 선택합니다.  
![\[e-squared studio 속성 창\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/project-properties-rx65n.png)

1. 탐색 창에서 **설정**을 선택합니다. **도구 체인** 탭을 선택하고 **버전**을 선택합니다.  
![\[Renesas CCRX 버전 v3.01.00에 대한 도구 체인 통합 설정과 도구 체인을 변경할 수 있는 옵션.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/project-properties-toolchain-rx65n.png)

   **도구 설정** 탭을 선택하고 **변환기**를 확장한 다음 **출력**을 선택합니다. 기본 창에서 **출력 16진수 파일**이 선택되어 있는지 확인한 다음 **출력 파일 유형**을 선택합니다.  
![\[출력 16진수 파일, 출력 파일 유형, 출력 디렉터리 및 파일 분할 옵션과 같은 컴파일러 및 링커 옵션을 보여주는 C/C++ 빌드 구성 설정 창입니다.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/project-properties-settings-rx65n.png)  
![\[스택 분석, 도구 체인 편집기, C/C++ 일반, MCU, 프로젝트 참조 등의 옵션이 포함된 인터페이스 설정 트리\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/project-properties-settings-2-rx65n.png)

1. 부트 로더 프로젝트에서 `projects\renesas\rx65n-rsk\e2studio\boot_loader\src\key\code_signer_public_key.h`를 열고 퍼블릭 키를 입력합니다. 퍼블릭 키를 생성하는 방법에 대한 자세한 내용은 [RX65N에서 Amazon 웹 서비스를 사용하여 FreeRTOS OTA를 구현하는 방법](https://www.renesas.com/us/en/document/apn/rx-family-how-implement-freertos-ota-using-amazon-web-services-rx65n) 및 [Renesas MCU 펌웨어 업데이트 디자인 정책](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy) 섹션 7.3 "OpenSSL을 사용하여 ECDSA-SHA256 키 페어 생성하기"를 참조하세요.  
![\[CODE_SIGNER_PUBLIC_KEY에 대한 정의가 있는 C 헤더 파일과 PEM 인코딩 코드 서명자 퍼블릭 키 변수를 보여주는 Code Editor입니다.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/open-bootloader-project-rx65n.png)

   그런 다음 프로젝트를 빌드하여 `boot_loader.mot`를 생성합니다.

1. `aws_demos` 프로젝트를 엽니다.

   1. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/home)을 엽니다.

   1. 왼쪽 탐색 창에서 **설정**을 선택합니다. **디바이스 데이터 엔드포인트** 텍스트 상자에서 사용자 지정 엔드포인트를 기록해 둡니다.

   1. **관리**를 선택하고 **사물**을 선택합니다. 보드의 AWS IoT 사물 이름을 기록해 둡니다.

   1. `aws_demos` 프로젝트에서 `demos/include/aws_clientcredential.h`를 열고 다음 값을 지정합니다.

      ```
      #define clientcredentialMQTT_BROKER_ENDPOINT[] = "Your AWS IoT endpoint";
      #define clientcredentialIOT_THING_NAME "The AWS IoT thing name of your board"
      ```  
![\[AWS IoT 사물 이름 및 브로커 엔드포인트 구성 설정을 보여주는 코드 조각입니다.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/client-credential-rx65n.png)

   1. `tools/certificate_configuration/CertificateConfigurator.html` 파일을 엽니다.

   1. 이전에 다운로드한 인증서 PEM 파일과 프라이빗 키 PEM 파일을 가져옵니다.

   1. **aws\$1clientcredential\$1keys.h 생성 및 저장**을 선택하고 `demos/include/` 디렉터리에서 이 파일로 바꿉니다.  
![\[AWS IoT 콘솔에서 클라이언트 인증서와 프라이빗 키 PEM 파일을 제공하는 필드와 aws_clientcredential_keys.h 파일을 생성하고 저장하는 버튼이 있는 인증서 구성 도구입니다.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/certificate-config-tool-rx65n.png)

   1. `vendors/renesas/boards/rx65n-rsk/aws_demos/config_files/ota_demo_config.h` 파일을 열고 다음 값을 지정합니다.

      ```
      #define otapalconfigCODE_SIGNING_CERTIFICATE [] = "your-certificate-key";
      ```

      여기서 *your-certificate-key*는 `secp256r1.crt` 파일의 값입니다. 인증서의 각 줄 뒤에 ‘\$1’를 추가해야 합니다. `secp256r1.crt` 파일을 생성하는 방법에 대한 자세한 내용은 [RX65N에서 Amazon 웹 서비스를 사용하여 FreeRTOS OTA를 구현하는 방법](https://www.renesas.com/us/en/document/apn/rx-family-how-implement-freertos-ota-using-amazon-web-services-rx65n) 및 [Renesas MCU 펌웨어 업데이트 디자인 정책](https://www.renesas.com/us/en/document/apn/renesas-mcu-firmware-update-design-policy) 섹션 7.3 "OpenSSL을 사용하여 ECDSA-SHA256 키 페어 생성하기"를 참조하세요.  
![\[수정된 인증서 데이터가 있는 PEM 인코딩 코드 서명자 인증서 상수 문자열을 정의하는 C 코드를 보여주는 소스 코드 파일입니다.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/codesigner-cert-rx65n.png)

1. **작업 A: 펌웨어의 초기 버전 설치**

   1. `vendors/renesas/boards/board/aws_demos/config_files/aws_demo_config.h` 파일을 열고 `#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED`를 주석으로 처리한 다음 `CONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED` 또는 `CONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED`를 정의합니다.

   1. `demos/include/ aws_application_version.h` 파일을 열고 펌웨어의 초기 버전을 `0.9.2`로 설정합니다.  
![\[메이저, 마이너 및 빌드 버전 번호에 대한 매크로를 포함하여 애플리케이션의 버전 정의를 보여주는 코드 조각입니다.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/firmware-version-rx65n.png)

   1. **섹션 뷰어**에서 다음 설정을 변경합니다.  
![\[메모리 주소, SU, SI, 레지스터와 같은 섹션 이름, 네트워크 버퍼, 예외 및 작업 버튼과 같은 인터페이스 구성 요소를 보여주는 섹션 뷰어 창입니다.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/section-viewer-rx65n.png)

   1. **빌드**를 선택하여 `aws_demos.mot` 파일을 생성합니다.

1. Renesas 보안 플래시 프로그래머를 사용하여 `userprog.mot` 파일을 생성합니다. `userprog.mot`는 `aws_demos.mot` 및 `boot_loader.mot`의 조합입니다. 이 파일을 RX65N-RSK로 플래시하여 초기 펌웨어를 설치할 수 있습니다.

   1. [https://github.com/renesas/Amazon-FreeRTOS-Tools](https://github.com/renesas/Amazon-FreeRTOS-Tools)를 다운로드하고 `Renesas Secure Flash Programmer.exe`를 엽니다.

   1. **초기 펌웨어** 탭을 선택한 후 다음 파라미터를 설정합니다.
      + **프라이빗 키 경로** - `secp256r1.privatekey`의 위치입니다.
      + **부트 로더 파일 경로** - `boot_loader.mot`(`projects\renesas\rx65n-rsk\e2studio\boot_loader\HardwareDebug`)의 위치입니다.
      + **파일 경로** - `aws_demos.mot`(`projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug`)의 위치입니다.  
![\[MCU, 펌웨어 확인, 시퀀스 번호, AES 키 경로 및 파일 경로 필드가 있는 보안 플래시 프로그래머 창을 Renesas합니다.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/secure-flash-rx65n.png)

   1. `init_firmware`라는 이름의 디렉터리를 생성합니다. `userprog.mot`를 생성하여 `init_firmware` 디렉터리에 저장합니다. 생성이 성공했는지 확인합니다.

1. RX65N-RSK에서 초기 펌웨어를 플래시합니다.

   1. [https://www.renesas.com/tw/en/products/software-tools/tools/programmer/renesas-flash-programmer-programming-gui.html](https://www.renesas.com/tw/en/products/software-tools/tools/programmer/renesas-flash-programmer-programming-gui.html)에서 최신 버전의 Renesas 플래시 프로그래머(프로그래밍 GUI)를 다운로드합니다.

   1. `vendors\renesas\rx_mcu_boards\boards\rx65n-rsk\aws_demos\flash_project\erase_from_bank\ erase.rpj` 파일을 열어 뱅크에 있는 데이터를 지웁니다.

   1. **시작**을 선택하여 뱅크를 지웁니다.  
![\[RX 그룹 마이크로컨트롤러 프로젝트 세부 정보, 파일 경로, 지우기, 프로그램, 시작 및 확인 버튼을 사용한 확인과 같은 플래시 작업 옵션을 보여주는 Renesas 플래시 프로그래머 창입니다.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/flash-programmer-erasing-rx65n.png)

   1. `userprog.mot`를 플래시하려면 **찾아보기…**를 선택하고 `init_firmware` 디렉터리로 이동한 다음, `userprog.mot` 파일을 선택하고 **시작**을 선택합니다.  
![\[마이크로컨트롤러 RX 그룹, 프로그램 파일을 탐색하는 옵션, 지우기 및 시작 버튼, 삭제할 선택한 블록의 상태 세부 정보를 포함한 지우기 작업 설정을 보여주는 Renesas 플래시 프로그래머 창입니다.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/flash-programmer-complete-rx65n.png)

1. RX65N-RSK에 펌웨어 버전 0.9.2(초기 버전)가 설치되었습니다. 이제 RX65N-RSK 보드에서 OTA 업데이트를 수신합니다. PC에서 Tera Term을 연 경우 초기 펌웨어가 실행될 때 다음과 같은 내용이 표시됩니다.

   ```
   -------------------------------------------------
   RX65N secure boot program
   -------------------------------------------------
   Checking flash ROM status.
   bank 0 status = 0xff [LIFECYCLE_STATE_BLANK]
   bank 1 status = 0xfc [LIFECYCLE_STATE_INSTALLING]
   bank info = 1. (start bank = 0)
   start installing user program.
   copy secure boot (part1) from bank0 to bank1...OK
   copy secure boot (part2) from bank0 to bank1...OK
   update LIFECYCLE_STATE from [LIFECYCLE_STATE_INSTALLING] to [LIFECYCLE_STATE_VALID]
   bank1(temporary area) block0 erase (to update LIFECYCLE_STATE)...OK
   bank1(temporary area) block0 write (to update LIFECYCLE_STATE)...OK
   swap bank...
   -------------------------------------------------
   RX65N secure boot program
   -------------------------------------------------
   Checking flash ROM status.
   bank 0 status = 0xf8 [LIFECYCLE_STATE_VALID]
   bank 1 status = 0xff [LIFECYCLE_STATE_BLANK]
   bank info = 0. (start bank = 1)
   integrity check scheme = sig-sha256-ecdsa
   bank0(execute area) on code flash integrity check...OK
   jump to user program
   0 1 [ETHER_RECEI] Deferred Interrupt Handler Task started
   1 1 [ETHER_RECEI] Network buffers: 3 lowest 3
   2 1 [ETHER_RECEI] Heap: current 234192 lowest 234192
   3 1 [ETHER_RECEI] Queue space: lowest 8
   4 1 [IP-task] InitializeNetwork returns OK
   5 1 [IP-task] xNetworkInterfaceInitialise returns 0
   6 101 [ETHER_RECEI] Heap: current 234592 lowest 233392
   7 2102 [ETHER_RECEI] prvEMACHandlerTask: PHY LS now 1
   8 3001 [IP-task] xNetworkInterfaceInitialise returns 1
   9 3092 [ETHER_RECEI] Network buffers: 2 lowest 2
   10 3092 [ETHER_RECEI] Queue space: lowest 7
   11 3092 [ETHER_RECEI] Heap: current 233320 lowest 233320
   12 3193 [ETHER_RECEI] Heap: current 233816 lowest 233120
   13 3593 [IP-task] vDHCPProcess: offer c0a80a09ip
   14 3597 [ETHER_RECEI] Heap: current 233200 lowest 233000
   15 3597 [IP-task] vDHCPProcess: offer c0a80a09ip
   16 3597 [IP-task] IP Address: 192.168.10.9
   17 3597 [IP-task] Subnet Mask: 255.255.255.0
   18 3597 [IP-task] Gateway Address: 192.168.10.1
   19 3597 [IP-task] DNS Server Address: 192.168.10.1
   20 3600 [Tmr Svc] The network is up and running
   21 3622 [Tmr Svc] Write certificate...
   22 3697 [ETHER_RECEI] Heap: current 232320 lowest 230904
   23 4497 [ETHER_RECEI] Heap: current 226344 lowest 225944
   24 5317 [iot_thread] [INFO ][DEMO][5317] ---------STARTING DEMO---------
   
   25 5317 [iot_thread] [INFO ][INIT][5317] SDK successfully initialized.
   26 5317 [iot_thread] [INFO ][DEMO][5317] Successfully initialized the demo. Network type for the demo: 4
   27 5317 [iot_thread] [INFO ][MQTT][5317] MQTT library successfully initialized.
   28 5317 [iot_thread] [INFO ][DEMO][5317] OTA demo version 0.9.2
   
   29 5317 [iot_thread] [INFO ][DEMO][5317] Connecting to broker...
   
   30 5317 [iot_thread] [INFO ][DEMO][5317] MQTT demo client identifier is rx65n-gr-rose (length 13).
   31 5325 [ETHER_RECEI] Heap: current 206944 lowest 206504
   32 5325 [ETHER_RECEI] Heap: current 206440 lowest 206440
   33 5325 [ETHER_RECEI] Heap: current 206240 lowest 206240
   38 5334 [ETHER_RECEI] Heap: current 190288 lowest 190288
   39 5334 [ETHER_RECEI] Heap: current 190088 lowest 190088
   40 5361 [ETHER_RECEI] Heap: current 158512 lowest 158168
   41 5363 [ETHER_RECEI] Heap: current 158032 lowest 158032
   42 5364 [ETHER_RECEI] Network buffers: 1 lowest 1
   43 5364 [ETHER_RECEI] Heap: current 156856 lowest 156856
   44 5364 [ETHER_RECEI] Heap: current 156656 lowest 156656
   46 5374 [ETHER_RECEI] Heap: current 153016 lowest 152040
   47 5492 [ETHER_RECEI] Heap: current 141464 lowest 139016
   48 5751 [ETHER_RECEI] Heap: current 140160 lowest 138680
   49 5917 [ETHER_RECEI] Heap: current 138280 lowest 138168
   59 7361 [iot_thread] [INFO ][MQTT][7361] Establishing new MQTT connection.
   62 7428 [iot_thread] [INFO ][MQTT][7428] (MQTT connection 81cfc8, CONNECT operation 81d0e8) Wait complete with result SUCCESS.
   63 7428 [iot_thread] [INFO ][MQTT][7428] New MQTT connection 4e8c established.
   64 7430 [iot_thread] [OTA_AgentInit_internal] OTA Task is Ready.
   65 7430 [OTA Agent T] [prvOTAAgentTask] Called handler. Current State [Ready] Event [Start] New state [RequestingJob]
   66 7431 [OTA Agent T] [INFO ][MQTT][7431] (MQTT connection 81cfc8) SUBSCRIBE operation scheduled.
   67 7431 [OTA Agent T] [INFO ][MQTT][7431] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Waiting for operation completion.
   68 7436 [ETHER_RECEI] Heap: current 128248 lowest 127992
   69 7480 [OTA Agent T] [INFO ][MQTT][7480] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Wait complete with result SUCCESS.
   70 7480 [OTA Agent T] [prvSubscribeToJobNotificationTopics] OK: $aws/things/rx65n-gr-rose/jobs/$next/get/accepted
   71 7481 [OTA Agent T] [INFO ][MQTT][7481] (MQTT connection 81cfc8) SUBSCRIBE operation scheduled.
   72 7481 [OTA Agent T] [INFO ][MQTT][7481] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Waiting for operation completion.
   73 7530 [OTA Agent T] [INFO ][MQTT][7530] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Wait complete with result SUCCESS.
   74 7530 [OTA Agent T] [prvSubscribeToJobNotificationTopics] OK: $aws/things/rx65n-gr-rose/jobs/notify-next
   75 7530 [OTA Agent T] [prvRequestJob_Mqtt] Request #0
   76 7532 [OTA Agent T] [INFO ][MQTT][7532] (MQTT connection 81cfc8) MQTT PUBLISH operation queued.
   77 7532 [OTA Agent T] [INFO ][MQTT][7532] (MQTT connection 81cfc8, PUBLISH operation 818b80) Waiting for operation completion.
   78 7552 [OTA Agent T] [INFO ][MQTT][7552] (MQTT connection 81cfc8, PUBLISH operation 818b80) Wait complete with result SUCCESS.
   79 7552 [OTA Agent T] [prvOTAAgentTask] Called handler. Current State [RequestingJob] Event [RequestJobDocument] New state [WaitingForJob]
   80 7552 [OTA Agent T] [prvParseJSONbyModel] Extracted parameter [ clientToken: 0:rx65n-gr-rose ]
   81 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: execution
   82 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: jobId
   83 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: jobDocument
   84 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: afr_ota
   85 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: protocols
   86 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: files
   87 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: filepath
   99 7651 [ETHER_RECEI] Heap: current 129720 lowest 127304
   100 8430 [iot_thread] [INFO ][DEMO][8430] State: Ready  Received: 1   Queued: 0   Processed: 0   Dropped: 0
   101 9430 [iot_thread] [INFO ][DEMO][9430] State: WaitingForJob  Received: 1   Queued: 0   Processed: 0   Dropped: 0
   102 10430 [iot_thread] [INFO ][DEMO][10430] State: WaitingForJob  Received: 1   Queued: 0   Processed: 0   Dropped: 0
   103 11430 [iot_thread] [INFO ][DEMO][11430] State: WaitingForJob  Received: 1   Queued: 0   Processed: 0   Dropped: 0
   104 12430 [iot_thread] [INFO ][DEMO][12430] State: WaitingForJob  Received: 1   Queued: 0   Processed: 0   Dropped: 0
   105 13430 [iot_thread] [INFO ][DEMO][13430] State: WaitingForJob  Received: 1   Queued: 0   Processed: 0   Dropped: 0
   106 14430 [iot_thread] [INFO ][DEMO][14430] State: WaitingForJob  Received: 1   Queued: 0   Processed: 0   Dropped: 0
   107 15430 [iot_thread] [INFO ][DEMO][15430] State: WaitingForJob  Received: 1   Queued: 0   Processed: 0   Dropped: 0
   ```

1. **작업 B: 펌웨어 버전 업데이트**

   1. `demos/include/aws_application_version.h` 파일을 열고 `APP_VERSION_BUILD` 토큰 값을 `0.9.3`으로 높입니다.

   1. 프로젝트를 다시 빌드합니다.

1. Renesas 보안 플래시 프로그래머로 `userprog.rsu` 파일을 생성하여 펌웨어의 버전을 업데이트합니다.

   1. `Amazon-FreeRTOS-Tools\Renesas Secure Flash Programmer.exe` 파일을 엽니다.

   1. **펌웨어 업데이트** 탭을 선택한 후 다음 파라미터를 설정합니다.
      + **파일 경로** - `aws_demos.mot` 파일(`projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug`)의 위치입니다.

   1. `update _firmware`이라는 디렉터리를 생성합니다. `userprog.rsu`를 생성하여 `update_firmware` 디렉터리에 저장합니다. 생성이 성공했는지 확인합니다.  
![\[MCU 선택, 펌웨어 확인 유형, 시퀀스 번호, AES MAC 키 필드 및 보안 펌웨어 생성을 위한 파일 경로 입력이 포함된 보안 플래시 프로그래머 창을 Renesas합니다.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/update-firmware-rx65n.png)

1. [업데이트를 저장할 Amazon S3 버킷 생성](dg-ota-bucket.md)에 설명된 대로 펌웨어 업데이트 `userproj.rsu`를 Amazon S3 버킷에 업로드합니다.  
![\[폴더, 업로드, 버전 및 권한 옵션이 있는 Amazon S3 버킷 관리 인터페이스\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/upload-firmware-rx65n.png)

1. RX65N-RSK 펌웨어를 업데이트하는 작업을 생성합니다.

   AWS IoT 작업은 하나 이상의 연결된 디바이스에 보류 중인 [작업을](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html) 알리는 서비스입니다. 작업을 사용하여 디바이스 플릿을 관리하거나, 디바이스의 펌웨어 및 보안 인증서를 업데이트하거나, 디바이스 재시작 및 진단과 같은 관리 작업을 수행할 수 있습니다.

   1. [AWS IoT 콘솔](https://console.aws.amazon.com/iotv2/)에 로그인합니다. 탐색 창에서 **관리**를 선택하고 **작업**을 선택합니다.

   1. **작업 생성**을 선택하고 **OTA 업데이트 작업 생성**을 선택합니다. 사물을 선택하고 **다음**을 선택합니다.

   1. 다음과 같이 FreeRTOS OTA 업데이트 작업을 생성합니다.
      + **MQTT**를 선택합니다.
      + 이전 섹션에서 생성한 코드 서명 프로필을 선택합니다.
      + Amazon S3 버킷에 업로드한 펌웨어 이미지를 선택합니다.
      + **디바이스에 있는 펌웨어 이미지의 경로 이름**에 **test**를 입력합니다.
      + 이전 섹션에서 생성한 IAM 역할을 선택합니다.

   1. **다음**을 선택합니다.  
![\[새 펌웨어에 서명하고, 이전에 서명된 펌웨어를 선택하고, 사용자 지정 서명된 펌웨어를 사용하고, 코드 서명 프로파일, 펌웨어 이미지 파일, 디바이스 경로 및 OTA 업데이트 작업을 위한 IAM 역할을 지정하는 옵션이 포함된 펌웨어 이미지 서명 및 OTA 업데이트 설정입니다.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/create-job-next-rx65n.png)

   1. ID를 입력한 다음 **생성**을 선택합니다.

1. Tera Term을 다시 열어 펌웨어가 OTA 데모 버전 0.9.3으로 성공적으로 업데이트되었는지 확인합니다.  
![\[브로커에 대한 스레드의 초기화 및 연결을 보여주는 명령줄 출력입니다.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/update-successful-rx65n.png)

1.  AWS IoT 콘솔에서 작업 상태가 **성공**인지 확인합니다.  
![\[1개의 리소스가 성공했음을 보여주는 AFR OTA-demo 테스트 작업 개요입니다.\]](http://docs.aws.amazon.com/ko_kr/freertos/latest/userguide/images/completed-succeeded-rx65n.png)