티스토리 뷰

Technology/Bluetooth

nrf52832 vs nrf52810 pin issue

캡틴테크 2022. 11. 17. 12:18
반응형

nrf52832와 nrf52810 칩을 선택할때 목적에 맞게 잘 선택할 필요에 대해서 설명을 드렸었는데요. 두 칩을 선택할때 이왕이면 더 싼 칩으로 생각하신다면 어쩔 수 없이 nrf52810으로 할 수 밖에 없습니다. 다만 그래도 되는 것은 nrf53832와 nrf52810은 핀맵이 동일하기 때문에 양산전에 이슈가 생긴다면 빠르게 칩만 바꾸고 소프트웨어만 변경하면 최소비용이 들게 됩니다. 물론 처음부터 쪼들리게 잡는 것보단 넓게 잡고 줄여가면서 생산비용을 줄여가는 것이 맞는 방법이겠지만 규모가 작은 경제를 할 수록 크게크게 잡기는 힘들겠죠 아무래도 칩을 구매하는 MOQ가 있기 때문인데. 그러다 보니 저도 nrf52810을 3000개를 구매해서 300개정도 사용을 했었고, 기능이 넘쳐서 더이상 핸들링하기가 어려와 nrf52832로 전환하게 되었습니다. 다행인것은 칩을 제외한 다른 회로 부분들은 그대로 사용할 수 있었고요. 더 좋았던 것은 RTOS도 올리면서 좀더 체계화된 소프트웨어 설계 구조를 잡고 패턴을 적용할 수 있게 되어 안정성 높게 개발 할 수 있었습니다. nrf52810으로 멀티스레딩 구조를 잡으려면 ISR로 꾸역꾸역 해야했는데 말이죠.

https://hero-space.tistory.com/73

 

목적에 따른 Bluetooth Chip 선택하기

IoT 시대라고 말하기에 어색할 만큼, 이제 모든 것이 연결되는게 당영한 세상입니다. 다만 그것을 어떻게 연결하고 연동하는지 관심을 갖다보면 그 사이사이에서 기술의 격차를 볼 수 있는데, 단

hero-space.tistory.com

다만, 오늘 이야기할 것은 핀맵이 동일하지만 문제가 되는 부분이 있어서 공유하려고 합니다. 아마도 실제 경험적인 측면에서 나온 부분이라 이런 내용은 찾아보시기 힘드실거 같습니다.

nrf52810 vs nrf52832 핀맵 확인

그러면 가 칩의 핀맵을 확인해 볼까요?

왼쪽은 nrf52810이고 오른쪽은 nrf52832입니다. 48핀으로 동일하고 nrf52832 기능이 조금 더 많습니다. 하지만 주요 피쳐는 비슷한 것을 볼 수 있는데요 그중에서 주목할 것은 P0.00부터 P0.00 핀 입니다. 왼쪽 부분인데 보시면 머가 살짝 다르죠? NRF52832의 경우 NFC1과 NFC2가 핀 P0.09와 P0.10에 매핑되어야 있습니다. 보통 하나의 핀이 여러가지 역할을 가지고 있고 그에 대한 세팅을 할 수 가 있기에 NFC 기능을 쓰지 않는다면 기본 핀으로 동작할 것이라는 생각을 하게됩니다.

제어가 안되는 nrf52832 P0.10 핀

저는 nrf52810 를 사용하면서 P0.10 핀을 Indicator LED로 제어하는 핀으로 잘 사용했으나 칩을 nrf52832로 바꾸니 제대로 동작하지 않습니다. 확인해보니 NFC 기능으로 기본 설정이 되어 있으므로 안되는 것이네요. 해결 방법은 2가지 입니다. 첫번째는 NFC 포트 설정을 비활 성화 시켜주거나, NFC 기능이 설정되지 않는 다른 일반 핀으로 이동시켜주는 것인데요. 우선 확인을 위해 P0.15번으로 연결해서 제어를 해보았더니 정상적으로 제어가 됩니다. nrf52832에서 P0.15는 일반핀으로 세팅되는 것이 기본설정이고 Tracedata 의 기능으로도 쓸수 있습니다. 다른 방법으로 NFC 포트 비활성화의 경우는 UICR 레지스터를 건드려서 비활성화 해주어야 하늗데요.

https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.nrf52832.ps.v1.1%2Fuicr.html 

 

Nordic Semiconductor Infocenter

 

infocenter.nordicsemi.com

