메모리에서 주소가 고정되어있는 영역은 MBR 의 시작, 끝주소및 SoftDevice 의 시작주소( MBR 의 끝 주소와 동일함)뿐이다. 그 외에 SodftDevice 끝주소, Application 시작, 끝 주소, Bootloader 시작주소는 가변 가능하며, 즉 개발자가 해당 주소를 사용자 정의해야 한다.
- MBR ( Master Boot Record )은 필수 기록되어있어야 함.
- SoftDevice 활용하는 경우에는 SoftDevice 내에 MBR 이 기본 포함되어있기 때문에 SoftDevice 기록시 MBR 도 같이 기록됨.
- Bootloader 는 필수는 아니며 필요시 구현하여 기록.
위와 같은 메모리 구조에서 사용자 데이터를 플래시에 기록하려면 어디가 좋은가?
Application 의 끝 지점부터 주소가 작은 쪽으로 확장 기록함이 무난. 즉, 부트로더 기록하는 시작주소인 BOOTLOADERADDR-1*(4096) 부터 -2*(4096),-3*(4096) 식으로 확장 하면서 기록한다. 4096 은 플래시 메모리의 1페이지 당 바이트 수량임. App 펌 업데이트 하는 경우에도 사용자 플래시 데이터 기록 지워지지 않도록 하기 위함.
MBR ( Master Boot Record ).
- 주요기능 : application, bootloader 재기록.
- MBR 펌웨어 기록되는 플래시메모리 주소 : 고정된 영역 0x0~ 0x00001 . 시작, 끝 주소 고정임.
- MBR 의 펌웨어 소스는 제공되지 않으며, NORDIC 사에서는 nRF5 SDK 배포파일중 바이너리인 SoftDevice 에 포함시켜서 배포하거나, 혹은 mbr.hex (경로 : D:\Test_nRF5SDK\nRF5_SDK_17.0.2_d674dde\components\softdevice\mbr\hex 내의 mbr_nrf52_2.4.1_mbr.hex)만 배포함.
SoftDevice
- 주요 코어 기능이 구현되어 있는 바이너리형식으로만 배포됨 (소스 배포 안함)
- - 코어 기능 예 : BLE stack 등.
- SoftDevice 펌웨어 기록되는 플래시 메모리 주소: 고정된 0x00001(MBR 영역의 끝지점) 부터 ~ SoftDevice 의 용량 이상. 시작 주소는 고정되어있으나 끝 주소는 고정되어있지 않음. SoftDevice 의 용량에 의하여 결정됨.
Application
- 개발자가 의도한 사용자 기능 구현된 것
- Application 에서 SoftDevice 에서 제공되는 기능 활용한 코딩가능. 예 : BLE 기능을 구현하는 경우 s140 이라는 SoftDevice 이용함.
- Application 펌웨어 기록되는 플래시 메모리 주소 : SoftDevice 이후 지점부터. SoftDevice 사용하지 않는 경우엔 MBR 영역 이후 지점부터.
- softdevice & bootloader 가 구현된 경우 Application 의 시작주소는 bootloader 가 SoftDevice 에 알려주게된다.
- - 함수 : sd_softdevice_vector_table_base_set(uint32_t address)
Bootloader.
- 주요기능 : in-system firmware update 과정 핸들링 할 수 있다.
- SoftDevice 에 완전하게 접근가능한 일반 application 처럼 bootloader 도 SoftDevice 에 완전하게 접근가능하다.
- - bootloader 에서 SoftDevice 에 완전하게 접근가능하기 때문에 SoftDevice 의 BLE 통신 같은 기능을 활용가능하다.
- bootloader 펌웨어 기록되는 플래시메모리 주소 : 통상 메모리 끝부분에 사용자 정의한 메모리 주소 (BOOTLOADERADDR)부터 기록함.
- - 펌웨어 소스 코드에서의 bootloader 가 기록되는 메모리 첫 주소 BOOTLOADERADDR 는 nrf_mbr.h(nRF5 SDK 설치시 경로 \nRF5_SDK_17.0.2_d674dde\components\softdevice\s140\headers\nrf52 에 있음) 에 기록되어 있으며 칩에 이 주소 정보 저장소는 플래시 메모리의 MBR_BOOTLOADER_ADDR 또는 UICR.NRFFW[0] (이것 역시 플래시 메모리에 기록되는것) 에 모두 기록가능하다.
부팅시 MBR 은 BOOTLOADADDR 을 읽기 위하여 먼저 플래시메모리의 주소 MBR_BOOTLOADER_ADDR 을 읽어서 bootloader 주소가 있다면 해당값을 읽어서 후처리 하며, bootloader 주소가 기록되어있지 않다면 ( 플레시메모리 기본 값인 0xFFFFFFFF 가 기록되어있다면 bootloader 주소 기록되지 않은 것) UICR.NRFFW[0] 을 읽어서 후처리하게된다.
즉, 2개 중에 어느 한 곳이라도 BOOTLOADADDR 기록된 값이 있다면 해당 기록된 값을 BOOTLOADDR 로 인지하고 후처리 진행된다. 2개 모두 기록했다면 먼저 읽어들이는 MBR_BOOTLOADER_ADDR 값을 BOOTLOADADDR 로 인지하고 후처리한다.
- softdevice & bootloader 가 구현된 경우 Application 의 시작주소는 bootloader 가 SoftDevice 에 알려주게된다.
- - 함수 : sd_softdevice_vector_table_base_set(uint32_t address)
- bootloader 는 펌웨어들( application , SoftDevice, bootloader 자신까지 포함) 재기록과정을 추적하고 무결성 처리과정을 책임진다. 펌웨어 기록과정중 발생하는 비정상 reset 이 발생한 경우 bootloader 가 이를 검출하고 펌웨어 기록과정을 재개 한다.
코드에서 bootloader addr 구하기 포럼글.
포럼글
연관
NORIC 사 제공정보 및 포럼에서의 연관정보
DFU 이슈 BLE 와 USB 모두 DFU 로 사용가능하냐에 대한 ..
DFU over BLE and USB - Nordic Q&A - Nordic DevZone - Nordic DevZone (nordicsemi.com)
devzone.nordicsemi.com/f/nordic-q-a/43077/nrf52840-dfu-usb-and-ble
Search - Nordic DevZone (nordicsemi.com)
첫 등록 : 2021.03.22
최종 수정 : 2023.07.24
단축 주소 : https://igotit.tistory.com/2799
'임베디드.일렉트로닉스 > nRF52' 카테고리의 다른 글
nRF52 . Programmer . 경고 Part of the HEX regions are out of the device memory size (0) | 2023.01.20 |
---|---|
nRF52 . SES . 빌드 오류 해결 .text .rodata is larger than specified size. (0) | 2023.01.19 |
nRF52840. USB CDC (com 포트) 구현. (6) | 2020.11.18 |
nRF52. BLE Central Multilink. Nordic UART Service(NUS) Client 구현. (3) | 2019.11.10 |
nRF52. SPI (0) | 2019.10.25 |
댓글