IDE: SEGGER Embedded Studio for ARM V6.30

SDK: nRF5_SDK_17.1.0

 

 

nrf52832는 내부 온도센서를 가지고 있습니다.

nRF52832 Product Specification v1.4 에 명시된 온도센서

 

온도센서 정보

 

 

온도값의 범위는 디바이스의 동작 온도보다 크거나 같습니다.

온도값의 분해능은 0.25도로 레지스터 값이 4일 때 1도를 나타냅니다. 

 

이를 사용하기 위해 SDK에서는 예제 프로그램도 제공되고 있습니다.

>> nRF5_SDK_17.1.0_ddde560\examples\peripheral\temperature

 

/**
 * Copyright (c) 2014 - 2021, Nordic Semiconductor ASA
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice, this
 *    list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form, except as embedded into a Nordic
 *    Semiconductor ASA integrated circuit in a product or a software update for
 *    such product, must reproduce the above copyright notice, this list of
 *    conditions and the following disclaimer in the documentation and/or other
 *    materials provided with the distribution.
 *
 * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
 *    contributors may be used to endorse or promote products derived from this
 *    software without specific prior written permission.
 *
 * 4. This software, with or without modification, must only be used with a
 *    Nordic Semiconductor ASA integrated circuit.
 *
 * 5. Any software provided in binary form under this license must not be reverse
 *    engineered, decompiled, modified and/or disassembled.
 *
 * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */
/** @file
* @defgroup temperature_example_main main.c
* @{
* @ingroup temperature_example
* @brief Temperature Example Application main file.
* @details
* This file contains the source code for a sample application using the temperature sensor.
* This contains workaround for PAN_028 rev2.0A anomalies 28, 29,30 and 31. PAN 43 is not covered.
*  - PAN_028 rev2.0A anomaly 28 - TEMP: Negative measured values are not represented correctly
*  - PAN_028 rev2.0A anomaly 29 - TEMP: Stop task clears the TEMP register.
*  - PAN_028 rev2.0A anomaly 30 - TEMP: Temp module analog front end does not power down when DATARDY event occurs.
*  - PAN_028 rev2.0A anomaly 31 - TEMP: Temperature offset value has to be manually loaded to the TEMP module
*  - PAN_028 rev2.0A anomaly 43 - TEMP: Using PPI between DATARDY event and START task is not functional.
*
*/

#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include "nrf.h"
#include "nrf_delay.h"
#include "nrf_temp.h"
#include "app_error.h"
#include "bsp.h"

#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_log_default_backends.h"
/** @brief Function for main application entry.
 */
int main(void)
{
    // This function contains workaround for PAN_028 rev2.0A anomalies 28, 29,30 and 31.
    int32_t volatile temp;

    nrf_temp_init();

    APP_ERROR_CHECK(NRF_LOG_INIT(NULL));
    NRF_LOG_DEFAULT_BACKENDS_INIT();
    NRF_LOG_INFO("Temperature example started.");

    while (true)
    {
        NRF_TEMP->TASKS_START = 1; /** Start the temperature measurement. */

        /* Busy wait while temperature measurement is not finished, you can skip waiting if you enable interrupt for DATARDY event and read the result in the interrupt. */
        /*lint -e{845} // A zero has been given as right argument to operator '|'" */
        while (NRF_TEMP->EVENTS_DATARDY == 0)
        {
            // Do nothing.
        }
        NRF_TEMP->EVENTS_DATARDY = 0;

        /**@note Workaround for PAN_028 rev2.0A anomaly 29 - TEMP: Stop task clears the TEMP register. */
        temp = (nrf_temp_read() / 4);

        /**@note Workaround for PAN_028 rev2.0A anomaly 30 - TEMP: Temp module analog front end does not power down when DATARDY event occurs. */
        NRF_TEMP->TASKS_STOP = 1; /** Stop the temperature measurement. */

        NRF_LOG_INFO("Actual temperature: %d", (int)temp);
        nrf_delay_ms(500);

        NRF_LOG_FLUSH();
    }
}


/** @} */

 

위는 500ms마다 온도 값을 읽는 동작을 하는 코드입니다.

 