NFC Pins 값을 확인하고 이에 맞게 값을 세팅합니다.

하지만 데이터 시트로 disable하는 방법은 알겠는데 어디다가 어떻게 코드적으로 모르실수 있으니 코드를 확인해보도록 하겠습니다.

nrf52832의 경우 sdk 폴더 네에 modules/mdk 아래 systemn_nrf52.c 파일을 보시면 되는데요 여기서 nfc를 검색해보면 define으로 잘 처리가 되어 있습니다.

    /* Configure NFCT pins as GPIOs if NFCT is not to be used in your code. If CONFIG_NFCT_PINS_AS_GPIOS is not defined,
       two GPIOs (see Product Specification to see which ones) will be reserved for NFC and will not be available as
       normal GPIOs. */
    #if defined (CONFIG_NFCT_PINS_AS_GPIOS) && defined(NFCT_PRESENT)
        if ((NRF_UICR->NFCPINS & UICR_NFCPINS_PROTECT_Msk) == (UICR_NFCPINS_PROTECT_NFC << UICR_NFCPINS_PROTECT_Pos)){
            nvmc_config(NVMC_CONFIG_WEN_Wen);
            NRF_UICR->NFCPINS &= ~UICR_NFCPINS_PROTECT_Msk;
            nvmc_wait();
            nvmc_config(NVMC_CONFIG_WEN_Ren);
            NVIC_SystemReset();
        }
    #endif

CONFIG_NFCT_PINS_AS_GPIOS 디파인을 makefile에 추가해서 빌드하면 P0.09와 P0.10이 일반 GPIO로 동작하는 것을 볼 수가 있다.

# C flags common to all targets
CFLAGS += $(OPT)
CFLAGS += -DAPP_TIMER_V2
CFLAGS += -DAPP_TIMER_V2_RTC1_ENABLED
CFLAGS += -DBOARD_PCA10040
CFLAGS += -DCONFIG_GPIO_AS_PINRESET
CFLAGS += -DCONFIG_NFCT_PINS_AS_GPIOS
CFLAGS += -DFLOAT_ABI_HARD
CFLAGS += -DFREERTOS
CFLAGS += -DNRF52
CFLAGS += -DNRF52832_XXAA
CFLAGS += -DNRF52_PAN_74
CFLAGS += -DNRF_SD_BLE_API_VERSION=7
CFLAGS += -DS132
CFLAGS += -DSOFTDEVICE_PRESENT
CFLAGS += -mcpu=cortex-m4
CFLAGS += -mthumb -mabi=aapcs
CFLAGS += -Wall
CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
# keep every function in a separate section, this allows linker to discard unused ones
CFLAGS += -ffunction-sections -fdata-sections
CFLAGS += -fno-builtin -fshort-enums

# C++ flags common to all targets
CXXFLAGS += $(OPT)
# Assembler flags common to all targets
ASMFLAGS += -g3
ASMFLAGS += -mcpu=cortex-m4
ASMFLAGS += -mthumb -mabi=aapcs
ASMFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
ASMFLAGS += -DAPP_TIMER_V2
ASMFLAGS += -DAPP_TIMER_V2_RTC1_ENABLED
ASMFLAGS += -DBOARD_PCA10040
ASMFLAGS += -DCONFIG_GPIO_AS_PINRESET
ASMFLAGS += -DCONFIG_NFCT_PINS_AS_GPIOS
ASMFLAGS += -DFLOAT_ABI_HARD
ASMFLAGS += -DFREERTOS
ASMFLAGS += -DNRF52
ASMFLAGS += -DNRF52832_XXAA
ASMFLAGS += -DNRF52_PAN_74
ASMFLAGS += -DNRF_SD_BLE_API_VERSION=7
ASMFLAGS += -DS132
ASMFLAGS += -DSOFTDEVICE_PRESENT

데이터 시트만 보고 어디다 어떻게해야 할지 막막할 수 있지만 nrf의 SDK 굉장히 플랫폼화가 잘되어 있습니다. define 처리에 따른 동작 enable/disable 이 특히 그런데, 그러다보니 원소스로 여러가지 모델에 대한 대응이 가능한것 같고 이게 지속적으로 nrf에 락인되는 요인으로 보여져서 사용하면 할 수록 nordic은 칩에 완성도 뿐아니라 software적으로도 참 괜찮다는 생각이 들고, 예제나 문서화도 잘되어있어 블루투스를 사용한다면 추천드립니다.!

반응형
댓글