위 코드를 참조하여 다른 ble_app_uart 와 같은 예제 프로그램에서 적용하니까 다음과 같은 에러가 나타나면서 Hard Fault가 발생하는 것을 보게 됩니다.

 

SOFTDEVICE: INVALID MEMORY ACCESS

 

SOFTDEVICE를 사용하면 메모리에 직접 접근이 안되서 나타나는 현상으로

다음과 같은 코드로 내부 온도 값을 읽을 수 있습니다.

 

int32_t temp;
sd_temp_get(&temp);
temp = (int)temp / 4;

 

 

참조

nRF52832 Product Specification (nordicsemi.com)

nrf_temp_read() or sd_temp_get(&t) fault with S132 - Nordic Q&A - Nordic DevZone - Nordic DevZone (nordicsemi.com)

 

반응형

SEGGER Embedded Studio 버전: V6.30b (64bit)

SDK 버전: nRF52_SDK_17.1.0_ddde560

Example 프로젝트 : examples > ble_peripheral > ble_app_bms

 

ble_app_bms 예제 프로젝트를 가지고

Bonding 후 장치 제거하고 다시 Bonding을 진행했는데 Pairing이 진행되지 않는 문제가 있었습니다.

 

장치 검색에 Nordic_BMS가 나타난 화면

 

 

 

기기 등록 메세지창

 

성공적으로 Nordic_BMS가 Bonding된 화면

 

 

정상적으로 진행 된 Bonding 로그 메세지

 

 

 

위 이미지들은 Nordic_BMS 장치를 Pairing & Bonding 절차를 진행한 것입니다.

 

이 장치를 제거 하고 다시 같은 과정을 반복했더니 Pairing 되지 않았고 이 때 로그 메세지에는 다른 로그가 나타났습니다.

에러 코드 133

 

Bonding Error코드 133을 나타내며 연결 해제되었습니다.

 

이를 해결하기 위해서 peer_manager_handler.c 파일에서 

void pm_handler_pm_evt_log(pm_evt_t const * p_pm_evt) 함수 안에 

caes PM_EVT_CONN_SEC_CONFIG_REQ: 에서 다음 코드를 넣어줍니다.

 

// peer_manager_handler.c

void pm_handler_pm_evt_log(pm_evt_t const * p_pm_evt)
{
    NRF_LOG_DEBUG("Event %s", m_event_str[p_pm_evt->evt_id]);

    switch (p_pm_evt->evt_id)
    {
    	...
        
		case PM_EVT_CONN_SEC_CONFIG_REQ:
			NRF_LOG_DEBUG("Security configuration request");
			pm_conn_sec_config_t config = {.allow_repairing = true};
			pm_conn_sec_config_reply(p_pm_evt->conn_handle, &config);
			break;
            
        ...
    }
}

 

 

빌드 후 다운로딩하여 동작을 확인 하면 

장치 제거 후 다시 Bonding 되는 것을 확인 할 수 있습니다.

 

 

 

- 출처

 

Pairing and bonding after deleting synchronization - Nordic Q&A - Nordic DevZone - Nordic DevZone (nordicsemi.com)

반응형

SEGGER Embedded Studio 버전: V6.32b (64bit)

SDK 버전: nRF52_SDK_17.1.0_ddde560

Example 프로젝트 : examples > ble_peripheral > ble_app_hrs

 

안녕하세요.

 

NRF52를 테스트 하기 위해 ble_app_hrs 프로젝트를 빌드했는데 다음과 같은 에러를 만났습니다.

_vfprintf.h 에러

 

_vfprintf.h: No such file or directory

 

해결책으로

SEGGER_RTT_Syscalls_SES.c 를 Exclude From Build 합니다.

 

 

 

 

Exclude from build 적용된 화면

 

적용 후 프로젝트를 Rebuild 하면 빌드가 성공을 볼 수 있습니다.

 

 

 

간혹 버전에 따라 .text, .rodata 사이즈 에러를 볼 수도 있습니다.

 

이를 해결하기 위해서 다음 포스팅을 확인해 보세요.

[NRF52][SEGGER].text is larger than specified size :: 취미 블로그 (tistory.com)

 

[NRF52][SEGGER].text is larger than specified size

SEGGER Embedded Studio 버전: V6.32b (64bit) SDK 버전: nRF52_SDK_17.1.0_ddde560 Example 프로젝트 : examples > ble_peripheral > ble_app_uart 안녕하세요. NRF52를 테스트 하기 위해 ble_app_uart 프로젝트..

jeonhj.tistory.com

 

 

이상입니다.

 

감사합니다.

 

 

출처

nRF5 SDK 17.1.0 examples is not compiling in latest SES (6.20a) - Nordic Q&A - Nordic DevZone - Nordic DevZone (nordicsemi.com)

 

nRF5 SDK 17.1.0 examples is not compiling in latest SES (6.20a) - Nordic Q&A - Nordic DevZone - Nordic DevZone

 

devzone.nordicsemi.com

 

반응형

SEGGER Embedded Studio 버전: V6.32b (64bit)

SDK 버전: nRF52_SDK_17.1.0_ddde560

Example 프로젝트 : examples > ble_peripheral > ble_app_uart

 

 

안녕하세요.

 

NRF52를 테스트 하기 위해 ble_app_uart 프로젝트를 빌드했는데 다음과 같은 에러를 만났습니다.

 

.text is larger than specified size
.rodata is larger than specified size

 

단지 Build를 했을 뿐인데.. 

 

구글링을 해 보니

flash_placement.xml 파일에서 메모리맵을 정의하는데, 여기서 .text와 .rodata의 size를 4바이트로 제한시켜 놓았습니다.  예제 코드를 Build해서 메모리 사용을 보면 Flash와 Ram 영역이 모두 KB단위로 이를 초과하기 때문에 발생하는 에러입니다. SEGGER Studio 버전에 따라 해당 에러가 나타나는것 같습니다.

 

메모리 제한

 

ble_app_uart프로젝트 메모리 사용량

 

 

프로젝트 내에 있는 flash_placement.xml 을 열어 .text 와 .rodata에 size를 제한한 것을 지워줍니다.

flash_placement.xml&nbsp; 파일 위치

 

size가 지워진 화면

 

flash_placement.xml  파일 저장후

 

Segger Studio에서 Close Solution

 

그리고 다시 솔루션을 연 후 Rebuild를 하면 정상적으로 Build가 성공하는 것을 볼 수 있습니다.

 

 

 

이상입니다.

감사합니다.

 

출처

빌드 오류 - 북유럽 Q&A - 노르딕 데브존 - 노르딕 데브존 (nordicsemi.com)

 

Build error - Nordic Q&A - Nordic DevZone - Nordic DevZone

 

devzone.nordicsemi.com

 

반응형

'MCU > NRF' 카테고리의 다른 글

[NRF52] 내부 온도 값 읽기  (1) 2022.09.14
[NRF52][SEGGER] repairing  (0) 2022.07.25
[NRF52][SEGGER]__vfprintf.h 에러 해결  (0) 2022.07.24
[nrf52]unknown type name '__printf_tag_ptr' 해결  (4) 2022.05.12

IDE: SEGGER Embedded Studio for ARM V6.30

SDK: nRF5_SDK_17.1.0

 

SDK/example/ble_peripheral/ble_app_uart 예제를 빌드를 하는데 다음과 같이 

__printf_tag_ptr의 타입을 모르겠다는 에러가 발생한다.

 

nRF5_SDK_17.1.0_ddde560\components\libraries\uart\retarget.c:101:23: error: unknown type name '__printf_tag_ptr'
32>   101 | int __putchar(int ch, __printf_tag_ptr tag_ptr)
32>         |                           ^~~~~~~~~~~~~~~~
Build failed

에러 나는 위치 "retarget.c"

 

이를 해결하기 위해

 

1. retarget.c를 exclude 시키고

 

2. 프로젝트 옵션 설정

3. Configurations를 Common으로 설정, Code->Library->Library I/O 를 RTT로 설정

 

4. 프로젝트 rebuild 하면 컴파일이 성공적으로 된다.

반응형

+ Recent posts